diff --git a/.gitattributes b/.gitattributes new file mode 100755 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..3b2a2e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,93 @@ +########################### +# ignore generated binaries +# but not the data folder +########################### + +/bin/* +!/bin/data/ + +######### +# general +######### + +[Bb]uild/ +[Oo]bj/ +*.o +[Dd]ebug*/ +[Rr]elease*/ +*.mode* +*.app/ +*.pyc +.svn/ +*.log + +######################## +# IDE files which should +# be ignored +######################## + +# XCode +*.pbxuser +*.plist +*.DS_Store +*.Makefile +Project.xcconfig +*.make +/makefile +*.xcodeproj +*.perspective +*.perspectivev3 +*.mode1v3 +*.mode2v3 +# XCode 4 +xcuserdata +*.xcworkspace + +# Code::Blocks +*.depend +*.layout + +# Visual Studio +*.sdf +*.opensdf +*.suo +*.pdb +*.ilk +*.aps +*.make +*.sln +*.vcxproj +*.filters +*.rc +ipch/ + +# Eclipse +.metadata +local.properties +.externalToolBuilders + +################## +# operating system +################## + +# Linux +*~ +# KDE +.directory +.AppleDouble + +# OSX +.DS_Store +*.swp +*~.nib +# Thumbnails +._* + +# Windows +# Image file caches +Thumbs.db +# Folder config file +Desktop.ini + +# Android +.csettings \ No newline at end of file diff --git a/emptyExample.png b/emptyExample.png new file mode 100644 index 0000000..8de27cc Binary files /dev/null and b/emptyExample.png differ diff --git a/src/avatar.cpp b/src/avatar.cpp new file mode 100644 index 0000000..402824d --- /dev/null +++ b/src/avatar.cpp @@ -0,0 +1,99 @@ +// +// avatar.cpp +// emptyExample +// +// Created by Sebastian Holzki on 17.04.19. +// + +#include "avatar.hpp" + + + +Avatar::Avatar(int playerType){ + + setup(playerType); + +} + + +// ----------------------------------------- + + +Avatar::~Avatar(){ + + +} + + +// ----------------------------------------- + + +void Avatar::setup(int playerType){ + + //Load the right icon from data in ofImage, by using the transmitted info about the playerType + + // --> icon = .... + +} + +// ----------------------------------------- + + +void Avatar::update(){ + + + +} + +// ----------------------------------------- + +void Avatar::draw(){ + + icon.draw(position); + +} + +// ----------------------------------------- + +ofVec2f Avatar::getPosition(){ + + return position; + +} + +// ----------------------------------------- + +void Avatar::setPosition(int _x, int _y){ + + position.x = _x; + position.y = _y; + +} + +void Avatar::setPosition(ofVec2f _position){ + + position = _position; + +} + + +// ----------------------------------------- + +void Avatar::clipToAvatar(Avatar _avatar){ + + //Read coordinates to clip to: + ofVec2f tempCoords = _avatar.getPosition(); + + if( tempCoords.y == 0 ){ + + position.x = tempCoords.x + 20 ; + position.y = tempCoords.y + 20 ; + + }else{ + + position.x = tempCoords.x + 20 ; + position.y = tempCoords.y - 20 ; + + } + +} diff --git a/src/avatar.hpp b/src/avatar.hpp new file mode 100644 index 0000000..ad125b0 --- /dev/null +++ b/src/avatar.hpp @@ -0,0 +1,51 @@ +// +// avatar.hpp +// emptyExample +// +// Created by Sebastian Holzki on 17.04.19. +// + +#pragma once +#include +#include "ofMain.h" + + + + +class Avatar { + + +public: + + Avatar(int playerType); + ~Avatar(); + + void setup(int playerType); + void update(); + void draw(); + + void setPlayerType(); + int getPlayerType(); + + ofVec2f getPosition(); + void setPosition(int x, int y); + void setPosition(ofVec2f position); + + + void clipToAvatar(Avatar avatar); //A particular avatar can clip its position, depending on the position of another avatar, compared to a beehive-structure) + + + +private: + + ofImage icon; + int playerType; + ofVec2f position; + + + + + + +}; + diff --git a/src/greatWhole.cpp b/src/greatWhole.cpp new file mode 100644 index 0000000..e426215 --- /dev/null +++ b/src/greatWhole.cpp @@ -0,0 +1,80 @@ +// +// greatWhole.cpp +// emptyExample +// +// Created by Sebastian Holzki on 17.04.19. +// + +#include "greatWhole.hpp" +#include "avatar.hpp" + + + + +GreatWhole::GreatWhole() +{ + + +} + +// ----------------------------------- + +GreatWhole::~GreatWhole() +{ + + +} + +// ----------------------------------- + + + +void GreatWhole::setup(){ + + + +} + +// ----------------------------------------------- + + +void GreatWhole::update(vector avatars){ + + + + +} + +// ----------------------------------------------- + + +void GreatWhole::draw(){ + + /* + + draw the whole avatar vector + + */ + + +} + + +// ----------------------------------------------- + + +void GreatWhole::addAvatar(Avatar avatar){ + + + // avatars.push_back(avatar); + + /* + + Set coordinates in abhängigkeit vom letzten also bei avatars at (max-1) + clip avatar dann an den letzten, y und x angepasst an x und y von avatars.at(max-1) + + */ + +} + + diff --git a/src/greatWhole.hpp b/src/greatWhole.hpp new file mode 100644 index 0000000..fdcb95a --- /dev/null +++ b/src/greatWhole.hpp @@ -0,0 +1,41 @@ +// +// greatWhole.hpp +// emptyExample +// +// Created by Sebastian Holzki on 17.04.19. +// + +#include +#include "ofMain.h" +#include "avatar.hpp" + +#pragma once + + +/* Das Große Ganze beinhaltet eine unbestimmte Anzahl an bereits eingecheckten Personen, deren Infos in Avatare gespeichert werden. + Es bedarf eine setup(), update() und draw()-Methode. Dabei soll Platz für den vector geschaffen werden. In update wird eine + gewisse Bewegung der Avatar-"Bubbles" definiert. Draw zeichnet die Avatare auf die Stelen, also die entsprechenden Koordinaten. */ + + +class GreatWhole { + + +public: + + GreatWhole(); + ~GreatWhole(); + + void setup(); + void update(vector avatars); + void draw(); + + void addAvatar(Avatar avatar); + Avatar getAvatarAt(int i); + + + +private: + + vector avatars; + +}; diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..f73817a --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,15 @@ + +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + + ofSetupOpenGL(1000,1000, OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp( new ofApp()); + +} diff --git a/src/objectPhysics.cpp b/src/objectPhysics.cpp new file mode 100644 index 0000000..089b6d3 --- /dev/null +++ b/src/objectPhysics.cpp @@ -0,0 +1,56 @@ +// +// objectPhysics.cpp +// particle_combined +// +// Created by Sebastian Holzki on 11.06.19. +// + +#include "objectPhysics.hpp" + + + +ObjectPhysics::ObjectPhysics(){ + + cout<< "ObjectPhysics Konstruktor"< +#include "ofMain.h" +#endif /* objectPhysics_hpp */ + + +class ObjectPhysics { + +public: + + ObjectPhysics(); + ~ObjectPhysics(); + + +protected: + + ofVec2f position; + bool emitting; + bool attracting; + + float force; + float vel; + +}; + +// ******* ATTRAKTOR ******* ATTRAKTOR ******* ATTRAKTOR ******* ATTRAKTOR ******* ATTRAKTOR ******* + +class Attraktor: public ObjectPhysics { + + +public: + + Attraktor(); + Attraktor(float x, float y); + ~Attraktor(); + + +// Attraktor(){ +// +// emitting = false; +// attracting = true; +// +// cout << "Attraktor Konstruktor" << endl; +// +// }; +// +// Attraktor(float x, float y){ +// +// emitting = false; +// attracting = true; +// +// position.set(x,y); +// +// cout << "Attraktor Konstruktor überladen" << endl; +// }; +// +// +// +// ~Attraktor(){ +// cout << "Attraktor Destruktor" << endl; +// }; + +private: + + +}; + +// ******* EMITTER ******* EMITTER ******* EMITTER ******* EMITTER ******* EMITTER ******* EMITTER ******* + +class Emitter: public ObjectPhysics { + + +public: + +// Emitter(){ +// +// emitting = true; +// attracting = false; +// +// }; + Emitter(); + ~Emitter(); + +private: + +}; + diff --git a/src/ofApp.cpp b/src/ofApp.cpp new file mode 100644 index 0000000..dd63115 --- /dev/null +++ b/src/ofApp.cpp @@ -0,0 +1,229 @@ + +#include "ofApp.h" + + +// *** GLOBALS DEFINITION *** GLOBALS DEFINITION *** GLOBALS DEFINITION *** GLOBALS DEFINITION **** + + +//-------------------------------------------------------------- +void ofApp::setup(){ + + VISITOR_COUNT = 0; + VISITOR_COUNT_LASTFRAME = 0; + PARTICLE_COUNT = 0; + + + for (int i = 0; i < particleSystems.size(); i++){ + + + + } + + + // *** OSC Setup *** OSC Setup *** OSC Setup *** + + receiver.setup(PORT); + +} + +//-------------------------------------------------------------- +void ofApp::update(){ + + + // *** OSC RECEIVER *** OSC RECEIVER *** OSC RECEIVER *** + + + /* + + Here the program will read and convert the information from the tracking, count them & put coordinates of people entering the ground. + We have to define, how this information will affect the particleSystems! + + -Create message, put the stuff from the received OSC in it + -duplicate the msg as string to enable onscreen supervision + -There will be a global visitor count called VISITOR_COUNT + -Use VISITOR_COUNT to correctly update the size of the visitors vector + -Iterate trough Message-values and put information in the visitors vector + + */ + + + + while(receiver.hasWaitingMessages()){ + + ofxOscMessage visitorInformations; + receiver.getNextMessage(&visitorInformations); + + oscMsg = ofToString(visitorInformations); + + if(visitorInformations.getAddress() == "/centroidsOfBlob") { + + VISITOR_COUNT_LASTFRAME = VISITOR_COUNT; + VISITOR_COUNT = visitorInformations.getArgAsInt(0); //update the number of Visitors from OSCs first Argument, which is the number of blobs (detected Contours) + + + +// *** CHECK FOR CHANGES IN THE NUMBER OF VISITORS *** CHECK FOR CHANGES IN THE NUMBER OF VISITORS *** CHECK FOR CHANGES IN THE NUMBER OF VISITORS *** + + +// If there are MORE visitors now, add the difference to the visitors vector + + + if(VISITOR_COUNT > VISITOR_COUNT_LASTFRAME){ + + for(int i = 0; i < (VISITOR_COUNT - VISITOR_COUNT_LASTFRAME); i++){ + + visitors.push_back(new Visitor); + + } + } + + +// If there are LESS visitors now, delete the difference from the visitors vector + + + if(VISITOR_COUNT < VISITOR_COUNT_LASTFRAME){ + + for(int i = 0; i < (VISITOR_COUNT_LASTFRAME - VISITOR_COUNT); i++){ + + delete visitors.at(visitors.size()); //maybe nicht zulässig, weil fehleranfällig??? + //erase ergänzen! + } + + } + + +// *** TRANSFER TRACKING-INFORMATION INTO VISITOR-CLASS *** TRANSFER TRACKING-INFORMATION INTO VISITOR-CLASS *** + + + for(int i = 1; i <= VISITOR_COUNT; i++){ + + //put Information into visitors + + float xOfVisitor = visitorInformations.getArgAsFloat(i * 2 - 1) * ofGetWindowWidth(); + float yOfVisitor = visitorInformations.getArgAsFloat(i * 2) * ofGetWindowHeight(); + + visitors.at( i - 1 )->setPosition(xOfVisitor, yOfVisitor); + + } + + } //end of .getAddress() == "/centroidsOfBlob") + + } //end of receiver.hasWaitingMessages + + + + + + + // *** RFID Input *** RFID Input *** RFID Input *** RFID Input *** RFID Input *** + + /* + + + + Here we have to define, how the particleSystems react to RFID input. + Read ID of a visitor and let the particlesystems react to it. + + !!! Here in ofApp.cpp there will only be the transfer of incoming information about IDs, playertypes, etc. into the update-methods of the particleSystems. !!! + + For example: + + - Tell all particleSystems about a new checkedIn-Visitor + - Set the playerType of one particular particleSystem to the checked in. + + */ + + + + // *** MAIN UPDATE PARTICLE SYSTEMS *** MAIN UPDATE PARTICLE SYSTEMS *** MAIN UPDATE PARTICLE SYSTEMS *** + + + for (int p = 0; p < particleSystems.size();) + { + // Update particle systems + +// particleSystems.at(p)->update("xxx , xxx , xxx , .... "); + + + } + + + +} //end of update() + + + + +//-------------------------------------------------------------- +void ofApp::draw(){ + + + //draw all ParticleSystems that are in the particleSystems vector + + for(int p = 0; p < particleSystems.size(); p++) + { + particleSystems.at(p)->draw(); + } + + +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseEntered(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseExited(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} + +//-------------------------------------------------------------- + + + diff --git a/src/ofApp.h b/src/ofApp.h new file mode 100644 index 0000000..1259f1c --- /dev/null +++ b/src/ofApp.h @@ -0,0 +1,83 @@ +#pragma once + +#include "ofMain.h" +#include "particleSystem.hpp" +#include "greatWhole.hpp" +#include "avatar.hpp" +#include "ofxOsc.h" +#include "visitor.hpp" +#include "objectPhysics.hpp" +#include "particle.hpp" + + + int WINDOWSIZE_WIDTH = 1000; + int WINDOWSIZE_HEIGHT = 1000; + + + + +// *** SETUP OSC INFORMATION *** SETUP OSC INFORMATION *** + +#define PORT 12345 +#define HOST "xxx.xxx.xxx.xxx" + + + + +class ofApp : public ofBaseApp{ + + public: + + void setup(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseEntered(int x, int y); + void mouseExited(int x, int y); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + + int PARTICLE_COUNT; + //+1 for every new Particle, -1 for every Particle that gets older than the defined maxLife + int VISITOR_COUNT; + //the visitor count will be fed with the nBlobs-value from incoming OSC messages + int VISITOR_COUNT_LASTFRAME; + + + +private: + + // *** OSC *** OSC *** OSC *** + + string oscMsg; + ofxOscReceiver receiver; + float timeSent, timeReceived; + + + //Information about what is going on in the scene + + int nBlobs; //count of the tracked visitors + + + + + + vector visitors; + + vector particleSystems; + + GreatWhole dasGrosseGanze; + + +}; + + + diff --git a/src/particle.cpp b/src/particle.cpp new file mode 100644 index 0000000..1c51d0c --- /dev/null +++ b/src/particle.cpp @@ -0,0 +1,122 @@ +// +// particle.cpp +// emptyExample +// +// Created by Sebastian Holzki on 16.04.19. +// + +#include "particle.hpp" + + + +Particle::Particle() +{ + + +} + +// ----------------------------------- + +Particle::~Particle() +{ + + +} + +// ----------------------------------- + + + +void Particle::setup(ofVec2f _position){ + + this->position = _position; + + velocity.set(0,0); + age = 0.0; + maxLife = 12.0; + + color.set(250,250,250); + size = 2.0; + mass = 100; + +} + +// ----------------------------------- + +void Particle::update(float deltaT){ + + + + + +} + + +// ----------------------------------- + +void Particle::draw(){ + + ofDrawCircle(position,size); + +} + + +//----------------------------------- + +float Particle::getMaxLife(){ + + return maxLife; + +} + +//----------------------------------- + +float Particle::getAge(){ + + return age; + +} + +//----------------------------------- + + +void Particle::mapParticle(){ + + /* + Put an if Statement before it: + + if(borderCollission == true){mapParticle()} + + + The particle will be mapped to a new position, using information about: + + - old position + - velocity (direction) + - defined borders in the projection --> globals like window size, angle between "stelen", width of stelen, etc. + + if the particle hits a border + + + */ + + +} + + + + + + + + + + + + + + + + + + + diff --git a/src/particle.hpp b/src/particle.hpp new file mode 100644 index 0000000..9f9ecf2 --- /dev/null +++ b/src/particle.hpp @@ -0,0 +1,54 @@ +// +// particle.hpp +// +// Created by Sebastian Holzki on 16.04.19. +// + +#pragma once +#include +#include "ofMain.h" + + + + + +class Particle { + +public: + + Particle(); + ~Particle(); + + void setup(ofVec2f position); + void update(float deltaT); + void draw(); + + float getMaxLife(); + float getAge(); + float getAgeNorm(); + + + void mapParticle(); + bool borderCollission(); + + + + +private: + + ofVec2f velocity; + ofVec2f position; + + float maxLife; + float age; + float size; + float mass; + + ofColor color; + + + int stele; + //on which "stele" is the particle? --> will affect the movement (mapping), when it reaches borders of its "stele" ! + //if border 1/2/3/4 (<,>,v,^), then map particle + +}; diff --git a/src/particleSystem.cpp b/src/particleSystem.cpp new file mode 100644 index 0000000..33110dc --- /dev/null +++ b/src/particleSystem.cpp @@ -0,0 +1,75 @@ +// +// particleSystem.cpp +// emptyExample +// +// Created by Sebastian Holzki on 16.04.19. +// + +#include "particleSystem.hpp" + + + +ParticleSystem::ParticleSystem(){ + + + +} + +// ----------------------------------- + +ParticleSystem::~ParticleSystem(){ + + +} + +// ----------------------------------- + + + +void ParticleSystem::setup(){ + + + +} + +// ----------------------------------------------- + + +void ParticleSystem::update(float deltaT, int visitorID, bool attracted){ + +/* + + + + - wenn attracted, dann springe in Berechnung der Attraktion durch die vorhandenen Attraktoren + +*/ + +/* + VisitorID stellt bekannten Besucher dar, also fertiges, auswertbares Profil. + visitorID steuert die Optik des Partikelsystems, aktiviert also eine Art Preset + z.B. Switch-Anweisung (visitorID 1-8): + + case 0: default mode, attraction + case 1: load xml blabla1 + case 2: load xml blabla2 + ... + +*/ + + +} + +// ----------------------------------------------- + + +void ParticleSystem::draw(){ + + /* + + draw all the particles from the vector in the ParticleSystem + + */ + + +} diff --git a/src/particleSystem.hpp b/src/particleSystem.hpp new file mode 100644 index 0000000..326fb5b --- /dev/null +++ b/src/particleSystem.hpp @@ -0,0 +1,74 @@ +// +// particleSystem.hpp +// emptyExample +// +// Created by Sebastian Holzki on 16.04.19. +// +#pragma once + + +#include + + +#include "particle.hpp" + + + +class ParticleSystem { + + ParticleSystem(); + ~ParticleSystem(); + +public: + + + void setup(); + void update(float deltaT, int playerType, bool attracted); + void draw(); + + + + /* + + Where do we make the quick setting-changes? + Like for exampe change direction of an emitter + its position? + --> XML? + + + */ + +private: + + vector particles; + + //adresses of the active emitters and attractors +// vector attractors; +// vector emitters; + + //Maybe the emitter does not have to be an own class, but is more like a Vector of Positions, so in the system.back it will setup particles for every position that is saved in this Vector + //like following: + + //vector positionsToEmitFrom; + + + float birthcount; + bool attracted; + int playerType; + + + +}; + + + +/* + +class AttractedSystem : public ParticleSystem { + + + bool attracted = true; + +}; + + */ + diff --git a/src/visitor.cpp b/src/visitor.cpp new file mode 100644 index 0000000..ef72087 --- /dev/null +++ b/src/visitor.cpp @@ -0,0 +1,165 @@ +// +// visitor.cpp +// particle_combined +// +// Created by Sebastian Holzki on 11.06.19. +// + +#include "visitor.hpp" + + + +Visitor::Visitor() +{ + + +} + +// ----------------------------------- + +Visitor::~Visitor() +{ + + +} + +// ----------------------------------- + + + +void Visitor::setup(){ + + + +} + +// ----------------------------------------------- + + +void Visitor::setup(float _x, float _y){ + + position.x = _x; + position.y = _y; + +} + +// ----------------------------------------------- + + +void Visitor::update(){ + + + + +} + +// ----------------------------------------------- + + +void Visitor::draw(){ + + + + +} + + // ----------------------------------------------- + + + + ofVec2f Visitor::getPosition(){ + + return position; + + } + +// ----------------------------------------------- + + + float Visitor::getX(){ + + return position.x; + + } + + + // ----------------------------------------------- + + float Visitor::getY(){ + + return position.y; + + } + + // ----------------------------------------------- + + +void Visitor::setPosition(float _x, float _y){ + + position.x = _x; + position.y = _y; + + +} + + +// ----------------------------------------------- + + +void Visitor::setPosition(ofVec2f _position){ + + position = _position; + +} + +// ----------------------------------------------- + + +void Visitor::setX(float _x){ + + position.x = _x; + +} + + + +// ----------------------------------------------- + + +void Visitor::setY(float _y){ + + position.y = _y; + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/visitor.hpp b/src/visitor.hpp new file mode 100644 index 0000000..af8c3fe --- /dev/null +++ b/src/visitor.hpp @@ -0,0 +1,47 @@ +// +// visitor.hpp +// particle_combined +// +// Created by Sebastian Holzki on 11.06.19. +// + + +#pragma once +#include +#include "ofMain.h" + + + + +class Visitor { + + +public: + + Visitor(); + ~Visitor(); + + void setup(); + void setup(float _x, float _y); + void update(); + void draw(); + + + //GETTERS + ofVec2f getPosition(); + float getX(); + float getY(); + + //SETTERS + void setPosition(float x, float y); + void setPosition(ofVec2f position); + void setX(float _x); + void setY(float _y); + + +private: + + ofVec2f position; + + +};