[Orxonox-commit 6131] r10789 - in code/branches/AI_HS15: data/levels src/orxonox/controllers
gania at orxonox.net
gania at orxonox.net
Mon Nov 9 16:38:03 CET 2015
Author: gania
Date: 2015-11-09 16:38:02 +0100 (Mon, 09 Nov 2015)
New Revision: 10789
Modified:
code/branches/AI_HS15/data/levels/AITest.oxw
code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc
code/branches/AI_HS15/src/orxonox/controllers/CommonController.h
code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc
code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc
code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc
code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc
Log:
did nothing today
Modified: code/branches/AI_HS15/data/levels/AITest.oxw
===================================================================
--- code/branches/AI_HS15/data/levels/AITest.oxw 2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/data/levels/AITest.oxw 2015-11-09 15:38:02 UTC (rev 10789)
@@ -84,7 +84,7 @@
</DivisionController>
</controller>
</SpaceShip>
- <SpaceShip position="<?1000 ?>,<?lua print(1500+i*1000) ?>, -1600 ?>" lookat="0,0,0">
+ <!-- <SpaceShip position="<?1000 ?>,<?lua print(1500+i*1000) ?>, -1600 ?>" lookat="0,0,0">
<templates>
<Template link=spaceshipassff />
</templates>
@@ -110,7 +110,7 @@
<SectionController team=1>
</SectionController>
</controller>
- </SpaceShip>
+ </SpaceShip> -->
<?lua end ?>
<!-- <SpaceShip position="4000, 1500, -1300 ?>" lookat="0,0,0">
<templates>
Modified: code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc 2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/CommonController.cc 2015-11-09 15:38:02 UTC (rev 10789)
@@ -44,16 +44,15 @@
{
RegisterClass(CommonController);
- float SPEED = 0.7f;
- float ROTATEFACTOR = 0.3f;
+ float SPEED = 0.7f/0.02f;
+ float ROTATEFACTOR = 0.3f/0.02f;
CommonController::CommonController(Context* context) : Controller(context)
{
this->bSetupWorked = false;
- this->targetMask_.exclude(ClassByString("BaseObject"));
- this->targetMask_.include(ClassByString("WorldEntity"));
- this->targetMask_.exclude(ClassByString("Projectile"));
+ this->executingManeuver_ = false;
+ this->executingMoveToPoint_ = false;
RegisterObject(CommonController);
}
@@ -172,30 +171,30 @@
//copy the Roll orientation of given Quaternion.
- void CommonController::copyOrientation(const Quaternion& orient)
+ void CommonController::copyOrientation(const Quaternion& orient, float dt)
{
//roll angle difference in radian
float diff=orient.getRoll(false).valueRadians()-(this->getControllableEntity()->getOrientation().getRoll(false).valueRadians());
while(diff>math::twoPi) diff-=math::twoPi;
while(diff<-math::twoPi) diff+=math::twoPi;
- this->getControllableEntity()->rotateRoll(diff*ROTATEFACTOR);
+ this->getControllableEntity()->rotateRoll(diff*ROTATEFACTOR * dt);
}
- void CommonController::copyTargetOrientation()
+ void CommonController::copyTargetOrientation(float dt)
{
if (bHasTargetOrientation_)
{
- copyOrientation(targetOrientation_);
+ copyOrientation(targetOrientation_, dt);
}
}
- void CommonController::moveToTargetPosition()
+ void CommonController::moveToTargetPosition(float dt)
{
- this->moveToPosition(this->targetPosition_);
+ this->moveToPosition(this->targetPosition_, dt);
}
- void CommonController::moveToPosition(const Vector3& target)
+ void CommonController::moveToPosition(const Vector3& target, float dt)
{
float factor = 1;
if (!this->getControllableEntity())
@@ -226,8 +225,8 @@
if (distance > tolerance)
{
//Yaw and Pitch are enough to start facing the target
- this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR * rotateX);
- this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR * rotateY);
+ this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR * rotateX * dt);
+ this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR * rotateY * dt);
//300 works, maybe less is better
if (distance < 400)
@@ -238,11 +237,11 @@
//Yaw and Pitch will adapt.
if (bHasTargetOrientation_)
{
- copyTargetOrientation();
+ copyTargetOrientation(dt);
}
}
- this->getControllableEntity()->moveFrontBack(1.2f*SPEED*factor);
+ this->getControllableEntity()->moveFrontBack(1.2f*SPEED*factor * dt);
}
else
{
@@ -252,19 +251,21 @@
}
//to be called in action
//PRE: relativeTargetPosition is desired position relative to the spaceship,
- //angleRoll is the angle of Roll that should be applied by the end of the movement
- //POST: targetPosition_ and angleRoll_ are set, so that it can be used by MoveAndRoll()
- void MoveToPoint(const Vector3& relativeTargetPosition, float angleRoll)
+ //angleRoll is the angle in degrees of Roll that should be applied by the end of the movement
+ //POST: target orientation and position are set, so that it can be used by MoveAndRoll()
+ void CommonController::moveToPoint(const Vector3& relativeTargetPosition, float angleRoll)
{
ControllableEntity* entity = this->getControllableEntity();
if (!entity)
- return false;
+ return;
Quaternion orient = entity->getWorldOrientation();
+ Quaternion rotation = Quaternion(Degree(angleRoll), Vector3::UNIT_Z);
Vector3 target = orient * relativeTargetPosition + entity->getWorldPosition();
setTargetPosition(target);
- this->angleRoll_ = angleRoll;
- this->angleRolled_ = 0;
+ orient = orient * rotation;
+ this->setTargetOrientation(orient);
+
}
//to be called in tick
//PRE: MoveToPoint was called
@@ -274,14 +275,21 @@
//angular speed
//if position reached with a certain tolerance, and angleRolled_ = angleRoll_, returns false,
//otherwise returns true
- bool MoveAndRoll(float dt)
+ //dt is normally around 0.02f, which makes it 1/0.02 = 50 frames/sec
+ bool CommonController::moveAndRoll(float dt)
{
+ float factor = 1;
+ if (!this->getControllableEntity())
+ return false;
+ if (this->rank_ == Rank::DIVISIONLEADER)
+ factor = 0.8;
+ if (this->rank_ == Rank::SECTIONLEADER)
+ factor = 0.9;
int tolerance = 60;
- float rollDiff = angleRoll-angleRolled_;
- float angleToRoll = 0;
+
ControllableEntity* entity = this->getControllableEntity();
if (!entity)
- return false;
+ return true;
Vector2 coord = get2DViewCoordinates
(entity->getPosition(),
entity->getOrientation() * WorldEntity::FRONT,
@@ -301,44 +309,33 @@
this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR * rotateX * dt);
this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR * rotateY * dt);
+ //Roll
+ if (bHasTargetOrientation_)
+ {
+ copyTargetOrientation(dt);
+ }
+
//Move
this->getControllableEntity()->moveFrontBack(1.2f * SPEED * factor * dt);
-
- //Roll
- angleToRoll = rollDiff * ROTATEFACTOR * dt;
- this->getControllableEntity()->rotateRoll(angleToRoll);
- angleRolled_ += angleToRoll;
//if still moving, return false
return false;
}
else
{
- if (rollDiff > 0)
- {
- //Roll
- angleToRoll = rollDiff * ROTATEFACTOR * dt;
- this->getControllableEntity()->rotateRoll(angleToRoll);
- angleRolled_ += angleToRoll;
-
- //Move
- this->getControllableEntity()->moveFrontBack(0.6f * SPEED * factor);
- return false;
- }
+
//if finished, return true;
- retun true;
+ return true;
}
}
- float squaredDistanceToTarget()
+ float CommonController::squaredDistanceToTarget() const
{
if ( !this->getControllableEntity() )
return 0;
if ( !this->target_ )
- return ( this->getControllableEntity()->
- getPosition().squaredDistance(this->targetPosition_) );
+ return ( this->getControllableEntity()->getPosition().squaredDistance(this->targetPosition_) );
else
- return ( this->getControllableEntity()->
- getPosition().squaredDistance(this->target_->getPosition()) );
+ return ( this->getControllableEntity()->getPosition().squaredDistance(this->target_->getPosition()) );
}
bool CommonController::isLookingAtTarget(float angle) const
Modified: code/branches/AI_HS15/src/orxonox/controllers/CommonController.h
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/CommonController.h 2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/CommonController.h 2015-11-09 15:38:02 UTC (rev 10789)
@@ -75,6 +75,7 @@
};
}
+
class _OrxonoxExport CommonController : public Controller
{
public:
@@ -120,13 +121,16 @@
protected:
- void moveToPosition(const Vector3& target);
- void moveToTargetPosition();
+ void moveToPoint(const Vector3& relativeTargetPosition, float angleRoll);
+ bool moveAndRoll(float dt);
+
+ void moveToPosition(const Vector3& target, float dt);
+ void moveToTargetPosition(float dt);
//enum Mode {ROCKET, ATTACK, MOVE, HOLD};//TODO; implement DEFENCE, MOVING modes
//Mode mode_;
- void copyOrientation(const Quaternion& orient);
- void copyTargetOrientation();
+ void copyOrientation(const Quaternion& orient, float dt);
+ void copyTargetOrientation(float dt);
float squaredDistanceToTarget() const;
void doFire();
@@ -159,8 +163,6 @@
bool bShooting_;
WeakPtr<ControllableEntity> objectiveTarget_;
- float angleRolled_;
- float angleRoll_;
FormationMode::Value formationMode_;
@@ -168,8 +170,8 @@
ManeuverType::Value maneuverType_;
Maneuver::Value maneuver_;
- ClassTreeMask targetMask_;
-
+ bool executingManeuver_;
+ bool executingMoveToPoint_;
private:
Modified: code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc 2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/DivisionController.cc 2015-11-09 15:38:02 UTC (rev 10789)
@@ -62,10 +62,14 @@
this->doFire();
this->bShooting_ = true;
}*/
-
- if (this->bHasTargetPosition_)
+
+ /* if (this->bHasTargetPosition_)
{
this->moveToTargetPosition();
+ }*/
+ if (executingMoveToPoint_)
+ {
+ executingMoveToPoint_ = !this->moveAndRoll(dt);
}
if (this->bShooting_)
doFire();
@@ -80,7 +84,12 @@
setTargetPositionOfFollower();
setTargetPositionOfWingman();
-
+ if (!executingMoveToPoint_)
+ {
+ Vector3* targetPosition = new Vector3 (0, 0, -2000);
+ moveToPoint(*targetPosition, 180);
+ executingMoveToPoint_ = true;
+ }
if (this->myFollower_ && this->target_)
this->myFollower_->setTarget(this->target_);
Modified: code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc 2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/FleetController.cc 2015-11-09 15:38:02 UTC (rev 10789)
@@ -68,7 +68,7 @@
{
(*it2)->setTargetPosition(this->getControllableEntity()->getWorldPosition());
}*/
- for (ObjectList<Controller>::iterator it = ObjectList<Controller>::begin(); it; ++it)
+ /*for (ObjectList<Controller>::iterator it = ObjectList<Controller>::begin(); it; ++it)
{
if ((this->getControllableEntity()->getTeam() != (it)->getControllableEntity()->getTeam()) && (it)->getControllableEntity()->getTeam() == 0)
{
@@ -78,7 +78,7 @@
}
break;
}
- }
+ }*/
}
void FleetController::tick(float dt)
Modified: code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc 2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/SectionController.cc 2015-11-09 15:38:02 UTC (rev 10789)
@@ -60,7 +60,7 @@
if (this->bHasTargetPosition_)
{
- this->moveToTargetPosition();
+ this->moveToTargetPosition(dt);
}
if (this->bShooting_)
doFire();
Modified: code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc
===================================================================
--- code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc 2015-11-09 15:02:14 UTC (rev 10788)
+++ code/branches/AI_HS15/src/orxonox/controllers/WingmanController.cc 2015-11-09 15:38:02 UTC (rev 10789)
@@ -124,7 +124,7 @@
}
if (this->bHasTargetPosition_)
{
- this->moveToTargetPosition();
+ this->moveToTargetPosition(dt);
}
if (this->bShooting_)
More information about the Orxonox-commit
mailing list