- Timestamp:
- May 25, 2009, 5:54:42 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/orxonox/objects/worldentities/ForceField.cc
r3033 r3064 35 35 namespace orxonox 36 36 { 37 CreateFactory(ForceField);37 CreateFactory(ForceField); 38 38 39 39 ForceField::ForceField(BaseObject* creator) : StaticEntity(creator) 40 40 { 41 RegisterObject(ForceField);41 RegisterObject(ForceField); 42 42 43 //Standard Values44 this->setDirection(Vector3::ZERO);45 velocity_ = 100;46 diameter_ = 500;47 length_ = 2000;43 //Standard Values 44 this->setDirection(Vector3::ZERO); 45 velocity_ = 100; 46 diameter_ = 500; 47 length_ = 5000; 48 48 } 49 49 … … 52 52 void ForceField::XMLPort(Element& xmlelement, XMLPort::Mode mode) 53 53 { 54 SUPER(ForceField, XMLPort, xmlelement, mode); 55 56 //For correct xml import use: position, direction, velocity, scale 57 58 XMLPortParam(ForceField, "velocity", setVelocity, getVelocity, xmlelement, mode).defaultValues(100); 59 XMLPortParam(ForceField, "diameter", setDiameter, getDiameter, xmlelement, mode).defaultValues(500); 60 XMLPortParam(ForceField, "length" , setLength , getLength , xmlelement, mode).defaultValues(2000); 54 SUPER(ForceField, XMLPort, xmlelement, mode); 55 56 //For correct xml import use: position, direction, velocity, scale 57 XMLPortParam(ForceField, "velocity", setVelocity, getVelocity, xmlelement, mode).defaultValues(100); 58 XMLPortParam(ForceField, "diameter", setDiameter, getDiameter, xmlelement, mode).defaultValues(500); 59 XMLPortParam(ForceField, "length" , setLength , getLength , xmlelement, mode).defaultValues(2000); 61 60 } 62 61 63 62 void ForceField::tick(float dt) 64 63 { 64 for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it) 65 { 66 //calculate from 67 Vector3 directionVec = this->getOrientation() * WorldEntity::FRONT; 68 directionVec.normalise(); 65 69 66 for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it) 67 { 70 Vector3 distanceVec = it->getWorldPosition() - (this->getWorldPosition() + (this->length_ / 2 * directionVec)); 68 71 69 //calculate from 70 Vector3 directionVec = this->getOrientation() * WorldEntity::FRONT; 71 directionVec.normalise(); 72 //distance from centervector of the field ( 73 float distFromCenterVec = ((it->getWorldPosition() - this->getWorldPosition()).crossProduct(directionVec)).length(); 72 74 73 Vector3 distanceVec = it->getWorldPosition() - (this->getWorldPosition() + (this->length_ / 2 * directionVec)); 74 75 //distance from centervector of the field ( 76 float distFromCenterVec = ((it->getWorldPosition() - this->getWorldPosition()).crossProduct(directionVec)).length(); 77 78 if (distanceVec.length() < this->length_ / 2 && distFromCenterVec < diameter_ / 2) 79 { 80 //normalize distance from center 81 it->applyCentralForce(((diameter_ / 2 - distFromCenterVec) / (diameter_ / 2)) * directionVec * velocity_); 75 if (distanceVec.length() < this->length_ / 2 && distFromCenterVec < diameter_ / 2) 76 { 77 //normalize distance from center 78 it->applyCentralForce(((diameter_ / 2 - distFromCenterVec) / (diameter_ / 2)) * directionVec * velocity_); 79 } 82 80 } 83 84 } 85 } 81 } 86 82 } 87 83
Note: See TracChangeset
for help on using the changeset viewer.