diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index bd008d516..fe560e739 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -460,6 +460,7 @@ PlayerData::PlayerData() jumpTowardsNormal = true; physicsPlayerType = StringTable->EmptyString(); + mControlMap = StringTable->EmptyString(); dMemset( actionList, 0, sizeof(actionList) ); } @@ -739,7 +740,9 @@ void PlayerData::initPersistFields() endGroup( "Camera" ); addGroup( "Movement" ); - + addField("controlMap", TypeString, Offset(mControlMap, PlayerData), + "@brief movemap used by these types of objects.\n\n"); + addFieldV( "maxStepHeight", TypeRangedF32, Offset(maxStepHeight, PlayerData), &CommonValidators::PositiveFloat, "@brief Maximum height the player can step up.\n\n" "The player will automatically step onto changes in ground height less " diff --git a/Engine/source/T3D/player.h b/Engine/source/T3D/player.h index ab242d862..0b8f44df2 100644 --- a/Engine/source/T3D/player.h +++ b/Engine/source/T3D/player.h @@ -346,7 +346,7 @@ struct PlayerData: public ShapeBaseData { // Jump off surfaces at their normal rather than straight up bool jumpTowardsNormal; - + StringTableEntry mControlMap; // For use if/when mPhysicsPlayer is created StringTableEntry physicsPlayerType; diff --git a/Engine/source/T3D/turret/turretShape.cpp b/Engine/source/T3D/turret/turretShape.cpp index b23445294..e155663aa 100644 --- a/Engine/source/T3D/turret/turretShape.cpp +++ b/Engine/source/T3D/turret/turretShape.cpp @@ -127,6 +127,7 @@ TurretShapeData::TurretShapeData() recoilSequence[i] = -1; pitchSequence = -1; headingSequence = -1; + mControlMap = StringTable->EmptyString(); } void TurretShapeData::initPersistFields() @@ -134,6 +135,8 @@ void TurretShapeData::initPersistFields() docsURL; Parent::initPersistFields(); addGroup("Steering"); + addField("controlMap", TypeString, Offset(mControlMap, TurretShapeData), + "@brief movemap used by these types of objects.\n\n"); addField("zRotOnly", TypeBool, Offset(zRotOnly, TurretShapeData), "@brief Should the turret allow only z rotations.\n\n" "True indicates that the turret may only be rotated on its z axis, just like the Item class. " diff --git a/Engine/source/T3D/turret/turretShape.h b/Engine/source/T3D/turret/turretShape.h index b31024e07..a086d79d7 100644 --- a/Engine/source/T3D/turret/turretShape.h +++ b/Engine/source/T3D/turret/turretShape.h @@ -80,6 +80,7 @@ public: bool startLoaded; ///< Should the turret's mounted weapon(s) start in a loaded state? bool zRotOnly; ///< Should the turret allow only z rotations (like an item)? + StringTableEntry mControlMap; public: TurretShapeData(); diff --git a/Engine/source/T3D/vehicles/vehicle.cpp b/Engine/source/T3D/vehicles/vehicle.cpp index cfbd9a876..aa191be29 100644 --- a/Engine/source/T3D/vehicles/vehicle.cpp +++ b/Engine/source/T3D/vehicles/vehicle.cpp @@ -141,6 +141,7 @@ VehicleData::VehicleData() dMemset( damageEmitterOffset, 0, sizeof( damageEmitterOffset ) ); dMemset( damageEmitterIDList, 0, sizeof( damageEmitterIDList ) ); dMemset( damageLevelTolerance, 0, sizeof( damageLevelTolerance ) ); + mControlMap = StringTable->EmptyString(); numDmgEmitterAreas = 0; @@ -321,6 +322,8 @@ void VehicleData::initPersistFields() endGroup("Collision"); addGroup("Steering"); + addField("controlMap", TypeString, Offset(mControlMap, VehicleData), + "@brief movemap used by these types of objects.\n\n"); addFieldV( "jetForce", TypeRangedF32, Offset(jetForce, VehicleData), &CommonValidators::PositiveFloat, "@brief Additional force applied to the vehicle when it is jetting.\n\n" "For WheeledVehicles, the force is applied in the forward direction. For " @@ -726,6 +729,9 @@ void Vehicle::updateMove(const Move* move) if (mDamageState == Enabled) { setImageTriggerState(0,move->trigger[0]); setImageTriggerState(1,move->trigger[1]); + //legacy code has trigger 2 and 3 reserved + setImageTriggerState(2, move->trigger[4]); + setImageTriggerState(3, move->trigger[5]); } // Throttle diff --git a/Engine/source/T3D/vehicles/vehicle.h b/Engine/source/T3D/vehicles/vehicle.h index 402a3109a..746e99a16 100644 --- a/Engine/source/T3D/vehicles/vehicle.h +++ b/Engine/source/T3D/vehicles/vehicle.h @@ -69,6 +69,7 @@ struct VehicleData : public RigidShapeData F32 damageLevelTolerance[ VC_NUM_DAMAGE_LEVELS ]; F32 numDmgEmitterAreas; + StringTableEntry mControlMap; bool enablePhysicsRep; // diff --git a/Templates/BaseGame/game/core/clientServer/scripts/client/connectionToServer.tscript b/Templates/BaseGame/game/core/clientServer/scripts/client/connectionToServer.tscript index 94f30857f..c9cebaa2b 100644 --- a/Templates/BaseGame/game/core/clientServer/scripts/client/connectionToServer.tscript +++ b/Templates/BaseGame/game/core/clientServer/scripts/client/connectionToServer.tscript @@ -162,3 +162,16 @@ function disconnectedCleanup() moduleExec("onDestroyClientConnection", "Game"); } + +function clientCmdsetMoveMap(%movemap) +{ + if (!isObject(%movemap)) return; + if(isObject(ServerConnection) && isObject(ServerConnection.curMoveMap)) + ServerConnection.curMoveMap.pop(); + + // clear movement + $mvForwardAction = 0; + $mvBackwardAction = 0; + %movemap.push(); + ServerConnection.curMoveMap = %movemap; +} \ No newline at end of file diff --git a/Templates/BaseGame/game/core/clientServer/scripts/server/connectionToClient.tscript b/Templates/BaseGame/game/core/clientServer/scripts/server/connectionToClient.tscript index b804ac046..0e2a11e28 100644 --- a/Templates/BaseGame/game/core/clientServer/scripts/server/connectionToClient.tscript +++ b/Templates/BaseGame/game/core/clientServer/scripts/server/connectionToClient.tscript @@ -275,7 +275,9 @@ function GameConnection::onPostSpawn( %this ) if (%this.numModsNeedingLoaded) callOnObjectList("onPostSpawn", %modulesIdList, %this); else - %this.listener.onPostSpawnComplete(%this); + %this.listener.onPostSpawnComplete(%this); + if (isObject(%this.player.getDatablock().controlMap)) + commandToClient(%this, 'setMoveMap', %this.player.getDatablock().controlMap); } function GameConnectionListener::onPostSpawnComplete(%this, %client)