Fix some more CObject interface issues
* fix mission 1.3 * fix saving/loading missions * fix compile warningsmaster
parent
03717e11d4
commit
fcbbbcb83c
|
@ -212,38 +212,50 @@ std::string ModelOutput::VectorToString(const Math::Vector& vector)
|
||||||
|
|
||||||
std::string ModelOutput::TransparentModeToString(ModelTransparentMode mode)
|
std::string ModelOutput::TransparentModeToString(ModelTransparentMode mode)
|
||||||
{
|
{
|
||||||
|
std::string str;
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case ModelTransparentMode::None:
|
case ModelTransparentMode::None:
|
||||||
return "none";
|
str = "none";
|
||||||
|
break;
|
||||||
|
|
||||||
case ModelTransparentMode::AlphaChannel:
|
case ModelTransparentMode::AlphaChannel:
|
||||||
return "alpha";
|
str = "alpha";
|
||||||
|
break;
|
||||||
|
|
||||||
case ModelTransparentMode::MapBlackToAlpha:
|
case ModelTransparentMode::MapBlackToAlpha:
|
||||||
return "map_black";
|
str = "map_black";
|
||||||
|
break;
|
||||||
|
|
||||||
case ModelTransparentMode::MapWhiteToAlpha:
|
case ModelTransparentMode::MapWhiteToAlpha:
|
||||||
return "map_white";
|
str = "map_white";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ModelOutput::SpecialMarkToString(ModelSpecialMark specialMark)
|
std::string ModelOutput::SpecialMarkToString(ModelSpecialMark specialMark)
|
||||||
{
|
{
|
||||||
|
std::string str;
|
||||||
switch (specialMark)
|
switch (specialMark)
|
||||||
{
|
{
|
||||||
case ModelSpecialMark::None:
|
case ModelSpecialMark::None:
|
||||||
return "none";
|
str = "none";
|
||||||
|
break;
|
||||||
|
|
||||||
case ModelSpecialMark::Part1:
|
case ModelSpecialMark::Part1:
|
||||||
return "part1";
|
str = "part1";
|
||||||
|
break;
|
||||||
|
|
||||||
case ModelSpecialMark::Part2:
|
case ModelSpecialMark::Part2:
|
||||||
return "part2";
|
str = "part2";
|
||||||
|
break;
|
||||||
|
|
||||||
case ModelSpecialMark::Part3:
|
case ModelSpecialMark::Part3:
|
||||||
return "part3";
|
str = "part3";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModelOutput::WriteBinaryModel(const CModel& model, std::ostream &stream)
|
void ModelOutput::WriteBinaryModel(const CModel& model, std::ostream &stream)
|
||||||
|
|
|
@ -1247,7 +1247,7 @@ void CAutoBase::FreezeCargo(bool freeze)
|
||||||
if ( obj == m_object ) continue; // yourself?
|
if ( obj == m_object ) continue; // yourself?
|
||||||
if (IsObjectBeingTransported(obj)) continue;
|
if (IsObjectBeingTransported(obj)) continue;
|
||||||
|
|
||||||
Math::Vector oPos = obj->GetPosition(0);
|
Math::Vector oPos = obj->GetPosition();
|
||||||
float dist = Math::DistanceProjected(m_pos, oPos);
|
float dist = Math::DistanceProjected(m_pos, oPos);
|
||||||
if ( dist < 32.0f )
|
if ( dist < 32.0f )
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
CObject::CObject(int id, ObjectType type)
|
CObject::CObject(int id, ObjectType type)
|
||||||
: m_id(id)
|
: m_id(id)
|
||||||
, m_type(type)
|
, m_type(type)
|
||||||
|
, m_position(0.0f, 0.0f, 0.0f)
|
||||||
|
, m_rotation(0.0f, 0.0f, 0.0f)
|
||||||
|
, m_scale(1.0f, 1.0f, 1.0f)
|
||||||
{
|
{
|
||||||
m_implementedInterfaces.fill(false);
|
m_implementedInterfaces.fill(false);
|
||||||
}
|
}
|
||||||
|
@ -52,6 +55,21 @@ std::vector<CrashSphere> CObject::GetAllCrashSpheres()
|
||||||
return allCrashSpheres;
|
return allCrashSpheres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Math::Vector CObject::GetPosition() const
|
||||||
|
{
|
||||||
|
return m_position;
|
||||||
|
}
|
||||||
|
|
||||||
|
Math::Vector CObject::GetRotation() const
|
||||||
|
{
|
||||||
|
return m_rotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
Math::Vector CObject::GetScale() const
|
||||||
|
{
|
||||||
|
return m_scale;
|
||||||
|
}
|
||||||
|
|
||||||
int CObject::GetCrashSphereCount()
|
int CObject::GetCrashSphereCount()
|
||||||
{
|
{
|
||||||
return m_crashSpheres.size();
|
return m_crashSpheres.size();
|
||||||
|
|
|
@ -85,6 +85,14 @@ public:
|
||||||
return m_implementedInterfaces[static_cast<int>(type)];
|
return m_implementedInterfaces[static_cast<int>(type)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Returns current object's position
|
||||||
|
virtual Math::Vector GetPosition() const;
|
||||||
|
using COldObjectInterface::GetPosition;
|
||||||
|
//! Returns current object's rotation (Euler angles)
|
||||||
|
virtual Math::Vector GetRotation() const;
|
||||||
|
//! Returns current object's scale
|
||||||
|
virtual Math::Vector GetScale() const;
|
||||||
|
|
||||||
//! Sets crash spheres for object
|
//! Sets crash spheres for object
|
||||||
void SetCrashSpheres(const std::vector<Gfx::ModelCrashSphere>& crashSpheres);
|
void SetCrashSpheres(const std::vector<Gfx::ModelCrashSphere>& crashSpheres);
|
||||||
//! Adds a new crash sphere
|
//! Adds a new crash sphere
|
||||||
|
@ -120,6 +128,9 @@ protected:
|
||||||
const int m_id; //!< unique identifier
|
const int m_id; //!< unique identifier
|
||||||
ObjectType m_type; //!< object type
|
ObjectType m_type; //!< object type
|
||||||
ObjectInterfaceTypes m_implementedInterfaces; //!< interfaces that the object implements
|
ObjectInterfaceTypes m_implementedInterfaces; //!< interfaces that the object implements
|
||||||
|
Math::Vector m_position;
|
||||||
|
Math::Vector m_rotation;
|
||||||
|
Math::Vector m_scale;
|
||||||
std::vector<CrashSphere> m_crashSpheres; //!< crash spheres
|
std::vector<CrashSphere> m_crashSpheres; //!< crash spheres
|
||||||
Math::Sphere m_cameraCollisionSphere;
|
Math::Sphere m_cameraCollisionSphere;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1274,7 +1274,7 @@ void COldObject::SetPosition(int part, const Math::Vector &pos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Vector COldObject::GetPosition(int part)
|
Math::Vector COldObject::GetPosition(int part) const
|
||||||
{
|
{
|
||||||
return m_objectPart[part].position;
|
return m_objectPart[part].position;
|
||||||
}
|
}
|
||||||
|
@ -1292,7 +1292,7 @@ void COldObject::SetAngle(int part, const Math::Vector &angle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Vector COldObject::GetAngle(int part)
|
Math::Vector COldObject::GetAngle(int part) const
|
||||||
{
|
{
|
||||||
return m_objectPart[part].angle;
|
return m_objectPart[part].angle;
|
||||||
}
|
}
|
||||||
|
@ -1366,7 +1366,7 @@ void COldObject::SetZoom(int part, Math::Vector zoom)
|
||||||
m_objectPart[part].zoom.z != 1.0f );
|
m_objectPart[part].zoom.z != 1.0f );
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Vector COldObject::GetZoom(int part)
|
Math::Vector COldObject::GetZoom(int part) const
|
||||||
{
|
{
|
||||||
return m_objectPart[part].zoom;
|
return m_objectPart[part].zoom;
|
||||||
}
|
}
|
||||||
|
@ -3433,3 +3433,19 @@ void COldObject::DeleteDeselList(CObject* pObj)
|
||||||
m_totalDesectList = j;
|
m_totalDesectList = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Math::Vector COldObject::GetPosition() const
|
||||||
|
{
|
||||||
|
return GetPosition(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Math::Vector COldObject::GetRotation() const
|
||||||
|
{
|
||||||
|
return GetAngle(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Math::Vector COldObject::GetScale() const
|
||||||
|
{
|
||||||
|
return GetZoom(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -126,9 +126,9 @@ public:
|
||||||
Math::Vector GetTilt() override;
|
Math::Vector GetTilt() override;
|
||||||
|
|
||||||
void SetPosition(int part, const Math::Vector &pos) override;
|
void SetPosition(int part, const Math::Vector &pos) override;
|
||||||
Math::Vector GetPosition(int part) override;
|
Math::Vector GetPosition(int part) const override;
|
||||||
void SetAngle(int part, const Math::Vector &angle) override;
|
void SetAngle(int part, const Math::Vector &angle) override;
|
||||||
Math::Vector GetAngle(int part) override;
|
Math::Vector GetAngle(int part) const override;
|
||||||
void SetAngleY(int part, float angle) override;
|
void SetAngleY(int part, float angle) override;
|
||||||
void SetAngleX(int part, float angle) override;
|
void SetAngleX(int part, float angle) override;
|
||||||
void SetAngleZ(int part, float angle) override;
|
void SetAngleZ(int part, float angle) override;
|
||||||
|
@ -137,7 +137,7 @@ public:
|
||||||
float GetAngleZ(int part) override;
|
float GetAngleZ(int part) override;
|
||||||
void SetZoom(int part, float zoom) override;
|
void SetZoom(int part, float zoom) override;
|
||||||
void SetZoom(int part, Math::Vector zoom) override;
|
void SetZoom(int part, Math::Vector zoom) override;
|
||||||
Math::Vector GetZoom(int part) override;
|
Math::Vector GetZoom(int part) const override;
|
||||||
void SetZoomX(int part, float zoom) override;
|
void SetZoomX(int part, float zoom) override;
|
||||||
float GetZoomX(int part) override;
|
float GetZoomX(int part) override;
|
||||||
void SetZoomY(int part, float zoom) override;
|
void SetZoomY(int part, float zoom) override;
|
||||||
|
@ -310,6 +310,10 @@ public:
|
||||||
void SetInfoReturn(float value) override;
|
void SetInfoReturn(float value) override;
|
||||||
float GetInfoReturn() override;
|
float GetInfoReturn() override;
|
||||||
|
|
||||||
|
Math::Vector GetPosition() const override;
|
||||||
|
Math::Vector GetRotation() const override;
|
||||||
|
Math::Vector GetScale() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool EventFrame(const Event &event);
|
bool EventFrame(const Event &event);
|
||||||
void VirusFrame(float rTime);
|
void VirusFrame(float rTime);
|
||||||
|
|
|
@ -163,7 +163,7 @@ void COldObjectInterface::SetPosition(int part, const Math::Vector &pos)
|
||||||
throw std::logic_error("SetPosition: not implemented!");
|
throw std::logic_error("SetPosition: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Vector COldObjectInterface::GetPosition(int part)
|
Math::Vector COldObjectInterface::GetPosition(int part) const
|
||||||
{
|
{
|
||||||
throw std::logic_error("GetPosition: not implemented!");
|
throw std::logic_error("GetPosition: not implemented!");
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@ void COldObjectInterface::SetAngle(int part, const Math::Vector &angle)
|
||||||
throw std::logic_error("SetAngle: not implemented!");
|
throw std::logic_error("SetAngle: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Vector COldObjectInterface::GetAngle(int part)
|
Math::Vector COldObjectInterface::GetAngle(int part) const
|
||||||
{
|
{
|
||||||
throw std::logic_error("GetAngle: not implemented!");
|
throw std::logic_error("GetAngle: not implemented!");
|
||||||
}
|
}
|
||||||
|
@ -218,7 +218,7 @@ void COldObjectInterface::SetZoom(int part, Math::Vector zoom)
|
||||||
throw std::logic_error("SetZoom: not implemented!");
|
throw std::logic_error("SetZoom: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Vector COldObjectInterface::GetZoom(int part)
|
Math::Vector COldObjectInterface::GetZoom(int part) const
|
||||||
{
|
{
|
||||||
throw std::logic_error("GetZoom: not implemented!");
|
throw std::logic_error("GetZoom: not implemented!");
|
||||||
}
|
}
|
||||||
|
@ -646,7 +646,9 @@ void COldObjectInterface::SetExploding(bool bExplo)
|
||||||
|
|
||||||
bool COldObjectInterface::IsExploding()
|
bool COldObjectInterface::IsExploding()
|
||||||
{
|
{
|
||||||
throw std::logic_error("IsExploding: not implemented!");
|
// TODO: temporary hack
|
||||||
|
return false;
|
||||||
|
//throw std::logic_error("IsExploding: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void COldObjectInterface::SetLock(bool bLock)
|
void COldObjectInterface::SetLock(bool bLock)
|
||||||
|
@ -663,12 +665,16 @@ bool COldObjectInterface::GetLock()
|
||||||
|
|
||||||
void COldObjectInterface::SetSpaceshipCargo(bool bCargo)
|
void COldObjectInterface::SetSpaceshipCargo(bool bCargo)
|
||||||
{
|
{
|
||||||
throw std::logic_error("SetSpaceshipCargo: not implemented!");
|
// TODO: temporary hack
|
||||||
|
return;
|
||||||
|
//throw std::logic_error("SetSpaceshipCargo: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool COldObjectInterface::IsSpaceshipCargo()
|
bool COldObjectInterface::IsSpaceshipCargo()
|
||||||
{
|
{
|
||||||
throw std::logic_error("IsSpaceshipCargo: not implemented!");
|
// TODO: temporary hack
|
||||||
|
return false;
|
||||||
|
//throw std::logic_error("IsSpaceshipCargo: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void COldObjectInterface::SetBurn(bool bBurn)
|
void COldObjectInterface::SetBurn(bool bBurn)
|
||||||
|
@ -678,7 +684,9 @@ void COldObjectInterface::SetBurn(bool bBurn)
|
||||||
|
|
||||||
bool COldObjectInterface::GetBurn()
|
bool COldObjectInterface::GetBurn()
|
||||||
{
|
{
|
||||||
throw std::logic_error("GetBurn: not implemented!");
|
// TODO: temporary hack
|
||||||
|
return false;
|
||||||
|
//throw std::logic_error("GetBurn: not implemented!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void COldObjectInterface::SetDead(bool bDead)
|
void COldObjectInterface::SetDead(bool bDead)
|
||||||
|
|
|
@ -112,9 +112,9 @@ public:
|
||||||
virtual Math::Vector GetTilt();
|
virtual Math::Vector GetTilt();
|
||||||
|
|
||||||
virtual void SetPosition(int part, const Math::Vector &pos);
|
virtual void SetPosition(int part, const Math::Vector &pos);
|
||||||
virtual Math::Vector GetPosition(int part);
|
virtual Math::Vector GetPosition(int part) const;
|
||||||
virtual void SetAngle(int part, const Math::Vector &angle);
|
virtual void SetAngle(int part, const Math::Vector &angle);
|
||||||
virtual Math::Vector GetAngle(int part);
|
virtual Math::Vector GetAngle(int part) const;
|
||||||
virtual void SetAngleY(int part, float angle);
|
virtual void SetAngleY(int part, float angle);
|
||||||
virtual void SetAngleX(int part, float angle);
|
virtual void SetAngleX(int part, float angle);
|
||||||
virtual void SetAngleZ(int part, float angle);
|
virtual void SetAngleZ(int part, float angle);
|
||||||
|
@ -123,7 +123,7 @@ public:
|
||||||
virtual float GetAngleZ(int part);
|
virtual float GetAngleZ(int part);
|
||||||
virtual void SetZoom(int part, float zoom);
|
virtual void SetZoom(int part, float zoom);
|
||||||
virtual void SetZoom(int part, Math::Vector zoom);
|
virtual void SetZoom(int part, Math::Vector zoom);
|
||||||
virtual Math::Vector GetZoom(int part);
|
virtual Math::Vector GetZoom(int part) const;
|
||||||
virtual void SetZoomX(int part, float zoom);
|
virtual void SetZoomX(int part, float zoom);
|
||||||
virtual float GetZoomX(int part);
|
virtual float GetZoomX(int part);
|
||||||
virtual void SetZoomY(int part, float zoom);
|
virtual void SetZoomY(int part, float zoom);
|
||||||
|
|
|
@ -2546,9 +2546,12 @@ void CRobotMain::AbortMovie()
|
||||||
{
|
{
|
||||||
for (CObject* obj : m_objMan->GetAllObjects())
|
for (CObject* obj : m_objMan->GetAllObjects())
|
||||||
{
|
{
|
||||||
CAuto* automat = obj->GetAuto();
|
if (obj->Implements(ObjectInterfaceType::Old))
|
||||||
if (automat != 0)
|
{
|
||||||
automat->Abort();
|
CAuto* automat = obj->GetAuto();
|
||||||
|
if (automat != 0)
|
||||||
|
automat->Abort();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_app->SetMouseMode(MOUSE_ENGINE);
|
m_app->SetMouseMode(MOUSE_ENGINE);
|
||||||
|
@ -4831,38 +4834,42 @@ void CRobotMain::IOWriteObject(CLevelParserLine* line, CObject* obj)
|
||||||
|
|
||||||
line->AddParam("type", CLevelParserParamUPtr{new CLevelParserParam(obj->GetType())});
|
line->AddParam("type", CLevelParserParamUPtr{new CLevelParserParam(obj->GetType())});
|
||||||
line->AddParam("id", CLevelParserParamUPtr{new CLevelParserParam(obj->GetID())});
|
line->AddParam("id", CLevelParserParamUPtr{new CLevelParserParam(obj->GetID())});
|
||||||
line->AddParam("pos", CLevelParserParamUPtr{new CLevelParserParam(obj->GetPosition(0)/g_unit)});
|
line->AddParam("pos", CLevelParserParamUPtr{new CLevelParserParam(obj->GetPosition()/g_unit)});
|
||||||
line->AddParam("angle", CLevelParserParamUPtr{new CLevelParserParam(obj->GetAngle(0)/(Math::PI/180.0f))});
|
line->AddParam("angle", CLevelParserParamUPtr{new CLevelParserParam(obj->GetRotation() * Math::RAD_TO_DEG)});
|
||||||
line->AddParam("zoom", CLevelParserParamUPtr{new CLevelParserParam(obj->GetZoom(0))});
|
line->AddParam("zoom", CLevelParserParamUPtr{new CLevelParserParam(obj->GetScale())});
|
||||||
|
|
||||||
Math::Vector pos;
|
if (obj->Implements(ObjectInterfaceType::Old))
|
||||||
for (int i = 1; i < OBJECTMAXPART; i++)
|
|
||||||
{
|
{
|
||||||
if (obj->GetObjectRank(i) == -1) continue;
|
Math::Vector pos;
|
||||||
|
for (int i = 1; i < OBJECTMAXPART; i++)
|
||||||
pos = obj->GetPosition(i);
|
|
||||||
if (pos.x != 0.0f || pos.y != 0.0f || pos.z != 0.0f)
|
|
||||||
{
|
{
|
||||||
pos /= g_unit;
|
if (obj->GetObjectRank(i) == -1) continue;
|
||||||
line->AddParam("p" + boost::lexical_cast<std::string>(i), CLevelParserParamUPtr{new CLevelParserParam(pos)});
|
|
||||||
|
pos = obj->GetPosition(i);
|
||||||
|
if (pos.x != 0.0f || pos.y != 0.0f || pos.z != 0.0f)
|
||||||
|
{
|
||||||
|
pos /= g_unit;
|
||||||
|
line->AddParam("p" + boost::lexical_cast<std::string>(i), CLevelParserParamUPtr{new CLevelParserParam(pos)});
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = obj->GetAngle(i);
|
||||||
|
if (pos.x != 0.0f || pos.y != 0.0f || pos.z != 0.0f)
|
||||||
|
{
|
||||||
|
pos /= (Math::PI/180.0f);
|
||||||
|
line->AddParam("a" + boost::lexical_cast<std::string>(i), CLevelParserParamUPtr{new CLevelParserParam(pos)});
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = obj->GetZoom(i);
|
||||||
|
if (pos.x != 1.0f || pos.y != 1.0f || pos.z != 1.0f)
|
||||||
|
{
|
||||||
|
line->AddParam("z" + boost::lexical_cast<std::string>(i), CLevelParserParamUPtr{new CLevelParserParam(pos)});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = obj->GetAngle(i);
|
line->AddParam("trainer", CLevelParserParamUPtr{new CLevelParserParam(obj->GetTrainer())});
|
||||||
if (pos.x != 0.0f || pos.y != 0.0f || pos.z != 0.0f)
|
line->AddParam("option", CLevelParserParamUPtr{new CLevelParserParam(obj->GetOption())});
|
||||||
{
|
|
||||||
pos /= (Math::PI/180.0f);
|
|
||||||
line->AddParam("a" + boost::lexical_cast<std::string>(i), CLevelParserParamUPtr{new CLevelParserParam(pos)});
|
|
||||||
}
|
|
||||||
|
|
||||||
pos = obj->GetZoom(i);
|
|
||||||
if (pos.x != 1.0f || pos.y != 1.0f || pos.z != 1.0f)
|
|
||||||
{
|
|
||||||
line->AddParam("z" + boost::lexical_cast<std::string>(i), CLevelParserParamUPtr{new CLevelParserParam(pos)});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
line->AddParam("trainer", CLevelParserParamUPtr{new CLevelParserParam(obj->GetTrainer())});
|
|
||||||
line->AddParam("option", CLevelParserParamUPtr{new CLevelParserParam(obj->GetOption())});
|
|
||||||
if (obj == m_infoObject)
|
if (obj == m_infoObject)
|
||||||
line->AddParam("select", CLevelParserParamUPtr{new CLevelParserParam(1)});
|
line->AddParam("select", CLevelParserParamUPtr{new CLevelParserParam(1)});
|
||||||
|
|
||||||
|
@ -5036,33 +5043,37 @@ CObject* CRobotMain::IOReadObject(CLevelParserLine *line, const char* filename,
|
||||||
int option = line->GetParam("option")->AsInt(0);
|
int option = line->GetParam("option")->AsInt(0);
|
||||||
|
|
||||||
CObject* obj = m_objMan->CreateObject(pos, dir.y, type, 0.0f, 1.0f, 0.0f, trainer, toy, option, id);
|
CObject* obj = m_objMan->CreateObject(pos, dir.y, type, 0.0f, 1.0f, 0.0f, trainer, toy, option, id);
|
||||||
obj->SetDefRank(objRank);
|
|
||||||
obj->SetPosition(0, pos);
|
|
||||||
obj->SetAngle(0, dir);
|
|
||||||
|
|
||||||
if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f)
|
if (obj->Implements(ObjectInterfaceType::Old))
|
||||||
obj->SetZoom(0, zoom);
|
|
||||||
|
|
||||||
for (int i = 1; i < OBJECTMAXPART; i++)
|
|
||||||
{
|
{
|
||||||
if (obj->GetObjectRank(i) == -1) continue;
|
obj->SetDefRank(objRank);
|
||||||
|
obj->SetPosition(0, pos);
|
||||||
|
obj->SetAngle(0, dir);
|
||||||
|
|
||||||
pos = line->GetParam(std::string("p")+boost::lexical_cast<std::string>(i))->AsPoint(Math::Vector());
|
|
||||||
if (pos.x != 0.0f || pos.y != 0.0f || pos.z != 0.0f)
|
|
||||||
{
|
|
||||||
obj->SetPosition(i, pos*g_unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
dir = line->GetParam(std::string("a")+boost::lexical_cast<std::string>(i))->AsPoint(Math::Vector());
|
|
||||||
if (dir.x != 0.0f || dir.y != 0.0f || dir.z != 0.0f)
|
|
||||||
{
|
|
||||||
obj->SetAngle(i, dir*(Math::PI/180.0f));
|
|
||||||
}
|
|
||||||
|
|
||||||
zoom = line->GetParam(std::string("z")+boost::lexical_cast<std::string>(i))->AsPoint(Math::Vector());
|
|
||||||
if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f)
|
if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f)
|
||||||
|
obj->SetZoom(0, zoom);
|
||||||
|
|
||||||
|
for (int i = 1; i < OBJECTMAXPART; i++)
|
||||||
{
|
{
|
||||||
obj->SetZoom(i, zoom);
|
if (obj->GetObjectRank(i) == -1) continue;
|
||||||
|
|
||||||
|
pos = line->GetParam(std::string("p")+boost::lexical_cast<std::string>(i))->AsPoint(Math::Vector());
|
||||||
|
if (pos.x != 0.0f || pos.y != 0.0f || pos.z != 0.0f)
|
||||||
|
{
|
||||||
|
obj->SetPosition(i, pos*g_unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
dir = line->GetParam(std::string("a")+boost::lexical_cast<std::string>(i))->AsPoint(Math::Vector());
|
||||||
|
if (dir.x != 0.0f || dir.y != 0.0f || dir.z != 0.0f)
|
||||||
|
{
|
||||||
|
obj->SetAngle(i, dir*(Math::PI/180.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
zoom = line->GetParam(std::string("z")+boost::lexical_cast<std::string>(i))->AsPoint(Math::Vector());
|
||||||
|
if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f)
|
||||||
|
{
|
||||||
|
obj->SetZoom(i, zoom);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5173,10 +5184,13 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot)
|
||||||
{
|
{
|
||||||
if (IsObjectBeingTransported(obj)) continue;
|
if (IsObjectBeingTransported(obj)) continue;
|
||||||
|
|
||||||
objRank = obj->GetDefRank();
|
if (obj->Implements(ObjectInterfaceType::Programmable))
|
||||||
if (objRank == -1) continue;
|
{
|
||||||
|
objRank = obj->GetDefRank();
|
||||||
|
if (objRank == -1) continue;
|
||||||
|
|
||||||
LoadFileScript(obj, filename, objRank, nbError);
|
LoadFileScript(obj, filename, objRank, nbError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (nbError > 0 && nbError != lastError);
|
while (nbError > 0 && nbError != lastError);
|
||||||
|
|
|
@ -48,6 +48,9 @@ CStaticObject::CStaticObject(int id,
|
||||||
const Gfx::CModelMesh* mesh = model.GetMesh("main");
|
const Gfx::CModelMesh* mesh = model.GetMesh("main");
|
||||||
assert(mesh != nullptr);
|
assert(mesh != nullptr);
|
||||||
|
|
||||||
|
m_position = position;
|
||||||
|
m_rotation.y = angleY;
|
||||||
|
|
||||||
Math::Matrix worldMatrix = ComputeWorldMatrix(position, angleY);
|
Math::Matrix worldMatrix = ComputeWorldMatrix(position, angleY);
|
||||||
m_meshHandle = m_engine->AddStaticMesh(key, mesh, worldMatrix);
|
m_meshHandle = m_engine->AddStaticMesh(key, mesh, worldMatrix);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue