[Orxonox-commit 6231] r10888 - in code/branches/campaignHS15: data/levels src/orxonox/controllers src/orxonox/worldentities
gania at orxonox.net
gania at orxonox.net
Sun Nov 29 18:36:22 CET 2015
Author: gania
Date: 2015-11-29 18:36:21 +0100 (Sun, 29 Nov 2015)
New Revision: 10888
Modified:
code/branches/campaignHS15/data/levels/AITest.oxw
code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.cc
code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.h
code/branches/campaignHS15/src/orxonox/controllers/FightingController.cc
code/branches/campaignHS15/src/orxonox/controllers/FightingController.h
code/branches/campaignHS15/src/orxonox/controllers/FlyingController.cc
code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc
code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc
code/branches/campaignHS15/src/orxonox/worldentities/Actionpoint.h
Log:
started working on pickups
Modified: code/branches/campaignHS15/data/levels/AITest.oxw
===================================================================
--- code/branches/campaignHS15/data/levels/AITest.oxw 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/data/levels/AITest.oxw 2015-11-29 17:36:21 UTC (rev 10888)
@@ -17,8 +17,10 @@
include("templates/spaceshipEscort.oxt")
include("templates/spaceshipRing.oxt")
include("templates/spaceshipSwallow.oxt")
+ include("templates/pickupRepresentationTemplates.oxt")
?>
+
<Level>
<templates>
<Template link=lodtemplate_default />
@@ -29,18 +31,45 @@
ambientlight = "0.8, 0.8, 0.8"
skybox = "Orxonox/Starbox"
>
-
+ <?lua
+ include("includes/pickups.oxi")
+ ?>
<Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
- <TeamSpawnPoint team=0 position="3000, -1500, 1000" lookat="1,1,-1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+ <TeamSpawnPoint team=1 position="1500, 1500, 1500" lookat="1,1,-1" spawnclass=SpaceShip pawndesign=spaceshipassff />
+<!--
+ <PickupSpawner pickup=largedamageboostpickup position="0,0,0" triggerDistance="20" respawnTime="30" maxSpawnedItems="10" />
+<PickupSpawner pickup=crazyhealthpickup position="0,0,0" triggerDistance="50" respawnTime="30" maxSpawnedItems="10" />
+<PickupSpawner pickup=hugeshieldpickup position="4000,4500, 4500" triggerDistance="10" respawnTime="5" maxSpawnedItems="10" />
+<PickupSpawner pickup=smalljumppickup position="6500,6500, 6000" triggerDistance="20" respawnTime="10" maxSpawnedItems="99" />
+<PickupSpawner pickup=largedamageboostpickup position="9500,9500, 9500" triggerDistance="20" respawnTime="30" maxSpawnedItems="10" />
+<PickupSpawner pickup=largedamageboostpickup position="13000,13000,13000" triggerDistance="10" respawnTime="30" maxSpawnedItems="10" />
+ -->
<!-- HERE STARTS DEMO FOR THE "WAYPOINTS" -->
<!--
+ <SpaceShip position="-1500, -1500, -1500" lookat="0,0,0" team=0 name="ss1">
+ <templates>
+ <Template link=spaceshipassff />
+ </templates>
+ <controller>
+ <DivisionController team=0 formationMode="finger4">
+ <actionpoints>
+ <Model mesh="cube.mesh" scale=8 position=" 0,2000,-600" />
+ <Model mesh="cube.mesh" scale=8 position=" 0,2000,-1000" />
+ <Model mesh="cube.mesh" scale=8 position="400,2000,-1000" />
+ <Model mesh="cube.mesh" scale=8 position="400,2000,-600" />
+ </actionpoints>
+ </DivisionController>
+ </controller>
+ </SpaceShip>
+ -->
+ <!-- those two are same -->
+
+ <!--
<Model mesh="cube.mesh" scale=8 position=" 0,2000,-600" />
- <Model mesh="cube.mesh" scale=8 position=" 0,2000,-800" />
- <Model mesh="cube.mesh" scale=8 position="200,2000,-800" />
- <Model mesh="cube.mesh" scale=8 position="200,2000,-600" />
- <Model mesh="cube.mesh" scale=8 position="0,0,0" />
-
+ <Model mesh="cube.mesh" scale=8 position=" 0,2000,-1000" />
+ <Model mesh="cube.mesh" scale=8 position="400,2000,-1000" />
+ <Model mesh="cube.mesh" scale=8 position="400,2000,-600" />
<SpaceShip position="-1500, 1500, -1000" lookat="0,0,0" team=0 name="ss1">
<templates>
<Template link=spaceshipassff />
@@ -49,19 +78,19 @@
<DivisionController team=0 formationMode="finger4">
<actionpoints>
<Actionpoint position=" 0,2000,-600" action="FLY" loopStart=true/>
- <Actionpoint position=" 0,2000,-800" action="FLY" />
- <Actionpoint position="200,2000,-800" action="FLY" />
- <Actionpoint position="200,2000,-600" action="FLY" loopEnd=true />
+ <Actionpoint position=" 0,2000,-1000" action="FLY" />
+ <Actionpoint position="400,2000,-1000" action="FLY" />
+ <Actionpoint position="400,2000,-600" action="FLY" loopEnd=true />
</actionpoints>
</DivisionController>
</controller>
- </SpaceShip>
- -->
+ </SpaceShip> -->
+
<!-- HERE ENDS DEMO FOR THE "WAYPOINTS" -->
<!-- HERE STARTS DEMO FOR THE ACTIONPOINTS.
P.S. Never set protectMe in the first actionpoint: if human didn't spawn, that actionpoint will be skipped -->
-
+ <!--
<Model mesh="cube.mesh" scale=8 position="0,0,0" />
<SpaceShip position="-2000, 1500, -1000" lookat="0,0,0" team=0 name="ss2">
@@ -123,10 +152,11 @@
</templates>
</SpaceShip>
-
+ -->
<!-- HERE ENDS DEMO FOR THE ACTIONPOINTS -->
<!-- HERE STARTS DEMO FOR FIGHTING -->
- <!--
+
+
<SpaceShip position="-4000, 1500, -1000" lookat="0,0,0" team=0 name="ss2">
<templates>
<Template link=spaceshipassff />
@@ -241,7 +271,7 @@
</SectionController>
</controller>
</SpaceShip>
- -->
+
<!-- HERE ENDS DEMO FOR FIGHTING -->
<!-- HERE STARTS DEMO FOR FORMATIONS -->
Modified: code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.cc 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.cc 2015-11-29 17:36:21 UTC (rev 10888)
@@ -31,8 +31,6 @@
#include "core/XMLPort.h"
#include <algorithm>
#include "worldentities/Actionpoint.h"
-
-
namespace orxonox
{
@@ -44,7 +42,12 @@
this->bInLoop_ = false;
this->bLoop_ = false;
this->bEndLoop_ = false;
- this->parsedActionpoints_.clear();
+ loopActionpoints_.clear();
+ parsedActionpoints_.clear();
+ actionpoints_.clear();
+ healthSpawners_.clear();
+ damageSpawners_.clear();
+ speedSpawners_.clear();
this->bTakenOver_ = false;
this->action_ = Action::NONE;
this->squaredaccuracy_ = 2500;
@@ -63,6 +66,9 @@
loopActionpoints_.clear();
parsedActionpoints_.clear();
actionpoints_.clear();
+ healthSpawners_.clear();
+ damageSpawners_.clear();
+ speedSpawners_.clear();
}
void ActionpointController::tick(float dt)
{
@@ -96,7 +102,11 @@
}
}
if (this->bFirstTick_)
- {
+ {
+ setSpawners();
+ // orxout(internal_error) << "health spawners size = " << this->healthSpawners_.size() <<
+ // ", damage spawners size = " << this->damageSpawners_.size() <<
+ // ", speed spawners size = " << this->speedSpawners_.size() << endl;
this->bFirstTick_ = false;
}
@@ -108,6 +118,7 @@
return;
if (!this->getControllableEntity() || !orxonox_cast<Pawn*> (this->getControllableEntity()))
return;
+
this->deltaHp = orxonox_cast<Pawn*> (this->getControllableEntity())->getHealth() - this->previousHp;
this->previousHp = orxonox_cast<Pawn*> (this->getControllableEntity())->getHealth();
if (this->actionCounter_ % 2 == 0)
@@ -115,6 +126,12 @@
//No action -> pop one from stack
if (this->action_ == Action::NONE || this->bTakenOver_)
{
+ // Point point = closestPickup(PickupType::HEALTH);
+ // if (point.action != Action::NONE)
+ // {
+ // orxout(internal_error) << "found health" << endl;
+ // this->parsedActionpoints_.push_back(point);
+ // }
if (this->parsedActionpoints_.empty() && this->loopActionpoints_.empty())
{
Point p = { Action::FIGHTALL, "", Vector3::ZERO, false };
@@ -141,7 +158,10 @@
if (!(this->parsedActionpoints_.empty() && this->loopActionpoints_.empty()))
{
this->action();
- }
+ }
+ else
+ {
+ }
}
}
}
@@ -213,12 +233,23 @@
}
if (this->hasTarget())
{
- //----choose where to go----
this->maneuver();
- //----fire if you can----
- this->bShooting_ = this->canFire();
+ this->bShooting_ = this->canFire();
+ // Vector3 healthPosition = bestHealthPickup((this->target_->getWorldPosition() - this->getControllableEntity()->getWorldPosition()).length());
+ // if ((this->getControllableEntity()->getWorldPosition() - healthPosition).length() < this->tolerance_)
+ // {
+ // //----choose where to go----
+ // this->maneuver();
+ // }
+ // else
+ // {
+ // this->dodgeTowards(healthPosition);
+ // }
+ // //----fire if you can----
+ // this->bShooting_ = this->canFire();
}
this->actionCounter_ += this->actionCounter_ < 100000 ? 1 : -this->actionCounter_ ;
+
}
void ActionpointController::setProtect (ControllableEntity* protect)
{
@@ -235,9 +266,9 @@
std::string targetName;
bool inLoop = false;
Point p;
- if (static_cast<Actionpoint*> (actionpoint))
+ if (actionpoint->getIdentifier()->getName() == "Actionpoint")
{
- Actionpoint* ap = static_cast<Actionpoint*> (actionpoint);
+ Actionpoint* ap = orxonox_cast<Actionpoint*> (actionpoint);
actionName = ap->getActionXML();
targetName = ap->getName();
position = ap->getWorldPosition();
@@ -276,6 +307,7 @@
}
else
{
+ inLoop = true;
p.action = Action::FLY; p.name = ""; p.position = actionpoint->getWorldPosition(); p.inLoop = inLoop;
}
parsedActionpoints_.push_back(p);
@@ -289,7 +321,7 @@
return 0;
}
- Action::Value ActionpointController::getAction ()
+ Action::Value ActionpointController::getAction ()
{
return this->action_;
}
@@ -592,11 +624,140 @@
CommonController::distance (this->getControllableEntity(), static_cast<ControllableEntity*>(newTarget))
<= this->attackRange_ )
{
- Point p = { Action::FIGHT, CommonController::getName(newTarget), Vector3::ZERO, false };
- this->parsedActionpoints_.push_back(p);
+ if (this->bLoop_)
+ {
+ Point p = { Action::FIGHT, CommonController::getName(newTarget), Vector3::ZERO, true };
+ this->loopActionpoints_.push_back(p);
+ }
+ else
+ {
+ Point p = { Action::FIGHT, CommonController::getName(newTarget), Vector3::ZERO, false };
+ this->parsedActionpoints_.push_back(p);
+ }
this->executeActionpoint();
}
}
}
}
+ Vector3 ActionpointController::bestHealthPickup(float searchRadius)
+ {
+
+ //1000000/distance^2 * 1/index+1
+ float maxUse = 0;
+ float tempUse = -1;
+ int index = 0;
+ float distance = 0;
+ Vector3 bestPosition = this->getControllableEntity()->getWorldPosition();
+
+ for (std::multimap<int, std::pair<PickupSpawner*, bool> >::iterator it=healthSpawners_.begin(); it!=healthSpawners_.end(); ++it)
+ {
+ distance = (this->getControllableEntity()->getWorldPosition() - (*it).second.first->getWorldPosition()).length();
+ if (distance < this->tolerance_ || !(*it).second.second)
+ {
+ (*it).second.second = false;
+ continue;
+ }
+ if (distance > searchRadius)
+ continue;
+ index = (*it).first;
+ tempUse = 1000000*1/(1+distance*distance) * 1/((index/2.0f)+1);
+ if (tempUse > maxUse)
+ {
+ bestPosition = (*it).second.first->getWorldPosition();
+ maxUse = tempUse;
+ }
+ }
+ //std::multimap<int, std::pair<PickupSpawner*, bool> >::iterator it = this->healthSpawners_.find(index);
+ //P.S. check if it == ... .end()
+ //orxout (internal_error) << "best position = " << bestPosition << endl;
+ return bestPosition;
+ }
+ void ActionpointController::setSpawners()
+ {
+ std::vector<std::string> damagePickups;
+ std::vector<std::string> healthPickups;
+ std::vector<std::string> speedPickups;
+ int index = 0;
+
+
+ damagePickups.push_back("largedamageboostpickup");
+ damagePickups.push_back("dronepickup");
+ damagePickups.push_back("mediumdamageboostpickup");
+ damagePickups.push_back("smalldamageboostpickup");
+
+ healthPickups.push_back("triplehealthspeedinvisibilitypickup");
+ healthPickups.push_back("crazyhealthpickup");
+ healthPickups.push_back("hugehealthpickup");
+ healthPickups.push_back("hugeshieldpickup");
+ healthPickups.push_back("hugeinvisiblepickup");
+ healthPickups.push_back("hugeshrinkpickup");
+ healthPickups.push_back("mediumhealthpickup");
+ healthPickups.push_back("mediumshieldpickup");
+ healthPickups.push_back("mediuminvisiblepickup");
+ healthPickups.push_back("mediumshrinkpickup");
+ healthPickups.push_back("smallhealthpickup");
+ healthPickups.push_back("smallshieldpickup");
+ healthPickups.push_back("smallinvisiblepickup");
+ healthPickups.push_back("smallshrinkpickup");
+
+ speedPickups.push_back("triplehealthspeedinvisibilitypickup");
+ speedPickups.push_back("hugespeedpickup");
+ speedPickups.push_back("smalljumppickup");
+ speedPickups.push_back("mediumspeedpickup");
+ speedPickups.push_back("smallspeedpickup");
+
+
+
+ for (ObjectList<WorldEntity>::iterator it = ObjectList<WorldEntity>::begin(); it; ++it)
+ {
+ if ((*it)->getIdentifier()->getName() != "PickupSpawner")
+ continue;
+ PickupSpawner* spawner = static_cast<PickupSpawner*>(*it);
+ std::string name = spawner->getPickupTemplateName();
+ //float distance = ((*it)->getWorldPosition() - this->getControllableEntity()->getWorldPosition()).length();
+ // if (distance < 50.0f)
+ // continue;
+ for (unsigned int i = 0; i < healthPickups.size(); ++i)
+ {
+ if (name == healthPickups.at(i))
+ {
+ index = i;
+ this->healthSpawners_.insert(std::make_pair(index, std::make_pair(spawner, true)));
+ break;
+ }
+ }
+ for (unsigned int i = 0; i < damagePickups.size(); ++i)
+ {
+ if (name == damagePickups.at(i))
+ {
+ //tempUse = 1000000*1/(1+distance*distance) * 1/((i/2.0f)+1);
+ index = i;
+ this->damageSpawners_.insert(std::make_pair(index, std::make_pair(spawner, true)));
+ break;
+ }
+ }
+ for (unsigned int i = 0; i < speedPickups.size(); ++i)
+ {
+ if (name == speedPickups.at(i))
+ {
+ //tempUse = 1000000*1/(1+distance*distance) * 1/((i/2.0f)+1);
+ index = i;
+ this->speedSpawners_.insert(std::make_pair(index, std::make_pair(spawner, true)));
+ break;
+ }
+ }
+ // if (tempUse > maxUse)
+ // {
+ // Point p = { Action::FLY, "", (*it)->getWorldPosition(), false };
+ // maxUse = tempUse;
+ // maxPoint = p;
+ // }
+ // else
+ // {
+ // tempUse = -1;
+ // continue;
+ // }
+ // orxout(internal_error) << "resp time = " << static_cast<PickupSpawner*>(*it)->getRespawnTime() << endl;
+ }
+ }
}
Modified: code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.h 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/controllers/ActionpointController.h 2015-11-29 17:36:21 UTC (rev 10888)
@@ -32,6 +32,8 @@
#include "controllers/FightingController.h"
#include "tools/Timer.h"
#include "tools/interfaces/Tickable.h"
+#include "../modules/pickup/PickupSpawner.h"
+#include <map>
namespace orxonox
{
@@ -50,6 +52,13 @@
Vector3 position;
bool inLoop;
} ;
+ namespace PickupType
+ {
+ enum Value
+ {
+ NONE, DAMAGE, HEALTH, SPEED, PORTAL
+ };
+ }
class _OrxonoxExport ActionpointController : public FightingController, public Tickable
{
@@ -117,6 +126,13 @@
//----[Actionpoint methods]----
bool bFirstTick_;
+ void setSpawners();
+ Vector3 bestHealthPickup (float searchRadius);
+ // Point closestPickup(PickupType::Value pickupType);
+ std::multimap <int, std::pair<PickupSpawner*, bool> > healthSpawners_;
+ std::multimap <int, std::pair<PickupSpawner*, bool> > damageSpawners_;
+ std::multimap <int, std::pair<PickupSpawner*, bool> > speedSpawners_;
+
private:
};
Modified: code/branches/campaignHS15/src/orxonox/controllers/FightingController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/FightingController.cc 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/controllers/FightingController.cc 2015-11-29 17:36:21 UTC (rev 10888)
@@ -171,14 +171,38 @@
dodge(thisPosition, diffUnit);
}
}
-
+ void FightingController::dodgeTowards (Vector3& position)
+ {
+ Vector3 thisPosition = this->getControllableEntity()->getPosition();
+ Vector3 diff = (position - thisPosition);
+ float diffLength = diff.length();
+ Vector3 diffUnit = diff/diffLength;
+ float factor = 300.0f;
+ if (diffLength < 300)
+ {
+ this->setTargetPosition(position);
+ return;
+ }
+ else if (diffLength < 600)
+ factor = 400.0f;
+ else if (diffLength < 1000)
+ factor = 700.0f;
+ else
+ factor = 1000.0f;
+ float x = CommonController::randomInRange (400, 800) * (CommonController::randomInRange(0,1) <= 0.5 ? 1 : -1);
+ float y = CommonController::randomInRange (400, 800) * (CommonController::randomInRange(0,1) <= 0.5 ? 1 : -1);
+ float z = diffUnit.z == 0 ? 0 : (1/diffUnit.z) * (-x * diffUnit.x - y * diffUnit.y);
+ this->setTargetPosition(thisPosition + Vector3(x,y,z) + diffUnit * factor);
+ // orxout(internal_error) << "Dodging towards " << Vector3(x,y,z) << endl;
+ this->boostControl();
+ }
void FightingController::dodge(const Vector3& thisPosition, Vector3& diffUnit)
{
//d.x*x + d.y*y + d.z*z == 0
//z = 1/d.z * (-d.y*y - d.x * x)
float x = CommonController::randomInRange (100, 800) * (CommonController::randomInRange(0,1) <= 0.5 ? 1 : -1);
float y = CommonController::randomInRange (100, 800) * (CommonController::randomInRange(0,1) <= 0.5 ? 1 : -1);
- float z = (1/diffUnit.z) * (-x * diffUnit.x - y * diffUnit.y);
+ float z = diffUnit.z == 0 ? 0 : (1/diffUnit.z) * (-x * diffUnit.x - y * diffUnit.y);
this->setTargetPosition(thisPosition + Vector3(x,y,z) + (this->deltaHp < 0 ? -diffUnit * 450.0f : diffUnit * 100.0f));
this->boostControl();
Modified: code/branches/campaignHS15/src/orxonox/controllers/FightingController.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/FightingController.h 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/controllers/FightingController.h 2015-11-29 17:36:21 UTC (rev 10888)
@@ -61,6 +61,7 @@
void maneuver();
void dodge(const Vector3& thisPosition, Vector3& diffUnit);
+ void dodgeTowards (Vector3& position);
bool canFire();
void doFire();
WeakPtr<ControllableEntity> target_;
Modified: code/branches/campaignHS15/src/orxonox/controllers/FlyingController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/FlyingController.cc 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/controllers/FlyingController.cc 2015-11-29 17:36:21 UTC (rev 10888)
@@ -41,7 +41,7 @@
RegisterObject(FlyingController);
this->rotationProgress_ = 0;
this->spread_ = 200;
- this->tolerance_ = 100;
+ this->tolerance_ = 80;
}
FlyingController::~FlyingController()
{
Modified: code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/controllers/SectionController.cc 2015-11-29 17:36:21 UTC (rev 10888)
@@ -125,7 +125,19 @@
if (this->hasTarget())
{
this->maneuver();
- this->bShooting_ = this->canFire();
+ this->bShooting_ = this->canFire();
+ // Vector3 healthPosition = bestHealthPickup((this->target_->getWorldPosition() - this->getControllableEntity()->getWorldPosition()).length());
+ // if ((this->getControllableEntity()->getWorldPosition() - healthPosition).length() < this->tolerance_)
+ // {
+ // //----choose where to go----
+ // this->maneuver();
+ // }
+ // else
+ // {
+ // this->dodgeTowards(healthPosition);
+ // }
+ // //----fire if you can----
+ // this->bShooting_ = this->canFire();
}
}
}
Modified: code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc
===================================================================
--- code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/controllers/WingmanController.cc 2015-11-29 17:36:21 UTC (rev 10888)
@@ -111,10 +111,20 @@
}
if (this->hasTarget())
{
- //----choose where to go----
this->maneuver();
- //----fire if you can----
- this->bShooting_ = this->canFire();
+ this->bShooting_ = this->canFire();
+ // Vector3 healthPosition = bestHealthPickup((this->target_->getWorldPosition() - this->getControllableEntity()->getWorldPosition()).length());
+ // if ((this->getControllableEntity()->getWorldPosition() - healthPosition).length() < this->tolerance_)
+ // {
+ // //----choose where to go----
+ // this->maneuver();
+ // }
+ // else
+ // {
+ // this->dodgeTowards(healthPosition);
+ // }
+ // //----fire if you can----
+ // this->bShooting_ = this->canFire();
}
}
}
Modified: code/branches/campaignHS15/src/orxonox/worldentities/Actionpoint.h
===================================================================
--- code/branches/campaignHS15/src/orxonox/worldentities/Actionpoint.h 2015-11-29 17:07:43 UTC (rev 10887)
+++ code/branches/campaignHS15/src/orxonox/worldentities/Actionpoint.h 2015-11-29 17:36:21 UTC (rev 10888)
@@ -89,6 +89,8 @@
</controller>
</SpaceShip>
+ One can also use other Worldentities instead of Actionpoints just like Waypoints, but those points
+ will be included in loop.
For more information read descriptions of the methods.
*/
class _OrxonoxExport Actionpoint : public StaticEntity
More information about the Orxonox-commit
mailing list