Don't assert a powered object unless asked to take a cell from youself in CTaskManip

master
krzys-h 2015-08-14 00:30:23 +02:00
parent 5bef62f01a
commit 222517a5e7
1 changed files with 6 additions and 8 deletions

View File

@ -57,7 +57,6 @@ CTaskManip::CTaskManip(COldObject* object) : CTask(object)
m_hand = TMH_OPEN; m_hand = TMH_OPEN;
assert(m_object->Implements(ObjectInterfaceType::Carrier)); assert(m_object->Implements(ObjectInterfaceType::Carrier));
assert(m_object->Implements(ObjectInterfaceType::Powered));
} }
// Object's destructor. // Object's destructor.
@ -289,7 +288,7 @@ bool TestFriend(ObjectType oType, ObjectType fType)
Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm) Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
{ {
ObjectType type; ObjectType type;
CObject *front, *other, *power; CObject *front, *other;
float iAngle, dist, len; float iAngle, dist, len;
float fDist, fAngle, oDist, oAngle, oHeight; float fDist, fAngle, oDist, oAngle, oHeight;
Math::Vector pos, fPos, oPos; Math::Vector pos, fPos, oPos;
@ -362,12 +361,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
return ERR_OK; return ERR_OK;
} }
m_energy = 0.0f; m_energy = GetObjectEnergy(m_object);
power = m_object->GetPower();
if ( power != nullptr && power->Implements(ObjectInterfaceType::PowerContainer) )
{
m_energy = dynamic_cast<CPowerContainerObject*>(power)->GetEnergy();
}
if ( !m_physics->GetLand() ) return ERR_MANIP_FLY; if ( !m_physics->GetLand() ) return ERR_MANIP_FLY;
@ -453,6 +447,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
} }
if ( m_arm == TMA_POWER ) if ( m_arm == TMA_POWER )
{ {
assert(m_object->Implements(ObjectInterfaceType::Powered));
if (m_object->GetPower() == nullptr) return ERR_MANIP_NIL; if (m_object->GetPower() == nullptr) return ERR_MANIP_NIL;
} }
} }
@ -481,6 +476,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
} }
if ( m_arm == TMA_POWER ) if ( m_arm == TMA_POWER )
{ {
assert(m_object->Implements(ObjectInterfaceType::Powered));
if (m_object->GetPower() != nullptr) return ERR_MANIP_OCC; if (m_object->GetPower() != nullptr) return ERR_MANIP_OCC;
} }
} }
@ -1101,6 +1097,7 @@ bool CTaskManip::TransporterTakeObject()
if (m_arm == TMA_POWER) // takes battery in the back? if (m_arm == TMA_POWER) // takes battery in the back?
{ {
assert(m_object->Implements(ObjectInterfaceType::Powered));
CObject* cargo = m_object->GetPower(); CObject* cargo = m_object->GetPower();
if (cargo == nullptr) return false; // no battery? if (cargo == nullptr) return false; // no battery?
assert(cargo->Implements(ObjectInterfaceType::Transportable)); assert(cargo->Implements(ObjectInterfaceType::Transportable));
@ -1195,6 +1192,7 @@ bool CTaskManip::TransporterDeposeObject()
if (m_arm == TMA_POWER) // deposits battery in the back? if (m_arm == TMA_POWER) // deposits battery in the back?
{ {
assert(m_object->Implements(ObjectInterfaceType::Powered));
CObject* cargo = m_object->GetCargo(); CObject* cargo = m_object->GetCargo();
if (cargo == nullptr) return false; // nothing transported? if (cargo == nullptr) return false; // nothing transported?
assert(cargo->Implements(ObjectInterfaceType::Transportable)); assert(cargo->Implements(ObjectInterfaceType::Transportable));