Skip to content

Commit

Permalink
fix #6357
Browse files Browse the repository at this point in the history
  • Loading branch information
rtri committed Jul 2, 2020
1 parent c6562d5 commit f4563f2
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 104 deletions.
10 changes: 10 additions & 0 deletions rts/Lua/LuaConstGame.cpp
Expand Up @@ -15,6 +15,7 @@
#include "Sim/Misc/DamageArrayHandler.h"
#include "Sim/Misc/Wind.h"
#include "Sim/MoveTypes/MoveDefHandler.h"
#include "Sim/MoveTypes/ScriptMoveType.h"
#include "Sim/Units/UnitHandler.h"
#include "System/FileSystem/ArchiveScanner.h"
#include "System/StringUtil.h"
Expand Down Expand Up @@ -199,6 +200,15 @@ bool LuaConstGame::PushEntries(lua_State* L)
LuaPushNamedNumber(L, "Ship" , MoveDef::SpeedModClass::Ship );
lua_rawset(L, -3);
}
{
// MoveCtrl script-notify types
lua_pushliteral(L, "scriptNotifyTypes");
lua_createtable(L, 0, 3);
LuaPushNamedNumber(L, "HitNothing", CScriptMoveType::HitNothing);
LuaPushNamedNumber(L, "HitGround" , CScriptMoveType::HitGround );
LuaPushNamedNumber(L, "HitLimit" , CScriptMoveType::HitLimit );
lua_rawset(L, -3);
}

return true;
}
Expand Down
45 changes: 22 additions & 23 deletions rts/Lua/LuaSyncedMoveCtrl.cpp
Expand Up @@ -55,6 +55,7 @@ bool LuaSyncedMoveCtrl::PushMoveCtrl(lua_State* L)

REGISTER_LUA_CFUNC(SetTrackSlope);
REGISTER_LUA_CFUNC(SetTrackGround);
REGISTER_LUA_CFUNC(SetTrackLimits);
REGISTER_LUA_CFUNC(SetGroundOffset);
REGISTER_LUA_CFUNC(SetGravity);
REGISTER_LUA_CFUNC(SetDrag);
Expand All @@ -68,6 +69,7 @@ bool LuaSyncedMoveCtrl::PushMoveCtrl(lua_State* L)
REGISTER_LUA_CFUNC(SetShotStop);
REGISTER_LUA_CFUNC(SetSlopeStop);
REGISTER_LUA_CFUNC(SetCollideStop);
REGISTER_LUA_CFUNC(SetLimitsStop);

REGISTER_LUA_CFUNC(SetAirMoveTypeData);
REGISTER_LUA_CFUNC(SetGroundMoveTypeData);
Expand Down Expand Up @@ -389,6 +391,18 @@ int LuaSyncedMoveCtrl::SetTrackGround(lua_State* L)
}


int LuaSyncedMoveCtrl::SetTrackLimits(lua_State* L)
{
CScriptMoveType* moveType = ParseScriptMoveType(L, __func__, 1);

if (moveType == nullptr)
return 0;

moveType->trackLimits = luaL_checkboolean(L, 2);
return 0;
}


int LuaSyncedMoveCtrl::SetGroundOffset(lua_State* L)
{
CScriptMoveType* moveType = ParseScriptMoveType(L, __func__, 1);
Expand Down Expand Up @@ -444,14 +458,8 @@ int LuaSyncedMoveCtrl::SetLimits(lua_State* L)
if (moveType == nullptr)
return 0;

const float3 mins(luaL_checkfloat(L, 2),
luaL_checkfloat(L, 3),
luaL_checkfloat(L, 4));
const float3 maxs(luaL_checkfloat(L, 5),
luaL_checkfloat(L, 6),
luaL_checkfloat(L, 7));
moveType->mins = mins;
moveType->maxs = maxs;
moveType->mins = {luaL_checkfloat(L, 2), luaL_checkfloat(L, 3), luaL_checkfloat(L, 4)};
moveType->maxs = {luaL_checkfloat(L, 5), luaL_checkfloat(L, 6), luaL_checkfloat(L, 7)};
return 0;
}

Expand All @@ -472,39 +480,30 @@ int LuaSyncedMoveCtrl::SetNoBlocking(lua_State* L)
}


int LuaSyncedMoveCtrl::SetShotStop(lua_State* L)
{
CScriptMoveType* moveType = ParseScriptMoveType(L, __func__, 1);

if (moveType == nullptr)
return 0;

moveType->shotStop = luaL_checkboolean(L, 2);
return 0;
}
int LuaSyncedMoveCtrl::SetShotStop(lua_State* L) { return 0; }
int LuaSyncedMoveCtrl::SetSlopeStop(lua_State* L) { return 0; }


