rt300@0: /* rt300@0: * lump.h rt300@0: * simplespring rt300@0: * rt300@0: * Created by Robert Tubb on 01/06/2011. rt300@0: * Copyright 2011 __MyCompanyName__. All rights reserved. rt300@0: * rt300@0: */ rt300@0: #ifndef _LUMPH rt300@0: #define _LUMPH rt300@0: #include "2dvector.h" rt300@0: #include "ofMain.h" rt300@0: #include "spring.h" rt300@0: rt300@0: rt300@0: class Spring; rt300@0: class Lump { rt300@0: private: rt300@0: double mass, inverseMass; rt300@0: bool grabbed, highlighted; rt300@4: rt300@0: TwoVector velocity; rt300@0: TwoVector accel; rt300@0: double friction; rt300@0: rt300@0: public: rt300@0: bool constrained; rt300@4: vector attachedSprings; // pointers to all attached springs rt300@0: int numAttachedSprings; rt300@0: rt300@0: enum ConstrainMode {NOT_CONSTRAINED,CONSTRAIN_X,CONSTRAIN_Y,CONSTRAIN_XY}; rt300@0: ConstrainMode constrainMode; rt300@0: rt300@0: bool isInScanPath; rt300@4: bool isScanPathEnd; rt300@4: bool isScanPathStart; rt300@4: rt300@0: TwoVector position; rt300@0: TwoVector previousPosition; rt300@0: double totalForceMag; rt300@8: //double size; rt300@8: int myIndexInMesh; rt300@0: int grabID; // which touch is this lump grabbed by? rt300@0: rt300@0: Lump(); // default constructor rt300@0: Lump(double aMass,double aFriction, double positionX, double positionY); rt300@0: // also which spring is it attached to rt300@0: ~Lump(); rt300@5: double radialDisplacement; rt300@0: TwoVector applyForce(); rt300@0: void averagingFilter(double amt); rt300@0: void homingFilter(double amt); rt300@0: TwoVector averageOfConnected(); rt300@0: rt300@0: TwoVector zeroRefPos; rt300@0: void draw(); rt300@0: rt300@0: void attachSpring(Spring* aSpring); rt300@0: void setPosition(double ax, double ay); rt300@0: void setVelocity(double ax, double ay); rt300@0: void constrain(); rt300@0: void constrain(ConstrainMode aconstrainMode); rt300@0: void unconstrain(); rt300@0: rt300@0: bool isGrabbed(); rt300@0: void grab(int aGrabID); rt300@0: void drag(double ax, double ay, int aGrabID); rt300@0: void unGrab(); rt300@0: void highlight(); rt300@0: void unhighlight(); rt300@0: void setInvMass(double aInvMass); rt300@0: double getTotalForceMag(); rt300@0: void setZeroRefPos(); rt300@0: void setFriction(double aF); rt300@0: rt300@0: Spring * checkConnectedTo(Lump * otherLump); rt300@0: rt300@0: // interface to scan path rt300@0: double scanDisplacement(); rt300@0: double scanRadialDisplacement(); rt300@0: double scanLumpSpeed(); rt300@0: double scanYPos(); rt300@0: double scanXPos(); rt300@0: void addToScanPath(); rt300@0: void removeFromScanPath(); rt300@0: rt300@0: }; rt300@0: rt300@0: #endif