|
|
|
@ -75,6 +75,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
|
|
|
#include "../plInputCore/plInputDevice.h" |
|
|
|
|
#include "../plMath/plRandom.h" |
|
|
|
|
#include "../plPipeline/plDebugText.h" |
|
|
|
|
#include "../plNetClient/plNetClientMgr.h" |
|
|
|
|
#include "../plNetClient/plNetLinkingMgr.h" |
|
|
|
|
|
|
|
|
|
#include "../plMessage/plAvatarMsg.h" |
|
|
|
@ -494,12 +495,20 @@ hsBool plAvBrainHuman::IHandleClimbMsg(plClimbMsg *msg)
|
|
|
|
|
bool isStartClimb = msg->fCommand == plClimbMsg::kStartClimbing; |
|
|
|
|
if(isStartClimb) |
|
|
|
|
{ |
|
|
|
|
// let's build a seek task to get us to the attach point
|
|
|
|
|
plKey seekTarget = msg->fTarget; |
|
|
|
|
plAvTaskSeek *seekTask = TRACKED_NEW plAvTaskSeek(seekTarget); |
|
|
|
|
QueueTask(seekTask); |
|
|
|
|
|
|
|
|
|
// now a brain task to start the actual climb.
|
|
|
|
|
// Warp the player to the Seekpoint
|
|
|
|
|
plSceneObject *avatarObj = plSceneObject::ConvertNoRef(plNetClientMgr::GetInstance()->GetLocalPlayer()); |
|
|
|
|
plSceneObject *obj = plSceneObject::ConvertNoRef(msg->fTarget->ObjectIsLoaded()); |
|
|
|
|
plArmatureMod *localAvatar = plAvatarMgr::GetInstance()->GetLocalAvatar(); |
|
|
|
|
plArmatureMod *climbAvatar = plArmatureMod::ConvertNoRef(fArmature); |
|
|
|
|
if (climbAvatar == localAvatar) // is it our avatar who has to seek?
|
|
|
|
|
{ |
|
|
|
|
hsMatrix44 target = obj->GetLocalToWorld(); |
|
|
|
|
plWarpMsg *warp = TRACKED_NEW plWarpMsg(NULL, avatarObj->GetKey(), plWarpMsg::kFlushTransform, target); |
|
|
|
|
warp->SetBCastFlag(plMessage::kNetPropagate); |
|
|
|
|
plgDispatch::MsgSend(warp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// build the Climb brain
|
|
|
|
|
plAvBrainClimb::Mode startMode; |
|
|
|
|
switch(msg->fDirection) |
|
|
|
|
{ |
|
|
|
@ -515,10 +524,11 @@ hsBool plAvBrainHuman::IHandleClimbMsg(plClimbMsg *msg)
|
|
|
|
|
case plClimbMsg::kRight: |
|
|
|
|
startMode = plAvBrainClimb::kMountingRight; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
plAvBrainClimb *brain = TRACKED_NEW plAvBrainClimb(startMode); |
|
|
|
|
plAvTaskBrain *brainTask = TRACKED_NEW plAvTaskBrain(brain); |
|
|
|
|
QueueTask(brainTask); |
|
|
|
|
climbAvatar->PushBrain(brain); |
|
|
|
|
} |
|
|
|
|
// ** potentially controversial:
|
|
|
|
|
// It's fairly easy for a human brain to hit a climb trigger - like when falling off a wall.
|
|
|
|
|