int LuaSyncedMoveCtrl::SetSlopeStop(lua_State* L)
int LuaSyncedMoveCtrl::SetCollideStop(lua_State* L)
{
CScriptMoveType* moveType = ParseScriptMoveType(L, __func__, 1);

if (moveType == nullptr)
return 0;

moveType->slopeStop = luaL_checkboolean(L, 2);
moveType->groundStop = lua_toboolean(L, 2); // FIXME
return 0;
}


int LuaSyncedMoveCtrl::SetCollideStop(lua_State* L)
int LuaSyncedMoveCtrl::SetLimitsStop(lua_State* L)
{
CScriptMoveType* moveType = ParseScriptMoveType(L, __func__, 1);

if (moveType == nullptr)
return 0;

moveType->gndStop = luaL_checkboolean(L, 2); // FIXME
moveType->collideStop = lua_toboolean(L, 2);
moveType->limitsStop = lua_toboolean(L, 2);
return 0;
}

Expand Down
2 changes: 2 additions & 0 deletions rts/Lua/LuaSyncedMoveCtrl.h
Expand Up @@ -39,6 +39,7 @@ class LuaSyncedMoveCtrl {

static int SetTrackSlope(lua_State* L);
static int SetTrackGround(lua_State* L);
static int SetTrackLimits(lua_State* L);
static int SetGroundOffset(lua_State* L);
static int SetGravity(lua_State* L);
static int SetDrag(lua_State* L);
Expand All @@ -52,6 +53,7 @@ class LuaSyncedMoveCtrl {
static int SetShotStop(lua_State* L);
static int SetSlopeStop(lua_State* L);
static int SetCollideStop(lua_State* L);
static int SetLimitsStop(lua_State* L);

// *MoveType-specific setters
static int SetGroundMoveTypeData(lua_State* L);
Expand Down
104 changes: 44 additions & 60 deletions rts/Sim/MoveTypes/ScriptMoveType.cpp
Expand Up @@ -14,56 +14,36 @@

CR_BIND_DERIVED(CScriptMoveType, AMoveType, (nullptr))
CR_REG_METADATA(CScriptMoveType, (
CR_MEMBER(tag),
CR_MEMBER(extrapolate),
CR_MEMBER(useRelVel),
CR_MEMBER(useRotVel),
CR_MEMBER(drag),
CR_MEMBER(velVec),
CR_MEMBER(relVel),
CR_MEMBER(rot),
CR_MEMBER(rotVel),
CR_MEMBER(mins),
CR_MEMBER(maxs),

CR_MEMBER(trackSlope),
CR_MEMBER(trackGround),
CR_MEMBER(tag),

CR_MEMBER(drag),
CR_MEMBER(groundOffset),
CR_MEMBER(gravityFactor),
CR_MEMBER(windFactor),

CR_MEMBER(extrapolate),
CR_MEMBER(useRelVel),
CR_MEMBER(useRotVel),

CR_MEMBER(trackSlope),
CR_MEMBER(trackGround),
CR_MEMBER(trackLimits),

CR_MEMBER(noBlocking), // copy of CSolidObject::PSTATE_BIT_BLOCKING
CR_MEMBER(gndStop),
CR_MEMBER(shotStop),
CR_MEMBER(slopeStop),
CR_MEMBER(collideStop),
CR_MEMBER(groundStop),

CR_MEMBER(scriptNotify)
))


CScriptMoveType::CScriptMoveType(CUnit* owner):
AMoveType(owner),
tag(0),
extrapolate(true),
useRelVel(false),
useRotVel(false),
drag(0.0f),
velVec(ZeroVector),
relVel(ZeroVector),
rot(ZeroVector),
rotVel(ZeroVector),
mins(-1.0e9f, -1.0e9f, -1.0e9f),
maxs(+1.0e9f, +1.0e9f, +1.0e9f),
trackSlope(false),
trackGround(false),
groundOffset(0.0f),
gravityFactor(0.0f),
windFactor(0.0f),
noBlocking(false),
gndStop(false),
shotStop(false),
slopeStop(false),
collideStop(false),
scriptNotify(0)
CScriptMoveType::CScriptMoveType(CUnit* owner): AMoveType(owner)
{
// use the transformation matrix instead of heading
UseHeading(false);
Expand All @@ -88,7 +68,7 @@ void CScriptMoveType::CheckNotify()
// NOTE: deletes \<this\>
owner->DisableScriptMoveType();
} else {
scriptNotify = 0;
scriptNotify = HitNothing;
}
}

Expand Down Expand Up @@ -127,11 +107,11 @@ bool CScriptMoveType::Update()
owner->Move(UpVector * (gndMin - owner->pos.y), true);
owner->speed.y = 0.0f;

if (gndStop) {
if (groundStop) {
velVec = ZeroVector;
relVel = ZeroVector;
rotVel = ZeroVector;
scriptNotify = 1;
scriptNotify = HitGround;
}
}
}
Expand Down Expand Up @@ -162,14 +142,30 @@ bool CScriptMoveType::Update()

