mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-07-27 04:13:36 +00:00
UnitMotion - improve variable names and reuse a duplicated function (cleanup def47cb7ae)
This: - cleans up a code duplication and clarifies the intent. - reorders things around for clarity - improves variable names. Commented By: elexis Differential Revision: https://code.wildfiregames.com/D1840 This was SVN commit r22277.
This commit is contained in:
@@ -858,7 +858,7 @@ Formation.prototype.ComputeMotionParameters = function()
|
|||||||
minSpeed *= this.GetSpeedMultiplier();
|
minSpeed *= this.GetSpeedMultiplier();
|
||||||
|
|
||||||
var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
||||||
cmpUnitMotion.SetSpeedRatio(minSpeed / cmpUnitMotion.GetWalkSpeed());
|
cmpUnitMotion.SetSpeedMultiplier(minSpeed / cmpUnitMotion.GetWalkSpeed());
|
||||||
};
|
};
|
||||||
|
|
||||||
Formation.prototype.ShapeUpdate = function()
|
Formation.prototype.ShapeUpdate = function()
|
||||||
|
|||||||
@@ -502,7 +502,7 @@ GuiInterface.prototype.GetEntityState = function(player, ent)
|
|||||||
if (cmpUnitMotion)
|
if (cmpUnitMotion)
|
||||||
ret.speed = {
|
ret.speed = {
|
||||||
"walk": cmpUnitMotion.GetWalkSpeed(),
|
"walk": cmpUnitMotion.GetWalkSpeed(),
|
||||||
"run": cmpUnitMotion.GetWalkSpeed() * cmpUnitMotion.GetRunSpeedMultiplier()
|
"run": cmpUnitMotion.GetWalkSpeed() * cmpUnitMotion.GetRunMultiplier()
|
||||||
};
|
};
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -1660,7 +1660,7 @@ UnitAI.prototype.UnitFsmSpec = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
"leave": function(msg) {
|
"leave": function(msg) {
|
||||||
this.ResetMoveSpeed();
|
this.ResetSpeedMultiplier();
|
||||||
this.StopTimer();
|
this.StopTimer();
|
||||||
this.SetDefaultAnimationVariant();
|
this.SetDefaultAnimationVariant();
|
||||||
},
|
},
|
||||||
@@ -1675,13 +1675,13 @@ UnitAI.prototype.UnitFsmSpec = {
|
|||||||
{
|
{
|
||||||
var speed = cmpUnitAI.GetWalkSpeed();
|
var speed = cmpUnitAI.GetWalkSpeed();
|
||||||
if (speed < this.GetWalkSpeed())
|
if (speed < this.GetWalkSpeed())
|
||||||
this.SetMoveSpeedRatio(speed / this.GetWalkSpeed());
|
this.SetSpeedMultiplier(speed / this.GetWalkSpeed());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"MoveCompleted": function() {
|
"MoveCompleted": function() {
|
||||||
this.ResetMoveSpeed();
|
this.ResetSpeedMultiplier();
|
||||||
if (!this.MoveToTargetRangeExplicit(this.isGuardOf, 0, this.guardRange))
|
if (!this.MoveToTargetRangeExplicit(this.isGuardOf, 0, this.guardRange))
|
||||||
this.SetNextState("GUARDING");
|
this.SetNextState("GUARDING");
|
||||||
},
|
},
|
||||||
@@ -1739,15 +1739,15 @@ UnitAI.prototype.UnitFsmSpec = {
|
|||||||
|
|
||||||
// Run quickly
|
// Run quickly
|
||||||
this.SelectAnimation("move");
|
this.SelectAnimation("move");
|
||||||
this.SetMoveSpeedRatio(this.GetRunMultiplier());
|
this.SetSpeedMultiplier(this.GetRunMultiplier());
|
||||||
},
|
},
|
||||||
|
|
||||||
"HealthChanged": function() {
|
"HealthChanged": function() {
|
||||||
this.SetMoveSpeedRatio(this.GetRunMultiplier());
|
this.SetSpeedMultiplier(this.GetRunMultiplier());
|
||||||
},
|
},
|
||||||
|
|
||||||
"leave": function() {
|
"leave": function() {
|
||||||
this.ResetMoveSpeed();
|
this.ResetSpeedMultiplier();
|
||||||
},
|
},
|
||||||
|
|
||||||
"MoveCompleted": function() {
|
"MoveCompleted": function() {
|
||||||
@@ -2031,7 +2031,7 @@ UnitAI.prototype.UnitFsmSpec = {
|
|||||||
if (cmpUnitAI && cmpUnitAI.IsFleeing())
|
if (cmpUnitAI && cmpUnitAI.IsFleeing())
|
||||||
{
|
{
|
||||||
// Run after a fleeing target
|
// Run after a fleeing target
|
||||||
this.SetMoveSpeedRatio(this.GetRunMultiplier());
|
this.SetSpeedMultiplier(this.GetRunMultiplier());
|
||||||
}
|
}
|
||||||
this.StartTimer(1000, 1000);
|
this.StartTimer(1000, 1000);
|
||||||
},
|
},
|
||||||
@@ -3975,7 +3975,7 @@ UnitAI.prototype.GetRunMultiplier = function()
|
|||||||
var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
var cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
||||||
if (!cmpUnitMotion)
|
if (!cmpUnitMotion)
|
||||||
return 0;
|
return 0;
|
||||||
return cmpUnitMotion.GetRunSpeedMultiplier();
|
return cmpUnitMotion.GetRunMultiplier();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -5582,18 +5582,18 @@ UnitAI.prototype.GetStanceName = function()
|
|||||||
/*
|
/*
|
||||||
* Make the unit walk at its normal pace.
|
* Make the unit walk at its normal pace.
|
||||||
*/
|
*/
|
||||||
UnitAI.prototype.ResetMoveSpeed = function()
|
UnitAI.prototype.ResetSpeedMultiplier = function()
|
||||||
{
|
{
|
||||||
let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
||||||
if (cmpUnitMotion)
|
if (cmpUnitMotion)
|
||||||
cmpUnitMotion.SetSpeedRatio(1);
|
cmpUnitMotion.SetSpeedMultiplier(1);
|
||||||
};
|
};
|
||||||
|
|
||||||
UnitAI.prototype.SetMoveSpeedRatio = function(speed)
|
UnitAI.prototype.SetSpeedMultiplier = function(speed)
|
||||||
{
|
{
|
||||||
let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
let cmpUnitMotion = Engine.QueryInterface(this.entity, IID_UnitMotion);
|
||||||
if (cmpUnitMotion)
|
if (cmpUnitMotion)
|
||||||
cmpUnitMotion.SetSpeedRatio(speed);
|
cmpUnitMotion.SetSpeedMultiplier(speed);
|
||||||
};
|
};
|
||||||
|
|
||||||
UnitAI.prototype.SetHeldPosition = function(x, z)
|
UnitAI.prototype.SetHeldPosition = function(x, z)
|
||||||
|
|||||||
@@ -304,12 +304,12 @@ UnitMotionFlying.prototype.GetWalkSpeed = function()
|
|||||||
return +this.template.MaxSpeed;
|
return +this.template.MaxSpeed;
|
||||||
};
|
};
|
||||||
|
|
||||||
UnitMotionFlying.prototype.SetSpeedRatio = function()
|
UnitMotionFlying.prototype.SetSpeedMultiplier = function()
|
||||||
{
|
{
|
||||||
// ignore this, the speed is always the walk speed
|
// ignore this, the speed is always the walk speed
|
||||||
};
|
};
|
||||||
|
|
||||||
UnitMotionFlying.prototype.GetRunSpeedMultiplier = function()
|
UnitMotionFlying.prototype.GetRunMultiplier = function()
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
@@ -319,7 +319,7 @@ UnitMotionFlying.prototype.GetCurrentSpeed = function()
|
|||||||
return this.speed;
|
return this.speed;
|
||||||
};
|
};
|
||||||
|
|
||||||
UnitMotionFlying.prototype.GetSpeedRatio = function()
|
UnitMotionFlying.prototype.GetSpeedMultiplier = function()
|
||||||
{
|
{
|
||||||
return this.GetCurrentSpeed() / this.GetWalkSpeed();
|
return this.GetCurrentSpeed() / this.GetWalkSpeed();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ function TestFormationExiting(mode)
|
|||||||
|
|
||||||
AddMock(controller, IID_UnitMotion, {
|
AddMock(controller, IID_UnitMotion, {
|
||||||
GetWalkSpeed: function() { return 1; },
|
GetWalkSpeed: function() { return 1; },
|
||||||
SetSpeedRatio: function(speed) { },
|
SetSpeedMultiplier: function(speed) { },
|
||||||
MoveToPointRange: function(x, z, minRange, maxRange) { },
|
MoveToPointRange: function(x, z, minRange, maxRange) { },
|
||||||
GetPassabilityClassName: function() { return "default"; },
|
GetPassabilityClassName: function() { return "default"; },
|
||||||
});
|
});
|
||||||
@@ -282,7 +282,7 @@ function TestMoveIntoFormationWhileAttacking()
|
|||||||
|
|
||||||
AddMock(controller, IID_UnitMotion, {
|
AddMock(controller, IID_UnitMotion, {
|
||||||
GetWalkSpeed: function() { return 1; },
|
GetWalkSpeed: function() { return 1; },
|
||||||
SetSpeedRatio: function(speed) { },
|
SetSpeedMultiplier: function(speed) { },
|
||||||
MoveToPointRange: function(x, z, minRange, maxRange) { },
|
MoveToPointRange: function(x, z, minRange, maxRange) { },
|
||||||
IsInTargetRange: function(target, min, max) { return true; },
|
IsInTargetRange: function(target, min, max) { return true; },
|
||||||
StopMoving: function() { },
|
StopMoving: function() { },
|
||||||
|
|||||||
@@ -26,12 +26,12 @@ let cmpUnitMotionFlying = ConstructComponent(entity, "UnitMotionFlying", {
|
|||||||
"PassabilityClass": "unrestricted"
|
"PassabilityClass": "unrestricted"
|
||||||
});
|
});
|
||||||
|
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedRatio(), 0);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedMultiplier(), 0);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetRunSpeedMultiplier(), 1);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetRunMultiplier(), 1);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
||||||
cmpUnitMotionFlying.SetSpeedRatio(2);
|
cmpUnitMotionFlying.SetSpeedMultiplier(2);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedRatio(), 0);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedMultiplier(), 0);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetRunSpeedMultiplier(), 1);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetRunMultiplier(), 1);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
||||||
|
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetPassabilityClassName(), "unrestricted");
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetPassabilityClassName(), "unrestricted");
|
||||||
@@ -80,7 +80,7 @@ AddMock(entity, IID_WaterManager, {
|
|||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
||||||
cmpUnitMotionFlying.OnUpdate({ "turnLength": 500 });
|
cmpUnitMotionFlying.OnUpdate({ "turnLength": 500 });
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedRatio(), 0);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedMultiplier(), 0);
|
||||||
|
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.MoveToTargetRange(target, 0, 10), true);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.MoveToTargetRange(target, 0, 10), true);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.MoveToPointRange(100, 200, 0, 20), true);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.MoveToPointRange(100, 200, 0, 20), true);
|
||||||
@@ -100,7 +100,7 @@ TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 0.75);
|
|||||||
TS_ASSERT_EQUALS(height, 55);
|
TS_ASSERT_EQUALS(height, 55);
|
||||||
cmpUnitMotionFlying.OnUpdate({ "turnLength": 500 });
|
cmpUnitMotionFlying.OnUpdate({ "turnLength": 500 });
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 1);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetCurrentSpeed(), 1);
|
||||||
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedRatio(), 1);
|
TS_ASSERT_EQUALS(cmpUnitMotionFlying.GetSpeedMultiplier(), 1);
|
||||||
TS_ASSERT_EQUALS(height, 105);
|
TS_ASSERT_EQUALS(height, 105);
|
||||||
|
|
||||||
// Fly
|
// Fly
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ public:
|
|||||||
|
|
||||||
bool m_FormationController;
|
bool m_FormationController;
|
||||||
|
|
||||||
fixed m_TemplateWalkSpeed, m_TemplateRunSpeedMultiplier;
|
fixed m_TemplateWalkSpeed, m_TemplateRunMultiplier;
|
||||||
pass_class_t m_PassClass;
|
pass_class_t m_PassClass;
|
||||||
std::string m_PassClassName;
|
std::string m_PassClassName;
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ public:
|
|||||||
entity_pos_t m_Clearance;
|
entity_pos_t m_Clearance;
|
||||||
|
|
||||||
// cached for efficiency
|
// cached for efficiency
|
||||||
fixed m_WalkSpeed, m_RunSpeedMultiplier;
|
fixed m_WalkSpeed, m_RunMultiplier;
|
||||||
|
|
||||||
bool m_Moving;
|
bool m_Moving;
|
||||||
bool m_FacePointAfterMove;
|
bool m_FacePointAfterMove;
|
||||||
@@ -233,10 +233,10 @@ public:
|
|||||||
entity_pos_t m_TargetMinRange;
|
entity_pos_t m_TargetMinRange;
|
||||||
entity_pos_t m_TargetMaxRange;
|
entity_pos_t m_TargetMaxRange;
|
||||||
|
|
||||||
// Actual unit speed, after technology and ratio
|
// If the entity moves, it will do so at m_WalkSpeed * m_SpeedMultiplier.
|
||||||
|
fixed m_SpeedMultiplier;
|
||||||
|
// This caches the resulting speed from m_WalkSpeed * m_SpeedMultiplier for convenience.
|
||||||
fixed m_Speed;
|
fixed m_Speed;
|
||||||
// Convenience variable to avoid recomputing the ratio every time. Synchronised.
|
|
||||||
fixed m_SpeedRatio;
|
|
||||||
|
|
||||||
// Current mean speed (over the last turn).
|
// Current mean speed (over the last turn).
|
||||||
fixed m_CurSpeed;
|
fixed m_CurSpeed;
|
||||||
@@ -283,12 +283,12 @@ public:
|
|||||||
m_FacePointAfterMove = true;
|
m_FacePointAfterMove = true;
|
||||||
|
|
||||||
m_WalkSpeed = m_TemplateWalkSpeed = m_Speed = paramNode.GetChild("WalkSpeed").ToFixed();
|
m_WalkSpeed = m_TemplateWalkSpeed = m_Speed = paramNode.GetChild("WalkSpeed").ToFixed();
|
||||||
m_SpeedRatio = fixed::FromInt(1);
|
m_SpeedMultiplier = fixed::FromInt(1);
|
||||||
m_CurSpeed = fixed::Zero();
|
m_CurSpeed = fixed::Zero();
|
||||||
|
|
||||||
m_RunSpeedMultiplier = m_TemplateRunSpeedMultiplier = fixed::FromInt(1);
|
m_RunMultiplier = m_TemplateRunMultiplier = fixed::FromInt(1);
|
||||||
if (paramNode.GetChild("RunMultiplier").IsOk())
|
if (paramNode.GetChild("RunMultiplier").IsOk())
|
||||||
m_RunSpeedMultiplier = m_TemplateRunSpeedMultiplier = paramNode.GetChild("RunMultiplier").ToFixed();
|
m_RunMultiplier = m_TemplateRunMultiplier = paramNode.GetChild("RunMultiplier").ToFixed();
|
||||||
|
|
||||||
CmpPtr<ICmpPathfinder> cmpPathfinder(GetSystemEntity());
|
CmpPtr<ICmpPathfinder> cmpPathfinder(GetSystemEntity());
|
||||||
if (cmpPathfinder)
|
if (cmpPathfinder)
|
||||||
@@ -338,7 +338,7 @@ public:
|
|||||||
serialize.NumberFixed_Unbounded("target min range", m_TargetMinRange);
|
serialize.NumberFixed_Unbounded("target min range", m_TargetMinRange);
|
||||||
serialize.NumberFixed_Unbounded("target max range", m_TargetMaxRange);
|
serialize.NumberFixed_Unbounded("target max range", m_TargetMaxRange);
|
||||||
|
|
||||||
serialize.NumberFixed_Unbounded("speed ratio", m_SpeedRatio);
|
serialize.NumberFixed_Unbounded("speed multiplier", m_SpeedMultiplier);
|
||||||
|
|
||||||
serialize.NumberFixed_Unbounded("current speed", m_CurSpeed);
|
serialize.NumberFixed_Unbounded("current speed", m_CurSpeed);
|
||||||
|
|
||||||
@@ -419,11 +419,12 @@ public:
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
m_WalkSpeed = cmpValueModificationManager->ApplyModifications(L"UnitMotion/WalkSpeed", m_TemplateWalkSpeed, GetEntityId());
|
m_WalkSpeed = cmpValueModificationManager->ApplyModifications(L"UnitMotion/WalkSpeed", m_TemplateWalkSpeed, GetEntityId());
|
||||||
m_RunSpeedMultiplier = cmpValueModificationManager->ApplyModifications(L"UnitMotion/RunMultiplier", m_TemplateRunSpeedMultiplier, GetEntityId());
|
m_RunMultiplier = cmpValueModificationManager->ApplyModifications(L"UnitMotion/RunMultiplier", m_TemplateRunMultiplier, GetEntityId());
|
||||||
|
|
||||||
// Adjust our speed. UnitMotion cannot know if this speed is on purpose or not so always adjust and let unitAI and such adapt.
|
// For MT_Deserialize compute m_Speed from the serialized m_SpeedMultiplier.
|
||||||
m_SpeedRatio = std::min(m_SpeedRatio, m_RunSpeedMultiplier);
|
// For MT_ValueModification and MT_OwnershipChanged, adjust m_SpeedMultiplier if needed
|
||||||
m_Speed = m_SpeedRatio.Multiply(GetWalkSpeed());
|
// (in case then new m_RunMultiplier value is lower than the old).
|
||||||
|
SetSpeedMultiplier(m_SpeedMultiplier);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -441,20 +442,15 @@ public:
|
|||||||
return m_Moving;
|
return m_Moving;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual fixed GetSpeedRatio() const
|
virtual fixed GetSpeedMultiplier() const
|
||||||
{
|
{
|
||||||
return m_SpeedRatio;
|
return m_SpeedMultiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual fixed GetRunSpeedMultiplier() const
|
virtual void SetSpeedMultiplier(fixed multiplier)
|
||||||
{
|
{
|
||||||
return m_RunSpeedMultiplier;
|
m_SpeedMultiplier = std::min(multiplier, m_RunMultiplier);
|
||||||
}
|
m_Speed = m_SpeedMultiplier.Multiply(GetWalkSpeed());
|
||||||
|
|
||||||
virtual void SetSpeedRatio(fixed ratio)
|
|
||||||
{
|
|
||||||
m_SpeedRatio = std::min(ratio, m_RunSpeedMultiplier);
|
|
||||||
m_Speed = m_SpeedRatio.Multiply(GetWalkSpeed());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual fixed GetSpeed() const
|
virtual fixed GetSpeed() const
|
||||||
@@ -467,6 +463,11 @@ public:
|
|||||||
return m_WalkSpeed;
|
return m_WalkSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual fixed GetRunMultiplier() const
|
||||||
|
{
|
||||||
|
return m_RunMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
virtual pass_class_t GetPassabilityClass() const
|
virtual pass_class_t GetPassabilityClass() const
|
||||||
{
|
{
|
||||||
return m_PassClass;
|
return m_PassClass;
|
||||||
@@ -866,7 +867,7 @@ void CCmpUnitMotion::Move(fixed dt)
|
|||||||
fixed basicSpeed = m_Speed;
|
fixed basicSpeed = m_Speed;
|
||||||
// If in formation, run to keep up; otherwise just walk
|
// If in formation, run to keep up; otherwise just walk
|
||||||
if (IsFormationMember())
|
if (IsFormationMember())
|
||||||
basicSpeed = m_Speed.Multiply(m_RunSpeedMultiplier);
|
basicSpeed = m_Speed.Multiply(m_RunMultiplier);
|
||||||
|
|
||||||
// Find the speed factor of the underlying terrain
|
// Find the speed factor of the underlying terrain
|
||||||
// (We only care about the tile we start on - it doesn't matter if we're moving
|
// (We only care about the tile we start on - it doesn't matter if we're moving
|
||||||
|
|||||||
@@ -31,11 +31,11 @@ DEFINE_INTERFACE_METHOD_3("MoveToFormationOffset", void, ICmpUnitMotion, MoveToF
|
|||||||
DEFINE_INTERFACE_METHOD_2("FaceTowardsPoint", void, ICmpUnitMotion, FaceTowardsPoint, entity_pos_t, entity_pos_t)
|
DEFINE_INTERFACE_METHOD_2("FaceTowardsPoint", void, ICmpUnitMotion, FaceTowardsPoint, entity_pos_t, entity_pos_t)
|
||||||
DEFINE_INTERFACE_METHOD_0("StopMoving", void, ICmpUnitMotion, StopMoving)
|
DEFINE_INTERFACE_METHOD_0("StopMoving", void, ICmpUnitMotion, StopMoving)
|
||||||
DEFINE_INTERFACE_METHOD_CONST_0("GetCurrentSpeed", fixed, ICmpUnitMotion, GetCurrentSpeed)
|
DEFINE_INTERFACE_METHOD_CONST_0("GetCurrentSpeed", fixed, ICmpUnitMotion, GetCurrentSpeed)
|
||||||
DEFINE_INTERFACE_METHOD_CONST_0("GetRunSpeedMultiplier", fixed, ICmpUnitMotion, GetRunSpeedMultiplier)
|
|
||||||
DEFINE_INTERFACE_METHOD_1("SetSpeedRatio", void, ICmpUnitMotion, SetSpeedRatio, fixed)
|
|
||||||
DEFINE_INTERFACE_METHOD_CONST_0("IsMoving", bool, ICmpUnitMotion, IsMoving)
|
DEFINE_INTERFACE_METHOD_CONST_0("IsMoving", bool, ICmpUnitMotion, IsMoving)
|
||||||
DEFINE_INTERFACE_METHOD_CONST_0("GetSpeed", fixed, ICmpUnitMotion, GetSpeed)
|
DEFINE_INTERFACE_METHOD_CONST_0("GetSpeed", fixed, ICmpUnitMotion, GetSpeed)
|
||||||
DEFINE_INTERFACE_METHOD_CONST_0("GetWalkSpeed", fixed, ICmpUnitMotion, GetWalkSpeed)
|
DEFINE_INTERFACE_METHOD_CONST_0("GetWalkSpeed", fixed, ICmpUnitMotion, GetWalkSpeed)
|
||||||
|
DEFINE_INTERFACE_METHOD_CONST_0("GetRunMultiplier", fixed, ICmpUnitMotion, GetRunMultiplier)
|
||||||
|
DEFINE_INTERFACE_METHOD_1("SetSpeedMultiplier", void, ICmpUnitMotion, SetSpeedMultiplier, fixed)
|
||||||
DEFINE_INTERFACE_METHOD_CONST_0("GetPassabilityClassName", std::string, ICmpUnitMotion, GetPassabilityClassName)
|
DEFINE_INTERFACE_METHOD_CONST_0("GetPassabilityClassName", std::string, ICmpUnitMotion, GetPassabilityClassName)
|
||||||
DEFINE_INTERFACE_METHOD_CONST_0("GetUnitClearance", entity_pos_t, ICmpUnitMotion, GetUnitClearance)
|
DEFINE_INTERFACE_METHOD_CONST_0("GetUnitClearance", entity_pos_t, ICmpUnitMotion, GetUnitClearance)
|
||||||
DEFINE_INTERFACE_METHOD_1("SetFacePointAfterMove", void, ICmpUnitMotion, SetFacePointAfterMove, bool)
|
DEFINE_INTERFACE_METHOD_1("SetFacePointAfterMove", void, ICmpUnitMotion, SetFacePointAfterMove, bool)
|
||||||
@@ -87,16 +87,6 @@ public:
|
|||||||
return m_Script.Call<fixed>("GetCurrentSpeed");
|
return m_Script.Call<fixed>("GetCurrentSpeed");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SetSpeedRatio(fixed ratio)
|
|
||||||
{
|
|
||||||
m_Script.CallVoid("SetSpeedRatio", ratio);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual fixed GetRunSpeedMultiplier() const
|
|
||||||
{
|
|
||||||
return m_Script.Call<fixed>("GetRunSpeedMultiplier");
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual bool IsMoving() const
|
virtual bool IsMoving() const
|
||||||
{
|
{
|
||||||
return m_Script.Call<bool>("IsMoving");
|
return m_Script.Call<bool>("IsMoving");
|
||||||
@@ -112,6 +102,21 @@ public:
|
|||||||
return m_Script.Call<fixed>("GetWalkSpeed");
|
return m_Script.Call<fixed>("GetWalkSpeed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual fixed GetRunMultiplier() const
|
||||||
|
{
|
||||||
|
return m_Script.Call<fixed>("GetRunMultiplier");
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void SetSpeedMultiplier(fixed multiplier)
|
||||||
|
{
|
||||||
|
m_Script.CallVoid("SetSpeedMultiplier", multiplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual fixed GetSpeedMultiplier() const
|
||||||
|
{
|
||||||
|
return m_Script.Call<fixed>("GetSpeedMultiplier");
|
||||||
|
}
|
||||||
|
|
||||||
virtual void SetFacePointAfterMove(bool facePointAfterMove)
|
virtual void SetFacePointAfterMove(bool facePointAfterMove)
|
||||||
{
|
{
|
||||||
m_Script.CallVoid("SetFacePointAfterMove", facePointAfterMove);
|
m_Script.CallVoid("SetFacePointAfterMove", facePointAfterMove);
|
||||||
@@ -122,11 +127,6 @@ public:
|
|||||||
return m_Script.Call<pass_class_t>("GetPassabilityClass");
|
return m_Script.Call<pass_class_t>("GetPassabilityClass");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual fixed GetSpeedRatio() const
|
|
||||||
{
|
|
||||||
return m_Script.Call<fixed>("GetSpeedRatio");
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual std::string GetPassabilityClassName() const
|
virtual std::string GetPassabilityClassName() const
|
||||||
{
|
{
|
||||||
return m_Script.Call<std::string>("GetPassabilityClassName");
|
return m_Script.Call<std::string>("GetPassabilityClassName");
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
virtual void StopMoving() = 0;
|
virtual void StopMoving() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current movement speed.
|
* Get the distance travelled over the last turn.
|
||||||
*/
|
*/
|
||||||
virtual fixed GetCurrentSpeed() const = 0;
|
virtual fixed GetCurrentSpeed() const = 0;
|
||||||
|
|
||||||
@@ -97,32 +97,32 @@ public:
|
|||||||
virtual bool IsMoving() const = 0;
|
virtual bool IsMoving() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get how much faster/slower we are than normal.
|
* Get the unit template walk speed after modifications.
|
||||||
*/
|
*/
|
||||||
virtual fixed GetSpeedRatio() const = 0;
|
virtual fixed GetWalkSpeed() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get how much faster than our regular speed we can go.
|
* Get the unit template running (i.e. max) speed after modifications.
|
||||||
*/
|
*/
|
||||||
virtual fixed GetRunSpeedMultiplier() const = 0;
|
virtual fixed GetRunMultiplier() const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the ratio of GetSpeed() / GetWalkSpeed().
|
||||||
|
*/
|
||||||
|
virtual fixed GetSpeedMultiplier() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the current movement speed.
|
* Set the current movement speed.
|
||||||
* @param speed A ratio of GetWalkSpeed().
|
* @param speed A multiplier of GetWalkSpeed().
|
||||||
*/
|
*/
|
||||||
virtual void SetSpeedRatio(fixed ratio) = 0;
|
virtual void SetSpeedMultiplier(fixed multiplier) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the unit theoretical speed in metres per second.
|
* Get the speed at which the unit intends to move.
|
||||||
* This is affected by SetSpeedRatio.
|
* (regardless of whether the unit is moving or not right now).
|
||||||
*/
|
*/
|
||||||
virtual fixed GetSpeed() const = 0;
|
virtual fixed GetSpeed() const = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the unit "raw"/template walk speed after technologies.
|
|
||||||
* Calls to SetSpeedRatio have no effect on this (as that affects actual speed, not template).
|
|
||||||
*/
|
|
||||||
virtual fixed GetWalkSpeed() const = 0;
|
|
||||||
/**
|
/**
|
||||||
* Set whether the unit will turn to face the target point after finishing moving.
|
* Set whether the unit will turn to face the target point after finishing moving.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -395,7 +395,7 @@ void ActorViewer::SetActor(const CStrW& name, const CStrW& animation, player_id_
|
|||||||
{
|
{
|
||||||
CmpPtr<ICmpUnitMotion> cmpUnitMotion(m.Simulation2, m.Entity);
|
CmpPtr<ICmpUnitMotion> cmpUnitMotion(m.Simulation2, m.Entity);
|
||||||
if (cmpUnitMotion)
|
if (cmpUnitMotion)
|
||||||
speed = cmpUnitMotion->GetWalkSpeed().ToFloat() * cmpUnitMotion->GetRunSpeedMultiplier().ToFloat();
|
speed = cmpUnitMotion->GetWalkSpeed().ToFloat() * cmpUnitMotion->GetRunMultiplier().ToFloat();
|
||||||
else
|
else
|
||||||
speed = 12.f; // typical unit speed
|
speed = 12.f; // typical unit speed
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user