From d9f4ded1fcc790bfaaf146715f0a310a77b6aded Mon Sep 17 00:00:00 2001 From: Brian Sipple Date: Sun, 22 Oct 2017 23:30:04 -0400 Subject: [PATCH] Refactor chp0-intro-01-randomwalk-traditional - Improve code for the `Walker` class. + Refactor constructor code as a `setup` function. - This brings it more in line with OF conventions -- and prevents the constructor from being called an extra time in `ofApp.cpp`'s `setup` function. - Begin adding screenshots - Simplyfy positioning logic and tweak styling. --- .gitignore | 8 ++- .../README.md | 5 ++ .../bin/data/screenshot-01.png | Bin 0 -> 90299 bytes .../src/main.cpp | 2 +- .../src/ofApp.cpp | 24 ++++----- .../src/ofApp.h | 14 +++-- .../src/walker.cpp | 49 +++++++++--------- .../src/walker.h | 20 ++++--- 8 files changed, 69 insertions(+), 53 deletions(-) create mode 100644 chp0-intro-01-randomwalk-traditional/README.md create mode 100644 chp0-intro-01-randomwalk-traditional/bin/data/screenshot-01.png diff --git a/.gitignore b/.gitignore index 281c03b..a005807 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,11 @@ *.sln *.vcx* *.workspace* +addons.make config.make Makefile + +*.vscode *.xcodeproj *.plist *.xcconfig @@ -27,6 +30,7 @@ project.xcworkspace .svn/ obj/ -bin/ +bin/** +!bin/data build/ -!data/ \ No newline at end of file +!data/ diff --git a/chp0-intro-01-randomwalk-traditional/README.md b/chp0-intro-01-randomwalk-traditional/README.md new file mode 100644 index 0000000..28e51fd --- /dev/null +++ b/chp0-intro-01-randomwalk-traditional/README.md @@ -0,0 +1,5 @@ +# Example I.1: Traditional Random Walk + +![screenshot](./bin/data/screenshot-01.png) + + diff --git a/chp0-intro-01-randomwalk-traditional/bin/data/screenshot-01.png b/chp0-intro-01-randomwalk-traditional/bin/data/screenshot-01.png new file mode 100644 index 0000000000000000000000000000000000000000..5491f452abf3e9334888c6f6403a7410b934f09d GIT binary patch literal 90299 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 SgRT$wv((FbQRaexUH=1>7%`s! literal 0 HcmV?d00001 diff --git a/chp0-intro-01-randomwalk-traditional/src/main.cpp b/chp0-intro-01-randomwalk-traditional/src/main.cpp index 6ca3557..3f4fdf0 100644 --- a/chp0-intro-01-randomwalk-traditional/src/main.cpp +++ b/chp0-intro-01-randomwalk-traditional/src/main.cpp @@ -3,7 +3,7 @@ //======================================================================== int main( ){ - ofSetupOpenGL(800,200,OF_WINDOW); // <-------- setup the GL context + ofSetupOpenGL(1024, 768, OF_WINDOW); // <-------- setup the GL context // this kicks off the running of my app // can be OF_WINDOW or OF_FULLSCREEN diff --git a/chp0-intro-01-randomwalk-traditional/src/ofApp.cpp b/chp0-intro-01-randomwalk-traditional/src/ofApp.cpp index 2aced09..a67e55f 100644 --- a/chp0-intro-01-randomwalk-traditional/src/ofApp.cpp +++ b/chp0-intro-01-randomwalk-traditional/src/ofApp.cpp @@ -2,26 +2,26 @@ //-------------------------------------------------------------- void ofApp::setup(){ - - ofBackground(255); - ofSetBackgroundAuto(false); - - w = walker(); + ofSetBackgroundColor(m_backgroundColor); + ofSetBackgroundAuto(false); + ofSetCircleResolution(100); + + auto position = glm::vec2 { ofGetWidth() / 2, ofGetHeight() / 2 }; + + m_walker.setup(position, 2); } //-------------------------------------------------------------- void ofApp::update(){ - - ofSetFrameRate(mouseX); - w.update(); + m_walker.update(); } //-------------------------------------------------------------- void ofApp::draw(){ - - ofTranslate(ofGetWidth()/2, ofGetHeight()/2); - ofScale(w.scale, w.scale); - w.draw(); + ofFill(); + ofSetColor(m_walkerColor); + + m_walker.draw(); } //-------------------------------------------------------------- diff --git a/chp0-intro-01-randomwalk-traditional/src/ofApp.h b/chp0-intro-01-randomwalk-traditional/src/ofApp.h index 29f986f..09cf221 100644 --- a/chp0-intro-01-randomwalk-traditional/src/ofApp.h +++ b/chp0-intro-01-randomwalk-traditional/src/ofApp.h @@ -1,11 +1,17 @@ #pragma once #include "ofMain.h" -#include "walker.h" +#include "Walker.h" -class ofApp : public ofBaseApp{ +class ofApp : public ofBaseApp { + private: + ofColor m_backgroundColor { 40, 44, 52 }; + ofColor m_walkerColor { 140, 132, 247 }; + + Walker m_walker; + + public: -public: void setup(); void update(); void draw(); @@ -19,6 +25,4 @@ class ofApp : public ofBaseApp{ void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg); - - walker w; }; diff --git a/chp0-intro-01-randomwalk-traditional/src/walker.cpp b/chp0-intro-01-randomwalk-traditional/src/walker.cpp index 5a61fc6..2599db2 100644 --- a/chp0-intro-01-randomwalk-traditional/src/walker.cpp +++ b/chp0-intro-01-randomwalk-traditional/src/walker.cpp @@ -1,36 +1,35 @@ +#include "Walker.h" -#include "walker.h" -walker::walker() { - x = 0; - y = 0; - scale = 5; +void Walker::setup(const glm::vec2& position, int radius) { + m_position = position; + m_radius = radius; } -void walker::update() { - int choice = int(ofRandom(4)); - cout << choice << endl; - - if (choice == 0) x++; - else if (choice == 1) x--; - else if (choice == 2) y++; - else if (choice == 3) y--; - - int rangeWidth = (ofGetWidth()/2) /scale; - int rangeHeight = (ofGetHeight()/2) /scale; - - x = constrain(x, -rangeWidth, rangeWidth); - y = constrain(y, -rangeHeight, rangeHeight); +void Walker::update() { + step(); + keepInBounds(); } -void walker::draw() { - ofSetColor(0,20); - ofDrawRectangle(x, y, 1, 1); +void Walker::draw() { + ofDrawCircle(m_position, m_radius); } -int walker::constrain(int input, int min, int max) { - return (input < min) ? min : ((input > max) ? max : input); -} \ No newline at end of file +void Walker::step() { + int choice = ofRandom(4); + cout << "New step choice: " << choice << "\n"; + + if (choice == 0) m_position.x += (m_radius * 2); + else if (choice == 1) m_position.x -= (m_radius * 2); + else if (choice == 2) m_position.y += (m_radius * 2); + else if (choice == 3) m_position.y -= (m_radius * 2); +} + + +void Walker::keepInBounds() { + m_position.x = ofClamp(m_position.x, 0.0, ofGetWidth()); + m_position.y = ofClamp(m_position.y, 0.0, ofGetHeight()); +} diff --git a/chp0-intro-01-randomwalk-traditional/src/walker.h b/chp0-intro-01-randomwalk-traditional/src/walker.h index 9973c21..22cf3bc 100644 --- a/chp0-intro-01-randomwalk-traditional/src/walker.h +++ b/chp0-intro-01-randomwalk-traditional/src/walker.h @@ -1,17 +1,21 @@ #pragma once + #include "ofMain.h" -class walker { -public: - walker(); +class Walker { + private: + glm::vec2 m_position; + int m_radius; + + void step(); + void keepInBounds(); + public: + void setup(const glm::vec2& position, int radius = 1); void update(); void draw(); - int constrain(int, int, int); - - int x; - int y; - int scale; + const glm::vec2& getPosition() { return m_position; } + void setPosition(const glm::vec2& position) { m_position = position; } };