Changeset 3049
- Timestamp:
- May 25, 2009, 3:26:43 AM (16 years ago)
- Location:
- code/trunk/src
- Files:
-
- 4 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/orxonox/OrxonoxPrereqs.h
r3033 r3049 196 196 class AIController; 197 197 class ScriptController; 198 class WaypointController; 199 class WaypointPatrolController; 198 200 class PongAI; 199 201 -
code/trunk/src/orxonox/objects/controllers/AIController.cc
r2896 r3049 108 108 109 109 if (this->bHasTargetPosition_) 110 this->moveToTargetPosition( dt);110 this->moveToTargetPosition(); 111 111 112 if (this->getControllableEntity() && this->bShooting_ && this->isCloseAtTarget( 500) && this->isLookingAtTarget(Ogre::Math::PI / 20.0))112 if (this->getControllableEntity() && this->bShooting_ && this->isCloseAtTarget(1000) && this->isLookingAtTarget(Ogre::Math::PI / 20.0)) 113 113 this->getControllableEntity()->fire(WeaponMode::fire); 114 114 -
code/trunk/src/orxonox/objects/controllers/ArtificialController.cc
r2662 r3049 34 34 #include "objects/worldentities/pawns/Pawn.h" 35 35 36 #include "objects/gametypes/TeamDeathmatch.h" 37 #include "objects/controllers/WaypointPatrolController.h" 38 36 39 namespace orxonox 37 40 { … … 50 53 } 51 54 52 void ArtificialController::moveTo TargetPosition(float dt)55 void ArtificialController::moveToPosition(const Vector3& target) 53 56 { 54 57 if (!this->getControllableEntity()) 55 58 return; 56 59 57 Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, t his->targetPosition_);58 float distance = (t his->targetPosition_- this->getControllableEntity()->getPosition()).length();60 Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target); 61 float distance = (target - this->getControllableEntity()->getPosition()).length(); 59 62 60 63 if (this->target_ || distance > 10) … … 71 74 } 72 75 76 void ArtificialController::moveToTargetPosition() 77 { 78 this->moveToPosition(this->targetPosition_); 79 } 80 81 void ArtificialController::setTargetPosition(const Vector3& target) 82 { 83 this->targetPosition_ = target; 84 this->bHasTargetPosition_ = true; 85 } 86 73 87 void ArtificialController::searchRandomTargetPosition() 74 88 { … … 77 91 } 78 92 93 void ArtificialController::setTarget(Pawn* target) 94 { 95 this->target_ = target; 96 97 if (target) 98 this->targetPosition_ = target->getPosition(); 99 } 100 79 101 void ArtificialController::searchNewTarget() 80 102 { … … 87 109 for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it) 88 110 { 89 // if (it->getTeamNr() != this->getTeamNr()) 111 if (ArtificialController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(*it), this->getGametype())) 112 continue; 113 90 114 if (static_cast<ControllableEntity*>(*it) != this->getControllableEntity()) 91 115 { … … 147 171 } 148 172 } 173 174 bool ArtificialController::sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype) 175 { 176 if (entity1 == entity2) 177 return true; 178 179 int team1 = -1; 180 int team2 = -1; 181 182 if (entity1->getXMLController()) 183 { 184 WaypointPatrolController* wpc = dynamic_cast<WaypointPatrolController*>(entity1->getXMLController()); 185 if (wpc) 186 team1 = wpc->getTeam(); 187 } 188 if (entity2->getXMLController()) 189 { 190 WaypointPatrolController* wpc = dynamic_cast<WaypointPatrolController*>(entity2->getXMLController()); 191 if (wpc) 192 team2 = wpc->getTeam(); 193 } 194 195 TeamDeathmatch* tdm = dynamic_cast<TeamDeathmatch*>(gametype); 196 if (tdm) 197 { 198 if (entity1->getPlayer()) 199 team1 = tdm->getTeam(entity1->getPlayer()); 200 201 if (entity2->getPlayer()) 202 team2 = tdm->getTeam(entity2->getPlayer()); 203 } 204 205 return (team1 == team2 && team1 != -1); 206 } 149 207 } -
code/trunk/src/orxonox/objects/controllers/ArtificialController.h
r2662 r3049 47 47 48 48 protected: 49 void moveToTargetPosition(float dt); 49 void moveToPosition(const Vector3& target); 50 void moveToTargetPosition(); 51 52 void setTargetPosition(const Vector3& target); 50 53 void searchRandomTargetPosition(); 54 55 void setTarget(Pawn* target); 51 56 void searchNewTarget(); 52 57 void forgetTarget(); … … 55 60 bool isCloseAtTarget(float distance) const; 56 61 bool isLookingAtTarget(float angle) const; 62 63 static bool sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype); // hack 57 64 58 65 bool bHasTargetPosition_; -
code/trunk/src/orxonox/objects/controllers/CMakeLists.txt
r2839 r3049 5 5 AIController.cc 6 6 ScriptController.cc 7 WaypointController.cc 8 WaypointPatrolController.cc 7 9 PongAI.cc 8 10 ) -
code/trunk/src/orxonox/objects/gametypes/TeamDeathmatch.cc
r3033 r3049 164 164 if (pawn) 165 165 { 166 pawn->setRadarObjectColour(this->teamcolours_[it_player->second]); 167 166 168 std::set<WorldEntity*> pawnAttachments = pawn->getAttachedObjects(); 167 169 for (std::set<WorldEntity*>::iterator it = pawnAttachments.begin(); it != pawnAttachments.end(); ++it) -
code/trunk/src/orxonox/objects/gametypes/TeamDeathmatch.h
r3033 r3049 55 55 virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn); 56 56 57 int getTeam(PlayerInfo* player); 58 57 59 inline const ColourValue& getTeamColour(int teamnr) const 58 60 { return this->teamcolours_[teamnr]; } … … 61 63 virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const; 62 64 bool pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2); 63 int getTeam(PlayerInfo* player);64 65 65 66 std::map<PlayerInfo*, int> teamnumbers_; -
code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc
r3038 r3049 40 40 #include "objects/Scene.h" 41 41 #include "objects/infos/PlayerInfo.h" 42 #include "objects/controllers/Controller.h" 42 43 #include "objects/worldentities/Camera.h" 43 44 #include "objects/worldentities/CameraPosition.h" … … 61 62 this->hud_ = 0; 62 63 this->camera_ = 0; 64 this->xmlcontroller_ = 0; 63 65 this->bDestroyWhenPlayerLeft_ = false; 64 66 this->cameraPositionRootNode_ = this->node_->createChildSceneNode(); … … 93 95 this->getPlayer()->stopControl(); 94 96 97 if (this->xmlcontroller_) 98 delete this->xmlcontroller_; 99 95 100 if (this->hud_) 96 101 delete this->hud_; … … 115 120 116 121 XMLPortObject(ControllableEntity, CameraPosition, "camerapositions", addCameraPosition, getCameraPosition, xmlelement, mode); 122 XMLPortObject(ControllableEntity, Controller, "controller", setXMLController, getXMLController, xmlelement, mode); 117 123 } 118 124 … … 304 310 } 305 311 312 void ControllableEntity::setXMLController(Controller* controller) 313 { 314 if (!this->xmlcontroller_) 315 { 316 this->xmlcontroller_ = controller; 317 this->bHasLocalController_ = true; 318 this->xmlcontroller_->setControllableEntity(this); 319 } 320 else 321 COUT(2) << "Warning: ControllableEntity \"" << this->getName() << "\" already has a Controller." << std::endl; 322 } 323 306 324 void ControllableEntity::parentChanged() 307 325 { -
code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h
r3038 r3049 130 130 { return this->mouseLookSpeed_; } 131 131 132 inline Controller* getXMLController() const 133 { return this->xmlcontroller_; } 134 132 135 protected: 133 136 virtual void setPlayer(PlayerInfo* player); // don't call this directly, use friend class PlayerInfo instead … … 142 145 143 146 private: 147 void setXMLController(Controller* controller); 148 144 149 void overwrite(); 145 150 void processOverwrite(); … … 188 193 std::list<CameraPosition*> cameraPositions_; 189 194 std::string cameraPositionTemplate_; 195 Controller* xmlcontroller_; 190 196 }; 191 197 } -
code/trunk/src/util/Math.cc
r2171 r3049 129 129 130 130 float projectionlength = projection.length(); 131 if (projectionlength == 0) return orxonox::Vector2(0, 0); 131 if (projectionlength == 0) 132 { 133 if (myposition.dotProduct(otherposition) >= 0) 134 return orxonox::Vector2(0, 0); 135 else 136 return orxonox::Vector2(0, 1); 137 } 138 132 139 float angle = acos(clamp<float>(myorthonormal.dotProduct(projection) / projectionlength, -1, 1)); 133 140 … … 161 168 162 169 float projectionlength = projection.length(); 163 if (projectionlength == 0) return orxonox::Vector2(0, 0); 170 if (projectionlength == 0) 171 { 172 if (myposition.dotProduct(otherposition) >= 0) 173 return orxonox::Vector2(0, 0); 174 else 175 return orxonox::Vector2(0, 1); 176 } 164 177 float angle = acos(clamp<float>(myorthonormal.dotProduct(projection) / projectionlength, -1, 1)); 165 178
Note: See TracChangeset
for help on using the changeset viewer.