void CScriptMoveType::CheckLimits()
{
if (owner->pos.x < mins.x) { owner->pos.x = mins.x; owner->speed.x = 0.0f; }
if (owner->pos.x > maxs.x) { owner->pos.x = maxs.x; owner->speed.x = 0.0f; }
if (owner->pos.y < mins.y) { owner->pos.y = mins.y; owner->speed.y = 0.0f; }
if (owner->pos.y > maxs.y) { owner->pos.y = maxs.y; owner->speed.y = 0.0f; }
if (owner->pos.z < mins.z) { owner->pos.z = mins.z; owner->speed.z = 0.0f; }
if (owner->pos.z > maxs.z) { owner->pos.z = maxs.z; owner->speed.z = 0.0f; }

owner->UpdateMidAndAimPos();
float3 pos = owner->pos;
float4 vel = owner->speed;

if (pos.x < mins.x) { pos.x = mins.x; vel.x = 0.0f; }
if (pos.x > maxs.x) { pos.x = maxs.x; vel.x = 0.0f; }
if (pos.y < mins.y) { pos.y = mins.y; vel.y = 0.0f; }
if (pos.y > maxs.y) { pos.y = maxs.y; vel.y = 0.0f; }
if (pos.z < mins.z) { pos.z = mins.z; vel.z = 0.0f; }
if (pos.z > maxs.z) { pos.z = maxs.z; vel.z = 0.0f; }

// bail if still within limits
if (pos == owner->pos)
return;


if (limitsStop) {
owner->Move(pos, false);
owner->SetVelocityAndSpeed(vel);
}

if (trackLimits) {
scriptNotify = HitLimit;
CheckNotify();
}
}


Expand All @@ -185,27 +181,15 @@ void CScriptMoveType::SetPosition(const float3& _pos) { owner->Move(_pos, false)
void CScriptMoveType::SetVelocity(const float3& _vel) { owner->SetVelocityAndSpeed(velVec = _vel); }



void CScriptMoveType::SetRelativeVelocity(const float3& _relVel)
{
relVel = _relVel;
useRelVel = ((relVel.x != 0.0f) || (relVel.y != 0.0f) || (relVel.z != 0.0f));
}
void CScriptMoveType::SetRelativeVelocity(const float3& _relVel) { useRelVel = ((relVel = _relVel) != ZeroVector); }
void CScriptMoveType::SetRotationVelocity(const float3& _rotVel) { useRotVel = ((rotVel = _rotVel) != ZeroVector); }


void CScriptMoveType::SetRotation(const float3& _rot)
{
owner->SetDirVectorsEuler(rot = _rot);
}


void CScriptMoveType::SetRotationVelocity(const float3& _rotVel)
{
rotVel = _rotVel;
useRotVel = ((rotVel.x != 0.0f) || (rotVel.y != 0.0f) || (rotVel.z != 0.0f));
}


void CScriptMoveType::SetHeading(short heading)
{
owner->SetHeading(heading, trackSlope, false);
Expand Down
47 changes: 26 additions & 21 deletions rts/Sim/MoveTypes/ScriptMoveType.h
Expand Up @@ -26,6 +26,12 @@ class CScriptMoveType : public AMoveType
void SetHeading(short heading);
void SetNoBlocking(bool state);

enum ScriptNotifyState {
HitNothing = 0,
HitGround = 1,
HitLimit = 2,
};

public: // null'ed virtuals
void StartMoving(float3, float goalRadius) override {}
void StartMoving(float3, float goalRadius, float speed) override {}
Expand All @@ -43,14 +49,6 @@ class CScriptMoveType : public AMoveType
void CheckNotify();

public:
int tag;

bool extrapolate;
bool useRelVel;
bool useRotVel;

float drag;

/// velocity vector
float3 velVec;
/// relative velocity (to current direction)
Expand All @@ -61,25 +59,32 @@ class CScriptMoveType : public AMoveType
/// angular velocity
float3 rotVel;

float3 mins;
float3 maxs;
float3 mins = {-1.0e9f, -1.0e9f, -1.0e9f};
float3 maxs = {+1.0e9f, +1.0e9f, +1.0e9f};

int tag = 0;

float drag = 0.0f;
float groundOffset = 0.0f;

float gravityFactor = 0.0f;
float windFactor = 0.0f;

bool trackSlope;
bool trackGround;
float groundOffset;
bool extrapolate = true;
bool useRelVel = false;
bool useRotVel = false;

float gravityFactor;
float windFactor;
bool trackSlope = false;
bool trackGround = false;
bool trackLimits = false;

bool noBlocking;
bool noBlocking = false;

bool gndStop;
bool shotStop;
bool slopeStop;
bool collideStop;
bool groundStop = false;
bool limitsStop = false;

protected:
int scriptNotify;
ScriptNotifyState scriptNotify = HitNothing;
};

#endif // SCRIPT_MOVE_TYPE_H

0 comments on commit f4563f2

Please sign in to comment.