Add an ability to cancel making a building (fixes #509)
parent
119bc62a7c
commit
a18d195cfd
|
@ -208,6 +208,22 @@ bool CTaskBuild::EventProcess(const Event &event)
|
||||||
|
|
||||||
m_progress += event.rTime*m_speed; // other advance
|
m_progress += event.rTime*m_speed; // other advance
|
||||||
|
|
||||||
|
// Cancel if the player try to move
|
||||||
|
float axeX = event.motionInput.x;
|
||||||
|
float axeY = event.motionInput.y;
|
||||||
|
float axeZ = event.motionInput.z;
|
||||||
|
if ( m_object->GetType() == OBJECT_HUMAN &&
|
||||||
|
(axeX != 0.0f || axeY != 0.0f || axeZ != 0.0f) &&
|
||||||
|
(m_phase == TBP_TURN || m_phase == TBP_MOVE || m_phase == TBP_TAKE || m_phase == TBP_PREP) )
|
||||||
|
{
|
||||||
|
m_phase = TBP_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_phase == TBP_STOP ) // stops?
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_phase == TBP_TURN ) // preliminary rotation?
|
if ( m_phase == TBP_TURN ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
a = m_object->GetRotationY();
|
a = m_object->GetRotationY();
|
||||||
|
@ -554,6 +570,31 @@ Error CTaskBuild::IsEnded()
|
||||||
m_physics->SetMotorSpeedX(0.0f);
|
m_physics->SetMotorSpeedX(0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( m_phase == TBP_STOP ) // canceled?
|
||||||
|
{
|
||||||
|
if ( m_progress < 1.0f && m_motion->GetAction() == MHS_GUN ) return ERR_CONTINUE;
|
||||||
|
|
||||||
|
if ( m_motion->GetAction() == MHS_FIRE )
|
||||||
|
{
|
||||||
|
m_motion->SetAction(MHS_GUN);
|
||||||
|
m_speed = 1.0f/1.0f;
|
||||||
|
m_progress = 0.0f;
|
||||||
|
return ERR_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_motion->SetAction(-1);
|
||||||
|
|
||||||
|
// Place gun back
|
||||||
|
m_object->SetObjectParent(14, 0);
|
||||||
|
m_object->SetPartPosition(14, Math::Vector(-1.5f, 0.3f, -1.35f));
|
||||||
|
m_object->SetPartRotationZ(14, Math::PI);
|
||||||
|
|
||||||
|
m_physics->SetMotorSpeedX(0.0f);
|
||||||
|
m_physics->SetMotorSpeedZ(0.0f);
|
||||||
|
|
||||||
|
m_metal->SetLock(false); // make titanium usable
|
||||||
|
}
|
||||||
|
|
||||||
Abort();
|
Abort();
|
||||||
return ERR_STOP;
|
return ERR_STOP;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ const int TBMAXLIGHT = 4;
|
||||||
|
|
||||||
enum TaskBuildPhase
|
enum TaskBuildPhase
|
||||||
{
|
{
|
||||||
|
TBP_STOP = 0, // cancels task
|
||||||
TBP_TURN = 1, // turns
|
TBP_TURN = 1, // turns
|
||||||
TBP_MOVE = 2, // forward/backward
|
TBP_MOVE = 2, // forward/backward
|
||||||
TBP_TAKE = 3, // takes gun
|
TBP_TAKE = 3, // takes gun
|
||||||
|
|
Loading…
Reference in New Issue