half of task compile.
parent
e57be247c2
commit
1bb1eb7b87
|
@ -124,33 +124,33 @@ graphics/opengl/gldevice.cpp
|
||||||
# object/motion/motiontoto.cpp
|
# object/motion/motiontoto.cpp
|
||||||
# object/motion/motionvehicle.cpp
|
# object/motion/motionvehicle.cpp
|
||||||
# object/motion/motionworm.cpp
|
# object/motion/motionworm.cpp
|
||||||
# object/object.cpp
|
object/object.cpp
|
||||||
# object/robotmain.cpp
|
# object/robotmain.cpp
|
||||||
# object/task/task.cpp
|
object/task/task.cpp
|
||||||
# object/task/taskadvance.cpp
|
object/task/taskadvance.cpp
|
||||||
# object/task/taskbuild.cpp
|
object/task/taskbuild.cpp
|
||||||
# object/task/taskfire.cpp
|
object/task/taskfire.cpp
|
||||||
# object/task/taskfireant.cpp
|
object/task/taskfireant.cpp
|
||||||
# object/task/taskflag.cpp
|
object/task/taskflag.cpp
|
||||||
# object/task/taskgoto.cpp
|
object/task/taskgoto.cpp
|
||||||
# object/task/taskgungoal.cpp
|
object/task/taskgungoal.cpp
|
||||||
# object/task/taskinfo.cpp
|
object/task/taskinfo.cpp
|
||||||
# object/task/taskmanager.cpp
|
object/task/taskmanager.cpp
|
||||||
# object/task/taskmanip.cpp
|
object/task/taskmanip.cpp
|
||||||
# object/task/taskpen.cpp
|
object/task/taskpen.cpp
|
||||||
# object/task/taskrecover.cpp
|
object/task/taskrecover.cpp
|
||||||
# object/task/taskreset.cpp
|
object/task/taskreset.cpp
|
||||||
# object/task/tasksearch.cpp
|
object/task/tasksearch.cpp
|
||||||
# object/task/taskshield.cpp
|
object/task/taskshield.cpp
|
||||||
# object/task/taskspiderexplo.cpp
|
object/task/taskspiderexplo.cpp
|
||||||
# object/task/tasktake.cpp
|
object/task/tasktake.cpp
|
||||||
# object/task/taskterraform.cpp
|
object/task/taskterraform.cpp
|
||||||
# object/task/taskturn.cpp
|
object/task/taskturn.cpp
|
||||||
# object/task/taskwait.cpp
|
object/task/taskwait.cpp
|
||||||
# physics/physics.cpp
|
physics/physics.cpp
|
||||||
# script/cbottoken.cpp
|
script/cbottoken.cpp
|
||||||
# script/cmdtoken.cpp
|
script/cmdtoken.cpp
|
||||||
# script/script.cpp
|
script/script.cpp
|
||||||
# sound/sound.cpp
|
# sound/sound.cpp
|
||||||
# ui/button.cpp
|
# ui/button.cpp
|
||||||
# ui/check.cpp
|
# ui/check.cpp
|
||||||
|
|
|
@ -66,6 +66,7 @@ struct Light
|
||||||
float attenuation2;
|
float attenuation2;
|
||||||
//! Angle of spotlight cone (0-90 degrees)
|
//! Angle of spotlight cone (0-90 degrees)
|
||||||
float spotAngle;
|
float spotAngle;
|
||||||
|
|
||||||
//! Intensity of spotlight (0 = uniform; 128 = most intense)
|
//! Intensity of spotlight (0 = uniform; 128 = most intense)
|
||||||
float spotIntensity;
|
float spotIntensity;
|
||||||
|
|
||||||
|
|
|
@ -28,67 +28,6 @@
|
||||||
#include "object/object.h"
|
#include "object/object.h"
|
||||||
#include "physics/physics.h"
|
#include "physics/physics.h"
|
||||||
|
|
||||||
|
|
||||||
// TODO temporary stubs for CObject and CPhysics
|
|
||||||
|
|
||||||
void CObject::SetTransparency(float)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CObject* CObject::GetFret()
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CObject* CObject::GetPower()
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
CObject* CObject::GetTruck()
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectType CObject::GetType()
|
|
||||||
{
|
|
||||||
return OBJECT_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CObject::SetGunGoalH(float)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CObject::GetGlobalSphere(Math::Vector &pos, float &radius)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
float CObject::GetAngleY(int)
|
|
||||||
{
|
|
||||||
return 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
Math::Vector CObject::GetPosition(int)
|
|
||||||
{
|
|
||||||
return Math::Vector();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CObject::SetViewFromHere(Math::Vector &eye, float &dirH, float &dirV,
|
|
||||||
Math::Vector &lookat, Math::Vector &upVec,
|
|
||||||
Gfx::CameraType type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CPhysics* CObject::GetPhysics()
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CPhysics::GetLand()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Changes the level of transparency of an object and objects transported (battery & cargo)
|
//! Changes the level of transparency of an object and objects transported (battery & cargo)
|
||||||
void SetTransparency(CObject* obj, float value)
|
void SetTransparency(CObject* obj, float value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,9 +16,6 @@
|
||||||
|
|
||||||
// taskadvance.cpp
|
// taskadvance.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskadvance.h"
|
#include "object/task/taskadvance.h"
|
||||||
|
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
|
@ -45,13 +42,13 @@ CTaskAdvance::~CTaskAdvance()
|
||||||
|
|
||||||
bool CTaskAdvance::EventProcess(const Event &event)
|
bool CTaskAdvance::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
|
|
||||||
m_fixTime += event.rTime;
|
m_fixTime += event.rTime;
|
||||||
|
|
||||||
// Momentarily stationary object (ant on the back)?
|
// Momentarily stationary object (ant on the back)?
|
||||||
if ( m_object->RetFixed() )
|
if ( m_object->GetFixed() )
|
||||||
{
|
{
|
||||||
m_physics->SetMotorSpeedX(0.0f); // stops the advance
|
m_physics->SetMotorSpeedX(0.0f); // stops the advance
|
||||||
m_physics->SetMotorSpeedZ(0.0f); // stops the rotation
|
m_physics->SetMotorSpeedZ(0.0f); // stops the rotation
|
||||||
|
@ -70,12 +67,12 @@ Error CTaskAdvance::Start(float length)
|
||||||
{
|
{
|
||||||
m_direction = (length>=0.0f)?1.0f:-1.0f;
|
m_direction = (length>=0.0f)?1.0f:-1.0f;
|
||||||
m_totalLength = fabs(length);
|
m_totalLength = fabs(length);
|
||||||
m_advanceLength = m_physics->RetLinLength(length);
|
m_advanceLength = m_physics->GetLinLength(length);
|
||||||
m_startPos = m_object->RetPosition(0);
|
m_startPos = m_object->GetPosition(0);
|
||||||
m_lastDist = 0.0f;
|
m_lastDist = 0.0f;
|
||||||
m_fixTime = 0.0f;
|
m_fixTime = 0.0f;
|
||||||
|
|
||||||
m_timeLimit = m_physics->RetLinTimeLength(m_totalLength, m_direction)*3.0f;
|
m_timeLimit = m_physics->GetLinTimeLength(m_totalLength, m_direction)*3.0f;
|
||||||
if ( m_timeLimit < 2.0f ) m_timeLimit = 2.0f;
|
if ( m_timeLimit < 2.0f ) m_timeLimit = 2.0f;
|
||||||
|
|
||||||
m_physics->SetMotorSpeedX(m_direction*1.0f); // forward/backward
|
m_physics->SetMotorSpeedX(m_direction*1.0f); // forward/backward
|
||||||
|
@ -93,7 +90,7 @@ Error CTaskAdvance::IsEnded()
|
||||||
Math::Vector pos;
|
Math::Vector pos;
|
||||||
float length;
|
float length;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
|
|
||||||
if ( m_bError )
|
if ( m_bError )
|
||||||
{
|
{
|
||||||
|
@ -106,7 +103,7 @@ Error CTaskAdvance::IsEnded()
|
||||||
return ERR_MOVE_IMPOSSIBLE;
|
return ERR_MOVE_IMPOSSIBLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = m_object->RetPosition(0);
|
pos = m_object->GetPosition(0);
|
||||||
length = Math::DistanceProjected(pos, m_startPos);
|
length = Math::DistanceProjected(pos, m_startPos);
|
||||||
|
|
||||||
if ( length > m_lastDist ) // forward?
|
if ( length > m_lastDist ) // forward?
|
||||||
|
|
|
@ -16,15 +16,14 @@
|
||||||
|
|
||||||
// taskbuild.cpp
|
// taskbuild.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskbuild.h"
|
#include "object/task/taskbuild.h"
|
||||||
|
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "old/light.h"
|
#include "graphics/core/color.h"
|
||||||
#include "old/terrain.h"
|
#include "graphics/core/light.h"
|
||||||
#include "old/water.h"
|
#include "graphics/engine/lightman.h"
|
||||||
|
#include "graphics/engine/terrain.h"
|
||||||
|
#include "graphics/engine/water.h"
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "object/auto/auto.h"
|
#include "object/auto/auto.h"
|
||||||
#include "object/motion/motionhuman.h"
|
#include "object/motion/motionhuman.h"
|
||||||
|
@ -32,9 +31,6 @@
|
||||||
#include "physics/physics.h"
|
#include "physics/physics.h"
|
||||||
#include "ui/displaytext.h"
|
#include "ui/displaytext.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Object's constructor.
|
// Object's constructor.
|
||||||
|
|
||||||
CTaskBuild::CTaskBuild(CInstanceManager* iMan, CObject* object)
|
CTaskBuild::CTaskBuild(CInstanceManager* iMan, CObject* object)
|
||||||
|
@ -68,7 +64,7 @@ CTaskBuild::~CTaskBuild()
|
||||||
for ( i=0 ; i<TBMAXLIGHT ; i++ )
|
for ( i=0 ; i<TBMAXLIGHT ; i++ )
|
||||||
{
|
{
|
||||||
if ( m_lightRank[i] == -1 ) continue;
|
if ( m_lightRank[i] == -1 ) continue;
|
||||||
m_light->DeleteLight(m_lightRank[i]);
|
m_lightMan->DeleteLight(m_lightRank[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +98,7 @@ bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle)
|
||||||
if ( m_type == OBJECT_INFO ) m_buildingHeight = 19.0f;
|
if ( m_type == OBJECT_INFO ) m_buildingHeight = 19.0f;
|
||||||
m_buildingHeight *= 0.25f;
|
m_buildingHeight *= 0.25f;
|
||||||
|
|
||||||
m_buildingPos = m_building->RetPosition(0);
|
m_buildingPos = m_building->GetPosition(0);
|
||||||
m_buildingPos.y -= m_buildingHeight;
|
m_buildingPos.y -= m_buildingHeight;
|
||||||
m_building->SetPosition(0, m_buildingPos);
|
m_building->SetPosition(0, m_buildingPos);
|
||||||
return true;
|
return true;
|
||||||
|
@ -112,21 +108,21 @@ bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle)
|
||||||
|
|
||||||
void CTaskBuild::CreateLight()
|
void CTaskBuild::CreateLight()
|
||||||
{
|
{
|
||||||
D3DLIGHT7 light;
|
Gfx::Light light;
|
||||||
D3DCOLORVALUE color;
|
Gfx::Color color;
|
||||||
Math::Vector center, pos, dir;
|
Math::Vector center, pos, dir;
|
||||||
Math::Point c, p;
|
Math::Point c, p;
|
||||||
float angle;
|
float angle;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ( !m_engine->RetLightMode() ) return;
|
if ( !m_engine->GetLightMode() ) return;
|
||||||
|
|
||||||
center = m_metal->RetPosition(0);
|
center = m_metal->GetPosition(0);
|
||||||
|
|
||||||
angle = 0;
|
angle = 0;
|
||||||
for ( i=0 ; i<TBMAXLIGHT ; i++ )
|
for ( i=0 ; i<TBMAXLIGHT ; i++ )
|
||||||
{
|
{
|
||||||
m_lightRank[i] = m_light->CreateLight();
|
m_lightRank[i] = m_lightMan->CreateLight();
|
||||||
if ( m_lightRank[i] == -1 ) continue;
|
if ( m_lightRank[i] == -1 ) continue;
|
||||||
|
|
||||||
c.x = center.x;
|
c.x = center.x;
|
||||||
|
@ -139,32 +135,32 @@ void CTaskBuild::CreateLight()
|
||||||
pos.y = center.y+40.0f;
|
pos.y = center.y+40.0f;
|
||||||
dir = center-pos;
|
dir = center-pos;
|
||||||
|
|
||||||
ZeroMemory( &light, sizeof(light) );
|
memset(&light, 0, sizeof(light));
|
||||||
light.dltType = D3DLIGHT_SPOT;
|
light.type = Gfx::LIGHT_SPOT;
|
||||||
light.dcvDiffuse.r = 0.0f;
|
light.diffuse.r = 0.0f;
|
||||||
light.dcvDiffuse.g = 0.0f;
|
light.diffuse.g = 0.0f;
|
||||||
light.dcvDiffuse.b = 0.0f; // white (invisible)
|
light.diffuse.b = 0.0f; // white (invisible)
|
||||||
light.dvPosition.x = pos.x;
|
light.position.x = pos.x;
|
||||||
light.dvPosition.y = pos.y;
|
light.position.y = pos.y;
|
||||||
light.dvPosition.z = pos.z;
|
light.position.z = pos.z;
|
||||||
light.dvDirection.x = dir.x;
|
light.direction.x = dir.x;
|
||||||
light.dvDirection.y = dir.y;
|
light.direction.y = dir.y;
|
||||||
light.dvDirection.z = dir.z;
|
light.direction.z = dir.z;
|
||||||
light.dvRange = D3DLIGHT_RANGE_MAX;
|
//TODO Is this value correct
|
||||||
light.dvFalloff = 1.0f;
|
light.spotIntensity = 128;
|
||||||
light.dvAttenuation0 = 1.0f;
|
light.attenuation0 = 1.0f;
|
||||||
light.dvAttenuation1 = 0.0f;
|
light.attenuation1 = 0.0f;
|
||||||
light.dvAttenuation2 = 0.0f;
|
light.attenuation2 = 0.0f;
|
||||||
light.dvTheta = 0.0f;
|
//TODO Is this value correct
|
||||||
light.dvPhi = Math::PI/4.0f;
|
light.spotAngle = 90;
|
||||||
m_light->SetLight(m_lightRank[i], light);
|
m_lightMan->SetLight(m_lightRank[i], light);
|
||||||
|
|
||||||
color.r = -1.0f;
|
color.r = -1.0f;
|
||||||
color.g = -1.0f;
|
color.g = -1.0f;
|
||||||
color.b = -0.5f; // violet
|
color.b = -0.5f; // violet
|
||||||
color.a = 0.0f;
|
color.a = 0.0f;
|
||||||
m_light->SetLightColor(m_lightRank[i], color);
|
m_lightMan->SetLightColor(m_lightRank[i], color);
|
||||||
m_light->SetLightColorSpeed(m_lightRank[i], 1.0f/((1.0f/m_speed)*0.25f));
|
m_lightMan->SetLightColorSpeed(m_lightRank[i], 1.0f/((1.0f/m_speed)*0.25f));
|
||||||
|
|
||||||
angle += (Math::PI*2.0f)/TBMAXLIGHT;
|
angle += (Math::PI*2.0f)/TBMAXLIGHT;
|
||||||
}
|
}
|
||||||
|
@ -176,8 +172,8 @@ void CTaskBuild::CreateLight()
|
||||||
|
|
||||||
void CTaskBuild::BlackLight()
|
void CTaskBuild::BlackLight()
|
||||||
{
|
{
|
||||||
D3DCOLORVALUE color;
|
Gfx::Color color;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for ( i=0 ; i<TBMAXLIGHT ; i++ )
|
for ( i=0 ; i<TBMAXLIGHT ; i++ )
|
||||||
{
|
{
|
||||||
|
@ -187,8 +183,8 @@ void CTaskBuild::BlackLight()
|
||||||
color.g = 0.0f;
|
color.g = 0.0f;
|
||||||
color.b = 0.0f; // white (invisible)
|
color.b = 0.0f; // white (invisible)
|
||||||
color.a = 0.0f;
|
color.a = 0.0f;
|
||||||
m_light->SetLightColor(m_lightRank[i], color);
|
m_lightMan->SetLightColor(m_lightRank[i], color);
|
||||||
m_light->SetLightColorSpeed(m_lightRank[i], 1.0f/((1.0f/m_speed)*0.75f));
|
m_lightMan->SetLightColorSpeed(m_lightRank[i], 1.0f/((1.0f/m_speed)*0.75f));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bBlack = true;
|
m_bBlack = true;
|
||||||
|
@ -203,8 +199,8 @@ bool CTaskBuild::EventProcess(const Event &event)
|
||||||
Math::Point dim;
|
Math::Point dim;
|
||||||
float a, g, cirSpeed, dist, linSpeed;
|
float a, g, cirSpeed, dist, linSpeed;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
m_time += event.rTime;
|
m_time += event.rTime;
|
||||||
|
@ -213,7 +209,7 @@ bool CTaskBuild::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_phase == TBP_TURN ) // preliminary rotation?
|
if ( m_phase == TBP_TURN ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
a = m_object->RetAngleY(0);
|
a = m_object->GetAngleY(0);
|
||||||
g = m_angleY;
|
g = m_angleY;
|
||||||
cirSpeed = Math::Direction(a, g)*1.0f;
|
cirSpeed = Math::Direction(a, g)*1.0f;
|
||||||
if ( cirSpeed > 1.0f ) cirSpeed = 1.0f;
|
if ( cirSpeed > 1.0f ) cirSpeed = 1.0f;
|
||||||
|
@ -225,7 +221,7 @@ bool CTaskBuild::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_phase == TBP_MOVE ) // preliminary forward/backward?
|
if ( m_phase == TBP_MOVE ) // preliminary forward/backward?
|
||||||
{
|
{
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_metal->RetPosition(0));
|
dist = Math::Distance(m_object->GetPosition(0), m_metal->GetPosition(0));
|
||||||
linSpeed = 0.0f;
|
linSpeed = 0.0f;
|
||||||
if ( dist > 30.0f ) linSpeed = 1.0f;
|
if ( dist > 30.0f ) linSpeed = 1.0f;
|
||||||
if ( dist < 30.0f ) linSpeed = -1.0f;
|
if ( dist < 30.0f ) linSpeed = -1.0f;
|
||||||
|
@ -258,8 +254,8 @@ bool CTaskBuild::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
m_bBuild = true;
|
m_bBuild = true;
|
||||||
|
|
||||||
pos = m_metal->RetPosition(0);
|
pos = m_metal->GetPosition(0);
|
||||||
a = m_object->RetAngleY(0);
|
a = m_object->GetAngleY(0);
|
||||||
if ( !CreateBuilding(pos, a+Math::PI) )
|
if ( !CreateBuilding(pos, a+Math::PI) )
|
||||||
{
|
{
|
||||||
m_metal->SetLock(false); // usable again
|
m_metal->SetLock(false); // usable again
|
||||||
|
@ -270,7 +266,7 @@ bool CTaskBuild::EventProcess(const Event &event)
|
||||||
m_camera->FlushEffect();
|
m_camera->FlushEffect();
|
||||||
Abort();
|
Abort();
|
||||||
m_bError = true;
|
m_bError = true;
|
||||||
m_displayText->DisplayError(ERR_TOOMANY, m_object->RetPosition(0));
|
m_displayText->DisplayError(ERR_TOOMANY, m_object->GetPosition(0));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
CreateLight();
|
CreateLight();
|
||||||
|
@ -295,32 +291,32 @@ bool CTaskBuild::EventProcess(const Event &event)
|
||||||
BlackLight();
|
BlackLight();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.05f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos = m_metal->RetPosition(0);
|
pos = m_metal->GetPosition(0);
|
||||||
speed.x = (Math::Rand()-0.5f)*20.0f;
|
speed.x = (Math::Rand()-0.5f)*20.0f;
|
||||||
speed.z = (Math::Rand()-0.5f)*20.0f;
|
speed.z = (Math::Rand()-0.5f)*20.0f;
|
||||||
speed.y = Math::Rand()*10.0f;
|
speed.y = Math::Rand()*10.0f;
|
||||||
dim.x = Math::Rand()*6.0f+4.0f;
|
dim.x = Math::Rand()*6.0f+4.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIFIRE);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIFIRE);
|
||||||
|
|
||||||
pos = Math::Vector(0.0f, 0.5f, 0.0f);
|
pos = Math::Vector(0.0f, 0.5f, 0.0f);
|
||||||
mat = m_object->RetWorldMatrix(14);
|
mat = m_object->GetWorldMatrix(14);
|
||||||
pos = Transform(*mat, pos);
|
pos = Transform(*mat, pos);
|
||||||
speed = m_metal->RetPosition(0);
|
speed = m_metal->GetPosition(0);
|
||||||
speed.x += (Math::Rand()-0.5f)*5.0f;
|
speed.x += (Math::Rand()-0.5f)*5.0f;
|
||||||
speed.z += (Math::Rand()-0.5f)*5.0f;
|
speed.z += (Math::Rand()-0.5f)*5.0f;
|
||||||
speed -= pos;
|
speed -= pos;
|
||||||
dim.x = 2.0f;
|
dim.x = 2.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIFIREZ);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIFIREZ);
|
||||||
|
|
||||||
if ( Math::Rand() < 0.3f )
|
if ( Math::Rand() < 0.3f )
|
||||||
{
|
{
|
||||||
m_sound->Play(SOUND_BUILD, m_object->RetPosition(0), 0.5f, 1.0f*Math::Rand()*1.5f);
|
m_sound->Play(SOUND_BUILD, m_object->GetPosition(0), 0.5f, 1.0f*Math::Rand()*1.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,25 +333,25 @@ Error CTaskBuild::Start(ObjectType type)
|
||||||
float iAngle, oAngle;
|
float iAngle, oAngle;
|
||||||
|
|
||||||
m_type = type;
|
m_type = type;
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
|
|
||||||
iAngle = m_object->RetAngleY(0);
|
iAngle = m_object->GetAngleY(0);
|
||||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||||
oAngle = iAngle;
|
oAngle = iAngle;
|
||||||
|
|
||||||
m_bError = true; // operation impossible
|
m_bError = true; // operation impossible
|
||||||
|
|
||||||
pos = m_object->RetPosition(0);
|
pos = m_object->GetPosition(0);
|
||||||
if ( pos.y < m_water->RetLevel() ) return ERR_BUILD_WATER;
|
if ( pos.y < m_water->GetLevel() ) return ERR_BUILD_WATER;
|
||||||
|
|
||||||
if ( !m_physics->RetLand() ) return ERR_BUILD_FLY;
|
if ( !m_physics->GetLand() ) return ERR_BUILD_FLY;
|
||||||
|
|
||||||
speed = m_physics->RetMotorSpeed();
|
speed = m_physics->GetMotorSpeed();
|
||||||
if ( speed.x != 0.0f ||
|
if ( speed.x != 0.0f ||
|
||||||
speed.z != 0.0f ) return ERR_BUILD_MOTOR;
|
speed.z != 0.0f ) return ERR_BUILD_MOTOR;
|
||||||
|
|
||||||
if ( m_object->RetFret() != 0 ) return ERR_MANIP_BUSY;
|
if ( m_object->GetFret() != 0 ) return ERR_MANIP_BUSY;
|
||||||
|
|
||||||
m_metal = SearchMetalObject(oAngle, 2.0f, 100.0f, Math::PI*0.25f, err);
|
m_metal = SearchMetalObject(oAngle, 2.0f, 100.0f, Math::PI*0.25f, err);
|
||||||
if ( err == ERR_BUILD_METALNEAR && m_metal != 0 )
|
if ( err == ERR_BUILD_METALNEAR && m_metal != 0 )
|
||||||
|
@ -375,9 +371,9 @@ Error CTaskBuild::Start(ObjectType type)
|
||||||
m_phase = TBP_TURN; // rotation necessary preliminary
|
m_phase = TBP_TURN; // rotation necessary preliminary
|
||||||
m_angleY = oAngle; // angle was reached
|
m_angleY = oAngle; // angle was reached
|
||||||
|
|
||||||
pv = m_object->RetPosition(0);
|
pv = m_object->GetPosition(0);
|
||||||
pv.y += 8.3f;
|
pv.y += 8.3f;
|
||||||
pm = m_metal->RetPosition(0);
|
pm = m_metal->GetPosition(0);
|
||||||
m_angleZ = Math::RotateAngle(Math::DistanceProjected(pv, pm), fabs(pv.y-pm.y));
|
m_angleZ = Math::RotateAngle(Math::DistanceProjected(pv, pm), fabs(pv.y-pm.y));
|
||||||
|
|
||||||
m_physics->SetFreeze(true); // it does not move
|
m_physics->SetFreeze(true); // it does not move
|
||||||
|
@ -394,27 +390,27 @@ Error CTaskBuild::IsEnded()
|
||||||
CAuto* automat;
|
CAuto* automat;
|
||||||
float angle, dist, time;
|
float angle, dist, time;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
|
|
||||||
if ( m_phase == TBP_TURN ) // preliminary rotation?
|
if ( m_phase == TBP_TURN ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
angle = m_object->RetAngleY(0);
|
angle = m_object->GetAngleY(0);
|
||||||
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
||||||
|
|
||||||
if ( Math::TestAngle(angle, m_angleY-Math::PI*0.01f, m_angleY+Math::PI*0.01f) )
|
if ( Math::TestAngle(angle, m_angleY-Math::PI*0.01f, m_angleY+Math::PI*0.01f) )
|
||||||
{
|
{
|
||||||
m_physics->SetMotorSpeedZ(0.0f);
|
m_physics->SetMotorSpeedZ(0.0f);
|
||||||
|
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_metal->RetPosition(0));
|
dist = Math::Distance(m_object->GetPosition(0), m_metal->GetPosition(0));
|
||||||
if ( dist > 30.0f )
|
if ( dist > 30.0f )
|
||||||
{
|
{
|
||||||
time = m_physics->RetLinTimeLength(dist-30.0f, 1.0f);
|
time = m_physics->GetLinTimeLength(dist-30.0f, 1.0f);
|
||||||
m_speed = 1.0f/time;
|
m_speed = 1.0f/time;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
time = m_physics->RetLinTimeLength(30.0f-dist, -1.0f);
|
time = m_physics->GetLinTimeLength(30.0f-dist, -1.0f);
|
||||||
m_speed = 1.0f/time;
|
m_speed = 1.0f/time;
|
||||||
}
|
}
|
||||||
m_phase = TBP_MOVE;
|
m_phase = TBP_MOVE;
|
||||||
|
@ -425,7 +421,7 @@ Error CTaskBuild::IsEnded()
|
||||||
|
|
||||||
if ( m_phase == TBP_MOVE ) // preliminary forward/backward?
|
if ( m_phase == TBP_MOVE ) // preliminary forward/backward?
|
||||||
{
|
{
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_metal->RetPosition(0));
|
dist = Math::Distance(m_object->GetPosition(0), m_metal->GetPosition(0));
|
||||||
|
|
||||||
if ( dist >= 25.0f && dist <= 35.0f )
|
if ( dist >= 25.0f && dist <= 35.0f )
|
||||||
{
|
{
|
||||||
|
@ -466,12 +462,12 @@ Error CTaskBuild::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||||
|
|
||||||
m_soundChannel = m_sound->Play(SOUND_TREMBLE, m_object->RetPosition(0), 0.0f, 1.0f, true);
|
m_soundChannel = m_sound->Play(SOUND_TREMBLE, m_object->GetPosition(0), 0.0f, 1.0f, true);
|
||||||
m_sound->AddEnvelope(m_soundChannel, 0.7f, 1.0f, 1.0f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(m_soundChannel, 0.7f, 1.0f, 1.0f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(m_soundChannel, 0.7f, 1.5f, 7.0f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(m_soundChannel, 0.7f, 1.5f, 7.0f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(m_soundChannel, 0.0f, 1.5f, 2.0f, SOPER_STOP);
|
m_sound->AddEnvelope(m_soundChannel, 0.0f, 1.5f, 2.0f, SOPER_STOP);
|
||||||
|
|
||||||
m_camera->StartEffect(CE_VIBRATION, m_metal->RetPosition(0), 1.0f);
|
m_camera->StartEffect(Gfx::CAM_EFFECT_VIBRATION, m_metal->GetPosition(0), 1.0f);
|
||||||
|
|
||||||
m_phase = TBP_BUILD;
|
m_phase = TBP_BUILD;
|
||||||
m_speed = 1.0f/10.f; // duration of 10s
|
m_speed = 1.0f/10.f; // duration of 10s
|
||||||
|
@ -482,7 +478,7 @@ Error CTaskBuild::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||||
|
|
||||||
DeleteMark(m_metal->RetPosition(0), 20.0f);
|
DeleteMark(m_metal->GetPosition(0), 20.0f);
|
||||||
|
|
||||||
m_metal->DeleteObject(); // removes the metal
|
m_metal->DeleteObject(); // removes the metal
|
||||||
delete m_metal;
|
delete m_metal;
|
||||||
|
@ -494,7 +490,7 @@ Error CTaskBuild::IsEnded()
|
||||||
m_main->CreateShortcuts();
|
m_main->CreateShortcuts();
|
||||||
m_displayText->DisplayError(INFO_BUILD, m_buildingPos, 10.0f, 50.0f);
|
m_displayText->DisplayError(INFO_BUILD, m_buildingPos, 10.0f, 50.0f);
|
||||||
|
|
||||||
automat = m_building->RetAuto();
|
automat = m_building->GetAuto();
|
||||||
if ( automat != 0 )
|
if ( automat != 0 )
|
||||||
{
|
{
|
||||||
automat->Init();
|
automat->Init();
|
||||||
|
@ -583,16 +579,16 @@ Error CTaskBuild::FlatFloor()
|
||||||
if ( m_type == OBJECT_INFO ) radius = 5.0f;
|
if ( m_type == OBJECT_INFO ) radius = 5.0f;
|
||||||
if ( radius == 0.0f ) return ERR_GENERIC;
|
if ( radius == 0.0f ) return ERR_GENERIC;
|
||||||
|
|
||||||
center = m_metal->RetPosition(0);
|
center = m_metal->GetPosition(0);
|
||||||
angle = m_terrain->RetFineSlope(center);
|
angle = m_terrain->GetFineSlope(center);
|
||||||
bLittleFlat = ( angle < FLATLIMIT );
|
bLittleFlat = ( angle < Gfx::TERRAIN_FLATLIMIT);
|
||||||
|
|
||||||
max = m_terrain->RetFlatZoneRadius(center, radius);
|
max = m_terrain->GetFlatZoneRadius(center, radius);
|
||||||
if ( max < radius ) // area too small?
|
if ( max < radius ) // area too small?
|
||||||
{
|
{
|
||||||
if ( bLittleFlat )
|
if ( bLittleFlat )
|
||||||
{
|
{
|
||||||
m_main->SetShowLimit(1, PARTILIMIT3, m_metal, center, max, 10.0f);
|
m_main->SetShowLimit(1, Gfx::PARTILIMIT3, m_metal, center, max, 10.0f);
|
||||||
}
|
}
|
||||||
return bLittleFlat?ERR_BUILD_FLATLIT:ERR_BUILD_FLAT;
|
return bLittleFlat?ERR_BUILD_FLATLIT:ERR_BUILD_FLAT;
|
||||||
}
|
}
|
||||||
|
@ -601,18 +597,18 @@ Error CTaskBuild::FlatFloor()
|
||||||
bBase = false;
|
bBase = false;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( !pObj->RetActif() ) continue; // inactive?
|
if ( !pObj->GetActif() ) continue; // inactive?
|
||||||
if ( pObj->RetTruck() != 0 ) continue; // object transported?
|
if ( pObj->GetTruck() != 0 ) continue; // object transported?
|
||||||
if ( pObj == m_metal ) continue;
|
if ( pObj == m_metal ) continue;
|
||||||
if ( pObj == m_object ) continue;
|
if ( pObj == m_object ) continue;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type == OBJECT_BASE )
|
if ( type == OBJECT_BASE )
|
||||||
{
|
{
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
dist = Math::Distance(center, oPos)-80.0f;
|
dist = Math::Distance(center, oPos)-80.0f;
|
||||||
if ( dist < max )
|
if ( dist < max )
|
||||||
{
|
{
|
||||||
|
@ -640,24 +636,24 @@ Error CTaskBuild::FlatFloor()
|
||||||
}
|
}
|
||||||
if ( max < radius )
|
if ( max < radius )
|
||||||
{
|
{
|
||||||
m_main->SetShowLimit(1, PARTILIMIT2, m_metal, center, max, 10.0f);
|
m_main->SetShowLimit(1, Gfx::PARTILIMIT2, m_metal, center, max, 10.0f);
|
||||||
if ( bRadius < 2.0f ) bRadius = 2.0f;
|
if ( bRadius < 2.0f ) bRadius = 2.0f;
|
||||||
m_main->SetShowLimit(2, PARTILIMIT3, m_metal, bPos, bRadius, 10.0f);
|
m_main->SetShowLimit(2, Gfx::PARTILIMIT3, m_metal, bPos, bRadius, 10.0f);
|
||||||
return bBase?ERR_BUILD_BASE:ERR_BUILD_BUSY;
|
return bBase?ERR_BUILD_BASE:ERR_BUILD_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
max = 100000.0f;
|
max = 100000.0f;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( !pObj->RetActif() ) continue; // inactive?
|
if ( !pObj->GetActif() ) continue; // inactive?
|
||||||
if ( pObj->RetTruck() != 0 ) continue; // object transported?
|
if ( pObj->GetTruck() != 0 ) continue; // object transported?
|
||||||
if ( pObj == m_metal ) continue;
|
if ( pObj == m_metal ) continue;
|
||||||
if ( pObj == m_object ) continue;
|
if ( pObj == m_object ) continue;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type == OBJECT_DERRICK ||
|
if ( type == OBJECT_DERRICK ||
|
||||||
type == OBJECT_FACTORY ||
|
type == OBJECT_FACTORY ||
|
||||||
type == OBJECT_STATION ||
|
type == OBJECT_STATION ||
|
||||||
|
@ -691,8 +687,8 @@ Error CTaskBuild::FlatFloor()
|
||||||
}
|
}
|
||||||
if ( max-BUILDMARGIN < radius )
|
if ( max-BUILDMARGIN < radius )
|
||||||
{
|
{
|
||||||
m_main->SetShowLimit(1, PARTILIMIT2, m_metal, center, max-BUILDMARGIN, 10.0f);
|
m_main->SetShowLimit(1, Gfx::PARTILIMIT2, m_metal, center, max-BUILDMARGIN, 10.0f);
|
||||||
m_main->SetShowLimit(2, PARTILIMIT3, m_metal, bPos, bRadius+BUILDMARGIN, 10.0f);
|
m_main->SetShowLimit(2, Gfx::PARTILIMIT3, m_metal, bPos, bRadius+BUILDMARGIN, 10.0f);
|
||||||
return bBase?ERR_BUILD_BASE:ERR_BUILD_NARROW;
|
return bBase?ERR_BUILD_BASE:ERR_BUILD_NARROW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -711,8 +707,8 @@ CObject* CTaskBuild::SearchMetalObject(float &angle, float dMin, float dMax,
|
||||||
int i;
|
int i;
|
||||||
bool bMetal;
|
bool bMetal;
|
||||||
|
|
||||||
iPos = m_object->RetPosition(0);
|
iPos = m_object->GetPosition(0);
|
||||||
iAngle = m_object->RetAngleY(0);
|
iAngle = m_object->GetAngleY(0);
|
||||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||||
|
|
||||||
min = 1000000.0f;
|
min = 1000000.0f;
|
||||||
|
@ -720,18 +716,18 @@ CObject* CTaskBuild::SearchMetalObject(float &angle, float dMin, float dMax,
|
||||||
bMetal = false;
|
bMetal = false;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( !pObj->RetActif() ) continue; // objet inactive?
|
if ( !pObj->GetActif() ) continue; // objet inactive?
|
||||||
if ( pObj->RetTruck() != 0 ) continue; // object transported?
|
if ( pObj->GetTruck() != 0 ) continue; // object transported?
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type != OBJECT_METAL ) continue;
|
if ( type != OBJECT_METAL ) continue;
|
||||||
|
|
||||||
bMetal = true; // metal exists
|
bMetal = true; // metal exists
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
distance = Math::Distance(oPos, iPos);
|
distance = Math::Distance(oPos, iPos);
|
||||||
a = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW!
|
a = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW!
|
||||||
|
|
||||||
|
@ -781,10 +777,10 @@ void CTaskBuild::DeleteMark(Math::Vector pos, float radius)
|
||||||
|
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type != OBJECT_MARKSTONE &&
|
if ( type != OBJECT_MARKSTONE &&
|
||||||
type != OBJECT_MARKURANIUM &&
|
type != OBJECT_MARKURANIUM &&
|
||||||
type != OBJECT_MARKKEYa &&
|
type != OBJECT_MARKKEYa &&
|
||||||
|
@ -793,7 +789,7 @@ void CTaskBuild::DeleteMark(Math::Vector pos, float radius)
|
||||||
type != OBJECT_MARKKEYd &&
|
type != OBJECT_MARKKEYd &&
|
||||||
type != OBJECT_MARKPOWER ) continue;
|
type != OBJECT_MARKPOWER ) continue;
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
distance = Math::Distance(oPos, pos);
|
distance = Math::Distance(oPos, pos);
|
||||||
if ( distance <= radius )
|
if ( distance <= radius )
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,23 +63,23 @@ protected:
|
||||||
void DeleteMark(Math::Vector pos, float radius);
|
void DeleteMark(Math::Vector pos, float radius);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ObjectType m_type; // type of construction
|
ObjectType m_type; // type of construction
|
||||||
CObject* m_metal; // transforms metal object
|
CObject* m_metal; // transforms metal object
|
||||||
CObject* m_power; // the vehicle battery
|
CObject* m_power; // the vehicle battery
|
||||||
CObject* m_building; // building built
|
CObject* m_building; // building built
|
||||||
TaskBuildPhase m_phase; // phase of the operation
|
TaskBuildPhase m_phase; // phase of the operation
|
||||||
bool m_bError; // true -> operation impossible
|
bool m_bError; // true -> operation impossible
|
||||||
bool m_bBuild; // true -> building built
|
bool m_bBuild; // true -> building built
|
||||||
bool m_bBlack; // true -> lights black -> white
|
bool m_bBlack; // true -> lights black -> white
|
||||||
float m_time; // absolute time
|
float m_time; // absolute time
|
||||||
float m_lastParticule; // time of generation last particle
|
float m_lastParticle; // time of generation last particle
|
||||||
float m_progress; // progression (0..1)
|
float m_progress; // progression (0..1)
|
||||||
float m_speed; // speed of progression
|
float m_speed; // speed of progression
|
||||||
float m_angleY; // rotation angle of the vehicle
|
float m_angleY; // rotation angle of the vehicle
|
||||||
float m_angleZ; // angle of rotation of the gun
|
float m_angleZ; // angle of rotation of the gun
|
||||||
Math::Vector m_buildingPos; // initial position of the building
|
Math::Vector m_buildingPos; // initial position of the building
|
||||||
float m_buildingHeight; // height of the building
|
float m_buildingHeight; // height of the building
|
||||||
int m_lightRank[TBMAXLIGHT];// lights for the effects
|
int m_lightRank[TBMAXLIGHT]; // lights for the effects
|
||||||
int m_soundChannel;
|
int m_soundChannel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,9 @@
|
||||||
|
|
||||||
// taskfire.cpp
|
// taskfire.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskfire.h"
|
#include "object/task/taskfire.h"
|
||||||
|
|
||||||
#include "old/particule.h"
|
#include "graphics/engine/particle.h"
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "physics/physics.h"
|
#include "physics/physics.h"
|
||||||
|
|
||||||
|
@ -66,32 +63,32 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
float energy, fire;
|
float energy, fire;
|
||||||
int i, channel;
|
int i, channel;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
m_time += event.rTime;
|
m_time += event.rTime;
|
||||||
m_lastSound -= event.rTime;
|
m_lastSound -= event.rTime;
|
||||||
m_progress += event.rTime*m_speed;
|
m_progress += event.rTime*m_speed;
|
||||||
|
|
||||||
power = m_object->RetPower();
|
power = m_object->GetPower();
|
||||||
if ( power != 0 )
|
if ( power != 0 )
|
||||||
{
|
{
|
||||||
energy = power->RetEnergy();
|
energy = power->GetEnergy();
|
||||||
if ( m_bOrganic ) fire = ENERGY_FIREi;
|
if ( m_bOrganic ) fire = ENERGY_FIREi;
|
||||||
else if ( m_bRay ) fire = ENERGY_FIREr;
|
else if ( m_bRay ) fire = ENERGY_FIREr;
|
||||||
else fire = ENERGY_FIRE;
|
else fire = ENERGY_FIRE;
|
||||||
energy -= event.rTime*fire/power->RetCapacity();
|
energy -= event.rTime*fire/power->GetCapacity();
|
||||||
power->SetEnergy(energy);
|
power->SetEnergy(energy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_lastParticule+0.05f <= m_time )
|
if ( m_lastParticle+0.05f <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
if ( m_bOrganic )
|
if ( m_bOrganic )
|
||||||
{
|
{
|
||||||
mat = m_object->RetWorldMatrix(1); // insect-cannon
|
mat = m_object->GetWorldMatrix(1); // insect-cannon
|
||||||
|
|
||||||
for ( i=0 ; i<6 ; i++ )
|
for ( i=0 ; i<6 ; i++ )
|
||||||
{
|
{
|
||||||
|
@ -100,10 +97,10 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
|
|
||||||
speed = Math::Vector(200.0f, 0.0f, 0.0f);
|
speed = Math::Vector(200.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
physics = m_object->RetPhysics();
|
physics = m_object->GetPhysics();
|
||||||
if ( physics != 0 )
|
if ( physics != 0 )
|
||||||
{
|
{
|
||||||
speed += physics->RetLinMotion(MO_REASPEED);
|
speed += physics->GetLinMotion(MO_REASPEED);
|
||||||
}
|
}
|
||||||
|
|
||||||
speed.x += (Math::Rand()-0.5f)*10.0f;
|
speed.x += (Math::Rand()-0.5f)*10.0f;
|
||||||
|
@ -115,13 +112,13 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
dim.x = Math::Rand()*0.5f+0.5f;
|
dim.x = Math::Rand()*0.5f+0.5f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
|
|
||||||
channel = m_particule->CreateParticule(pos, speed, dim, PARTIGUN4, 0.8f, 0.0f, 0.0f);
|
channel = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGUN4, 0.8f, 0.0f, 0.0f);
|
||||||
m_particule->SetObjectFather(channel, m_object);
|
m_particle->SetObjectFather(channel, m_object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( m_bRay )
|
else if ( m_bRay )
|
||||||
{
|
{
|
||||||
mat = m_object->RetWorldMatrix(2); // cannon
|
mat = m_object->GetWorldMatrix(2); // cannon
|
||||||
|
|
||||||
for ( i=0 ; i<4 ; i++ )
|
for ( i=0 ; i<4 ; i++ )
|
||||||
{
|
{
|
||||||
|
@ -139,9 +136,9 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
|
|
||||||
dim.x = 1.0f;
|
dim.x = 1.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
channel = m_particule->CreateTrack(pos, speed, dim, PARTITRACK11,
|
channel = m_particle->CreateTrack(pos, speed, dim, Gfx::PARTITRACK11,
|
||||||
2.0f, 200.0f, 0.5f, 1.0f);
|
2.0f, 200.0f, 0.5f, 1.0f);
|
||||||
m_particule->SetObjectFather(channel, m_object);
|
m_particle->SetObjectFather(channel, m_object);
|
||||||
|
|
||||||
speed = Math::Vector(5.0f, 0.0f, 0.0f);
|
speed = Math::Vector(5.0f, 0.0f, 0.0f);
|
||||||
speed.x += (Math::Rand()-0.5f)*1.0f;
|
speed.x += (Math::Rand()-0.5f)*1.0f;
|
||||||
|
@ -153,20 +150,20 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
|
|
||||||
dim.x = 2.0f;
|
dim.x = 2.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTISMOKE2, 2.0f, 0.0f, 0.5f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISMOKE2, 2.0f, 0.0f, 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
type = m_object->RetType();
|
type = m_object->GetType();
|
||||||
|
|
||||||
if ( type == OBJECT_MOBILErc )
|
if ( type == OBJECT_MOBILErc )
|
||||||
{
|
{
|
||||||
mat = m_object->RetWorldMatrix(2); // cannon
|
mat = m_object->GetWorldMatrix(2); // cannon
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mat = m_object->RetWorldMatrix(1); // cannon
|
mat = m_object->GetWorldMatrix(1); // cannon
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i=0 ; i<3 ; i++ )
|
for ( i=0 ; i<3 ; i++ )
|
||||||
|
@ -185,10 +182,10 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
|
|
||||||
speed = Math::Vector(200.0f, 0.0f, 0.0f);
|
speed = Math::Vector(200.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
physics = m_object->RetPhysics();
|
physics = m_object->GetPhysics();
|
||||||
if ( physics != 0 )
|
if ( physics != 0 )
|
||||||
{
|
{
|
||||||
speed += physics->RetLinMotion(MO_REASPEED);
|
speed += physics->GetLinMotion(MO_REASPEED);
|
||||||
}
|
}
|
||||||
|
|
||||||
speed.x += (Math::Rand()-0.5f)*3.0f;
|
speed.x += (Math::Rand()-0.5f)*3.0f;
|
||||||
|
@ -200,8 +197,8 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
dim.x = Math::Rand()*0.7f+0.7f;
|
dim.x = Math::Rand()*0.7f+0.7f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
|
|
||||||
channel = m_particule->CreateParticule(pos, speed, dim, PARTIGUN1, 0.8f, 0.0f, 0.0f);
|
channel = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGUN1, 0.8f, 0.0f, 0.0f);
|
||||||
m_particule->SetObjectFather(channel, m_object);
|
m_particle->SetObjectFather(channel, m_object);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( type != OBJECT_MOBILErc &&
|
if ( type != OBJECT_MOBILErc &&
|
||||||
|
@ -222,8 +219,8 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
dim.x = Math::Rand()*1.2f+1.2f;
|
dim.x = Math::Rand()*1.2f+1.2f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
|
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTICRASH, 2.0f, 0.0f, 0.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTICRASH, 2.0f, 0.0f, 0.0f);
|
||||||
//? m_particule->CreateParticule(pos, speed, dim, PARTISMOKE2, 4.0f, 0.0f, 0.0f);
|
//? m_particle->CreateParticle(pos, speed, dim, PARTISMOKE2, 4.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,7 +253,7 @@ bool CTaskFire::EventProcess(const Event &event)
|
||||||
if ( m_bRay && m_lastSound <= 0.0f )
|
if ( m_bRay && m_lastSound <= 0.0f )
|
||||||
{
|
{
|
||||||
m_lastSound = Math::Rand()*0.4f+0.4f;
|
m_lastSound = Math::Rand()*0.4f+0.4f;
|
||||||
m_sound->Play(SOUND_FIREp, m_object->RetPosition(0));
|
m_sound->Play(SOUND_FIREp, m_object->GetPosition(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -274,7 +271,7 @@ Error CTaskFire::Start(float delay)
|
||||||
|
|
||||||
m_bError = true; // operation impossible
|
m_bError = true; // operation impossible
|
||||||
|
|
||||||
type = m_object->RetType();
|
type = m_object->GetType();
|
||||||
if ( type != OBJECT_MOBILEfc &&
|
if ( type != OBJECT_MOBILEfc &&
|
||||||
type != OBJECT_MOBILEtc &&
|
type != OBJECT_MOBILEtc &&
|
||||||
type != OBJECT_MOBILEwc &&
|
type != OBJECT_MOBILEwc &&
|
||||||
|
@ -285,9 +282,9 @@ Error CTaskFire::Start(float delay)
|
||||||
type != OBJECT_MOBILEii &&
|
type != OBJECT_MOBILEii &&
|
||||||
type != OBJECT_MOBILErc ) return ERR_FIRE_VEH;
|
type != OBJECT_MOBILErc ) return ERR_FIRE_VEH;
|
||||||
|
|
||||||
//? if ( !m_physics->RetLand() ) return ERR_FIRE_FLY;
|
//? if ( !m_physics->GetLand() ) return ERR_FIRE_FLY;
|
||||||
|
|
||||||
speed = m_physics->RetMotorSpeed();
|
speed = m_physics->GetMotorSpeed();
|
||||||
//? if ( speed.x != 0.0f ||
|
//? if ( speed.x != 0.0f ||
|
||||||
//? speed.z != 0.0f ) return ERR_FIRE_MOTOR;
|
//? speed.z != 0.0f ) return ERR_FIRE_MOTOR;
|
||||||
|
|
||||||
|
@ -309,18 +306,18 @@ Error CTaskFire::Start(float delay)
|
||||||
}
|
}
|
||||||
m_delay = delay;
|
m_delay = delay;
|
||||||
|
|
||||||
power = m_object->RetPower();
|
power = m_object->GetPower();
|
||||||
if ( power == 0 ) return ERR_FIRE_ENERGY;
|
if ( power == 0 ) return ERR_FIRE_ENERGY;
|
||||||
energy = power->RetEnergy();
|
energy = power->GetEnergy();
|
||||||
if ( m_bOrganic ) fire = m_delay*ENERGY_FIREi;
|
if ( m_bOrganic ) fire = m_delay*ENERGY_FIREi;
|
||||||
else if ( m_bRay ) fire = m_delay*ENERGY_FIREr;
|
else if ( m_bRay ) fire = m_delay*ENERGY_FIREr;
|
||||||
else fire = m_delay*ENERGY_FIRE;
|
else fire = m_delay*ENERGY_FIRE;
|
||||||
if ( energy < fire/power->RetCapacity()+0.05f ) return ERR_FIRE_ENERGY;
|
if ( energy < fire/power->GetCapacity()+0.05f ) return ERR_FIRE_ENERGY;
|
||||||
|
|
||||||
m_speed = 1.0f/m_delay;
|
m_speed = 1.0f/m_delay;
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
m_lastSound = 0.0f;
|
m_lastSound = 0.0f;
|
||||||
m_bError = false; // ok
|
m_bError = false; // ok
|
||||||
|
|
||||||
|
@ -328,7 +325,7 @@ Error CTaskFire::Start(float delay)
|
||||||
|
|
||||||
if ( m_bOrganic )
|
if ( m_bOrganic )
|
||||||
{
|
{
|
||||||
m_soundChannel = m_sound->Play(SOUND_FIREi, m_object->RetPosition(0), 1.0f, 1.0f, true);
|
m_soundChannel = m_sound->Play(SOUND_FIREi, m_object->GetPosition(0), 1.0f, 1.0f, true);
|
||||||
if ( m_soundChannel != -1 )
|
if ( m_soundChannel != -1 )
|
||||||
{
|
{
|
||||||
m_sound->AddEnvelope(m_soundChannel, 1.0f, 1.0f, m_delay, SOPER_CONTINUE);
|
m_sound->AddEnvelope(m_soundChannel, 1.0f, 1.0f, m_delay, SOPER_CONTINUE);
|
||||||
|
@ -340,7 +337,7 @@ Error CTaskFire::Start(float delay)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_soundChannel = m_sound->Play(SOUND_FIRE, m_object->RetPosition(0), 1.0f, 1.0f, true);
|
m_soundChannel = m_sound->Play(SOUND_FIRE, m_object->GetPosition(0), 1.0f, 1.0f, true);
|
||||||
if ( m_soundChannel != -1 )
|
if ( m_soundChannel != -1 )
|
||||||
{
|
{
|
||||||
m_sound->AddEnvelope(m_soundChannel, 1.0f, 1.0f, m_delay, SOPER_CONTINUE);
|
m_sound->AddEnvelope(m_soundChannel, 1.0f, 1.0f, m_delay, SOPER_CONTINUE);
|
||||||
|
@ -355,7 +352,7 @@ Error CTaskFire::Start(float delay)
|
||||||
|
|
||||||
Error CTaskFire::IsEnded()
|
Error CTaskFire::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ protected:
|
||||||
bool m_bOrganic;
|
bool m_bOrganic;
|
||||||
float m_time;
|
float m_time;
|
||||||
float m_speed;
|
float m_speed;
|
||||||
float m_lastParticule;
|
float m_lastParticle;
|
||||||
float m_lastSound;
|
float m_lastSound;
|
||||||
int m_soundChannel;
|
int m_soundChannel;
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,12 +16,9 @@
|
||||||
|
|
||||||
// taskfireant.cpp
|
// taskfireant.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskfireant.h"
|
#include "object/task/taskfireant.h"
|
||||||
|
|
||||||
#include "old/particule.h"
|
#include "graphics/engine/particle.h"
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "object/motion/motionant.h"
|
#include "object/motion/motionant.h"
|
||||||
#include "physics/physics.h"
|
#include "physics/physics.h"
|
||||||
|
@ -51,11 +48,11 @@ bool CTaskFireAnt::EventProcess(const Event &event)
|
||||||
Math::Vector dir, vib;
|
Math::Vector dir, vib;
|
||||||
float a, g, cirSpeed;
|
float a, g, cirSpeed;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
if ( m_object->RetFixed() ) // insect on its back?
|
if ( m_object->GetFixed() ) // insect on its back?
|
||||||
{
|
{
|
||||||
m_bError = true;
|
m_bError = true;
|
||||||
return false;
|
return false;
|
||||||
|
@ -66,7 +63,7 @@ bool CTaskFireAnt::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_phase == TFA_TURN ) // preliminary rotation?
|
if ( m_phase == TFA_TURN ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
a = m_object->RetAngleY(0);
|
a = m_object->GetAngleY(0);
|
||||||
g = m_angle;
|
g = m_angle;
|
||||||
cirSpeed = Math::Direction(a, g)*2.0f;
|
cirSpeed = Math::Direction(a, g)*2.0f;
|
||||||
if ( cirSpeed > 2.0f ) cirSpeed = 2.0f;
|
if ( cirSpeed > 2.0f ) cirSpeed = 2.0f;
|
||||||
|
@ -89,24 +86,24 @@ Error CTaskFireAnt::Start(Math::Vector impact)
|
||||||
m_impact = impact;
|
m_impact = impact;
|
||||||
|
|
||||||
m_bError = true; // operation impossible
|
m_bError = true; // operation impossible
|
||||||
if ( !m_physics->RetLand() ) return ERR_FIRE_VEH;
|
if ( !m_physics->GetLand() ) return ERR_FIRE_VEH;
|
||||||
|
|
||||||
type = m_object->RetType();
|
type = m_object->GetType();
|
||||||
if ( type != OBJECT_ANT ) return ERR_FIRE_VEH;
|
if ( type != OBJECT_ANT ) return ERR_FIRE_VEH;
|
||||||
|
|
||||||
// Insect on its back?
|
// Insect on its back?
|
||||||
if ( m_object->RetFixed() ) return ERR_FIRE_VEH;
|
if ( m_object->GetFixed() ) return ERR_FIRE_VEH;
|
||||||
|
|
||||||
m_physics->SetMotorSpeed(Math::Vector(0.0f, 0.0f, 0.0f));
|
m_physics->SetMotorSpeed(Math::Vector(0.0f, 0.0f, 0.0f));
|
||||||
|
|
||||||
pos = m_object->RetPosition(0);
|
pos = m_object->GetPosition(0);
|
||||||
m_angle = Math::RotateAngle(m_impact.x-pos.x, pos.z-m_impact.z); // CW !
|
m_angle = Math::RotateAngle(m_impact.x-pos.x, pos.z-m_impact.z); // CW !
|
||||||
|
|
||||||
m_phase = TFA_TURN;
|
m_phase = TFA_TURN;
|
||||||
m_speed = 1.0f/1.0f;
|
m_speed = 1.0f/1.0f;
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
m_bError = false; // ok
|
m_bError = false; // ok
|
||||||
m_bFire = false; // once!
|
m_bFire = false; // once!
|
||||||
|
|
||||||
|
@ -123,13 +120,13 @@ Error CTaskFireAnt::IsEnded()
|
||||||
float angle, dist;
|
float angle, dist;
|
||||||
int i, channel;
|
int i, channel;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
if ( m_object->RetFixed() ) return ERR_STOP; // insect on its back?
|
if ( m_object->GetFixed() ) return ERR_STOP; // insect on its back?
|
||||||
|
|
||||||
if ( m_phase == TFA_TURN ) // rotation ?
|
if ( m_phase == TFA_TURN ) // rotation ?
|
||||||
{
|
{
|
||||||
angle = m_object->RetAngleY(0);
|
angle = m_object->GetAngleY(0);
|
||||||
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
||||||
if ( !Math::TestAngle(angle, m_angle-Math::PI*0.05f, m_angle+Math::PI*0.05f) ) return ERR_CONTINUE;
|
if ( !Math::TestAngle(angle, m_angle-Math::PI*0.05f, m_angle+Math::PI*0.05f) ) return ERR_CONTINUE;
|
||||||
|
|
||||||
|
@ -164,7 +161,7 @@ Error CTaskFireAnt::IsEnded()
|
||||||
for ( i=0 ; i<20 ; i++ )
|
for ( i=0 ; i<20 ; i++ )
|
||||||
{
|
{
|
||||||
pos = Math::Vector(-2.5f, -0.7f, 0.0f);
|
pos = Math::Vector(-2.5f, -0.7f, 0.0f);
|
||||||
mat = m_object->RetWorldMatrix(2);
|
mat = m_object->GetWorldMatrix(2);
|
||||||
pos = Math::Transform(*mat, pos);
|
pos = Math::Transform(*mat, pos);
|
||||||
dist = Math::Distance(pos, m_impact);
|
dist = Math::Distance(pos, m_impact);
|
||||||
speed = m_impact-pos;
|
speed = m_impact-pos;
|
||||||
|
@ -173,8 +170,8 @@ Error CTaskFireAnt::IsEnded()
|
||||||
speed.z += (Math::Rand()-0.5f)*dist*1.2f;
|
speed.z += (Math::Rand()-0.5f)*dist*1.2f;
|
||||||
dim.x = 1.0f;
|
dim.x = 1.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
channel = m_particule->CreateParticule(pos, speed, dim, PARTIGUN2, 2.0f, 100.0f, 0.0f);
|
channel = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGUN2, 2.0f, 100.0f, 0.0f);
|
||||||
m_particule->SetObjectFather(channel, m_object);
|
m_particle->SetObjectFather(channel, m_object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,6 @@ protected:
|
||||||
bool m_bError;
|
bool m_bError;
|
||||||
bool m_bFire;
|
bool m_bFire;
|
||||||
float m_time;
|
float m_time;
|
||||||
float m_lastParticule;
|
float m_lastParticle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,15 +16,13 @@
|
||||||
|
|
||||||
// taskflag.cpp
|
// taskflag.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskflag.h"
|
#include "object/task/taskflag.h"
|
||||||
|
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "old/water.h"
|
#include "graphics/engine/particle.h"
|
||||||
#include "old/pyro.h"
|
#include "graphics/engine/pyro.h"
|
||||||
|
#include "graphics/engine/water.h"
|
||||||
#include "physics/physics.h"
|
#include "physics/physics.h"
|
||||||
#include "object/motion/motionhuman.h"
|
#include "object/motion/motionhuman.h"
|
||||||
|
|
||||||
|
@ -51,8 +49,8 @@ CTaskFlag::~CTaskFlag()
|
||||||
bool CTaskFlag::EventProcess(const Event &event)
|
bool CTaskFlag::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
if ( m_bError ) return true;
|
if ( m_bError ) return true;
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
|
|
||||||
m_time += event.rTime;
|
m_time += event.rTime;
|
||||||
|
|
||||||
|
@ -72,18 +70,18 @@ Error CTaskFlag::Start(TaskFlagOrder order, int rank)
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
|
|
||||||
m_bError = true; // operation impossible
|
m_bError = true; // operation impossible
|
||||||
if ( !m_physics->RetLand() )
|
if ( !m_physics->GetLand() )
|
||||||
{
|
{
|
||||||
pos = m_object->RetPosition(0);
|
pos = m_object->GetPosition(0);
|
||||||
if ( pos.y < m_water->RetLevel() ) return ERR_FLAG_WATER;
|
if ( pos.y < m_water->GetLevel() ) return ERR_FLAG_WATER;
|
||||||
return ERR_FLAG_FLY;
|
return ERR_FLAG_FLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
speed = m_physics->RetMotorSpeed();
|
speed = m_physics->GetMotorSpeed();
|
||||||
if ( speed.x != 0.0f ||
|
if ( speed.x != 0.0f ||
|
||||||
speed.z != 0.0f ) return ERR_FLAG_MOTOR;
|
speed.z != 0.0f ) return ERR_FLAG_MOTOR;
|
||||||
|
|
||||||
if ( m_object->RetFret() != 0 ) return ERR_FLAG_BUSY;
|
if ( m_object->GetFret() != 0 ) return ERR_FLAG_BUSY;
|
||||||
|
|
||||||
if ( order == TFL_CREATE )
|
if ( order == TFL_CREATE )
|
||||||
{
|
{
|
||||||
|
@ -109,7 +107,7 @@ Error CTaskFlag::Start(TaskFlagOrder order, int rank)
|
||||||
|
|
||||||
Error CTaskFlag::IsEnded()
|
Error CTaskFlag::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
|
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
if ( m_time < 2.0f ) return ERR_CONTINUE;
|
if ( m_time < 2.0f ) return ERR_CONTINUE;
|
||||||
|
@ -143,12 +141,12 @@ CObject* CTaskFlag::SearchNearest(Math::Vector pos, ObjectType type)
|
||||||
pBest = 0;
|
pBest = 0;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( !pObj->RetEnable() ) continue;
|
if ( !pObj->GetEnable() ) continue;
|
||||||
|
|
||||||
oType = pObj->RetType();
|
oType = pObj->GetType();
|
||||||
if ( type == OBJECT_NULL )
|
if ( type == OBJECT_NULL )
|
||||||
{
|
{
|
||||||
if ( oType != OBJECT_FLAGb &&
|
if ( oType != OBJECT_FLAGb &&
|
||||||
|
@ -162,7 +160,7 @@ CObject* CTaskFlag::SearchNearest(Math::Vector pos, ObjectType type)
|
||||||
if ( oType != type ) continue;
|
if ( oType != type ) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
dist = Math::DistanceProjected(oPos, pos);
|
dist = Math::DistanceProjected(oPos, pos);
|
||||||
if ( dist < min )
|
if ( dist < min )
|
||||||
{
|
{
|
||||||
|
@ -185,12 +183,12 @@ int CTaskFlag::CountObject(ObjectType type)
|
||||||
count = 0;
|
count = 0;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( !pObj->RetEnable() ) continue;
|
if ( !pObj->GetEnable() ) continue;
|
||||||
|
|
||||||
oType = pObj->RetType();
|
oType = pObj->GetType();
|
||||||
if ( type == OBJECT_NULL )
|
if ( type == OBJECT_NULL )
|
||||||
{
|
{
|
||||||
if ( oType != OBJECT_FLAGb &&
|
if ( oType != OBJECT_FLAGb &&
|
||||||
|
@ -213,13 +211,13 @@ int CTaskFlag::CountObject(ObjectType type)
|
||||||
|
|
||||||
Error CTaskFlag::CreateFlag(int rank)
|
Error CTaskFlag::CreateFlag(int rank)
|
||||||
{
|
{
|
||||||
CObject* pObj;
|
CObject* pObj;
|
||||||
CObject* pNew;
|
CObject* pNew;
|
||||||
CPyro* pyro;
|
Gfx::CPyro* pyro;
|
||||||
Math::Matrix* mat;
|
Math::Matrix* mat;
|
||||||
Math::Vector pos;
|
Math::Vector pos;
|
||||||
float dist;
|
float dist;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ObjectType table[5] =
|
ObjectType table[5] =
|
||||||
{
|
{
|
||||||
|
@ -230,13 +228,13 @@ Error CTaskFlag::CreateFlag(int rank)
|
||||||
OBJECT_FLAGv,
|
OBJECT_FLAGv,
|
||||||
};
|
};
|
||||||
|
|
||||||
mat = m_object->RetWorldMatrix(0);
|
mat = m_object->GetWorldMatrix(0);
|
||||||
pos = Transform(*mat, Math::Vector(4.0f, 0.0f, 0.0f));
|
pos = Transform(*mat, Math::Vector(4.0f, 0.0f, 0.0f));
|
||||||
|
|
||||||
pObj = SearchNearest(pos, OBJECT_NULL);
|
pObj = SearchNearest(pos, OBJECT_NULL);
|
||||||
if ( pObj != 0 )
|
if ( pObj != 0 )
|
||||||
{
|
{
|
||||||
dist = Math::Distance(pos, pObj->RetPosition(0));
|
dist = Math::Distance(pos, pObj->GetPosition(0));
|
||||||
if ( dist < 10.0f )
|
if ( dist < 10.0f )
|
||||||
{
|
{
|
||||||
return ERR_FLAG_PROXY;
|
return ERR_FLAG_PROXY;
|
||||||
|
@ -258,8 +256,8 @@ Error CTaskFlag::CreateFlag(int rank)
|
||||||
pNew->SetZoom(0, 0.0f);
|
pNew->SetZoom(0, 0.0f);
|
||||||
|
|
||||||
m_sound->Play(SOUND_WAYPOINT, pos);
|
m_sound->Play(SOUND_WAYPOINT, pos);
|
||||||
pyro = new CPyro(m_iMan);
|
pyro = new Gfx::CPyro(m_iMan);
|
||||||
pyro->Create(PT_FLCREATE, pNew);
|
pyro->Create(Gfx::PT_FLCREATE, pNew);
|
||||||
|
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
@ -268,13 +266,13 @@ Error CTaskFlag::CreateFlag(int rank)
|
||||||
|
|
||||||
Error CTaskFlag::DeleteFlag()
|
Error CTaskFlag::DeleteFlag()
|
||||||
{
|
{
|
||||||
CObject* pObj;
|
CObject* pObj;
|
||||||
CPyro* pyro;
|
Gfx::CPyro* pyro;
|
||||||
Math::Vector iPos, oPos;
|
Math::Vector iPos, oPos;
|
||||||
float iAngle, angle, aLimit, dist;
|
float iAngle, angle, aLimit, dist;
|
||||||
|
|
||||||
iPos = m_object->RetPosition(0);
|
iPos = m_object->GetPosition(0);
|
||||||
iAngle = m_object->RetAngleY(0);
|
iAngle = m_object->GetAngleY(0);
|
||||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||||
|
|
||||||
pObj = SearchNearest(iPos, OBJECT_NULL);
|
pObj = SearchNearest(iPos, OBJECT_NULL);
|
||||||
|
@ -282,13 +280,13 @@ Error CTaskFlag::DeleteFlag()
|
||||||
{
|
{
|
||||||
return ERR_FLAG_DELETE;
|
return ERR_FLAG_DELETE;
|
||||||
}
|
}
|
||||||
dist = Math::Distance(iPos, pObj->RetPosition(0));
|
dist = Math::Distance(iPos, pObj->GetPosition(0));
|
||||||
if ( dist > 10.0f )
|
if ( dist > 10.0f )
|
||||||
{
|
{
|
||||||
return ERR_FLAG_DELETE;
|
return ERR_FLAG_DELETE;
|
||||||
}
|
}
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW !
|
angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW !
|
||||||
aLimit = 45.0f*Math::PI/180.0f;
|
aLimit = 45.0f*Math::PI/180.0f;
|
||||||
if ( !Math::TestAngle(angle, iAngle-aLimit, iAngle+aLimit) )
|
if ( !Math::TestAngle(angle, iAngle-aLimit, iAngle+aLimit) )
|
||||||
|
@ -297,8 +295,8 @@ Error CTaskFlag::DeleteFlag()
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sound->Play(SOUND_WAYPOINT, iPos);
|
m_sound->Play(SOUND_WAYPOINT, iPos);
|
||||||
pyro = new CPyro(m_iMan);
|
pyro = new Gfx::CPyro(m_iMan);
|
||||||
pyro->Create(PT_FLDELETE, pObj);
|
pyro->Create(Gfx::PT_FLDELETE, pObj);
|
||||||
|
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -16,9 +16,6 @@
|
||||||
|
|
||||||
// taskgungoal.cpp
|
// taskgungoal.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskgungoal.h"
|
#include "object/task/taskgungoal.h"
|
||||||
|
|
||||||
#include "object/object.h"
|
#include "object/object.h"
|
||||||
|
@ -46,8 +43,8 @@ bool CTaskGunGoal::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
float dir;
|
float dir;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
|
|
||||||
m_progress += event.rTime*m_speed;
|
m_progress += event.rTime*m_speed;
|
||||||
|
|
||||||
|
@ -82,9 +79,9 @@ Error CTaskGunGoal::Start(float dirV, float dirH)
|
||||||
float speedV, speedH;
|
float speedV, speedH;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
m_initialDirV = m_object->RetGunGoalV();
|
m_initialDirV = m_object->GetGunGoalV();
|
||||||
m_object->SetGunGoalV(dirV);
|
m_object->SetGunGoalV(dirV);
|
||||||
m_finalDirV = m_object->RetGunGoalV(); // possible direction
|
m_finalDirV = m_object->GetGunGoalV(); // possible direction
|
||||||
m_object->SetGunGoalV(m_initialDirV); // gives initial direction
|
m_object->SetGunGoalV(m_initialDirV); // gives initial direction
|
||||||
|
|
||||||
if ( m_finalDirV == m_initialDirV )
|
if ( m_finalDirV == m_initialDirV )
|
||||||
|
@ -96,9 +93,9 @@ Error CTaskGunGoal::Start(float dirV, float dirH)
|
||||||
speedV = 1.0f/(fabs(m_finalDirV-m_initialDirV)*1.0f);
|
speedV = 1.0f/(fabs(m_finalDirV-m_initialDirV)*1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_initialDirH = m_object->RetGunGoalH();
|
m_initialDirH = m_object->GetGunGoalH();
|
||||||
m_object->SetGunGoalH(dirH);
|
m_object->SetGunGoalH(dirH);
|
||||||
m_finalDirH = m_object->RetGunGoalH(); // possible direction
|
m_finalDirH = m_object->GetGunGoalH(); // possible direction
|
||||||
m_object->SetGunGoalH(m_initialDirH); // gives initial direction
|
m_object->SetGunGoalH(m_initialDirH); // gives initial direction
|
||||||
|
|
||||||
if ( m_finalDirH == m_initialDirH )
|
if ( m_finalDirH == m_initialDirH )
|
||||||
|
@ -115,7 +112,7 @@ Error CTaskGunGoal::Start(float dirV, float dirH)
|
||||||
if ( m_finalDirV != m_initialDirV ||
|
if ( m_finalDirV != m_initialDirV ||
|
||||||
m_finalDirH != m_initialDirH )
|
m_finalDirH != m_initialDirH )
|
||||||
{
|
{
|
||||||
i = m_sound->Play(SOUND_MANIP, m_object->RetPosition(0), 0.3f, 1.5f, true);
|
i = m_sound->Play(SOUND_MANIP, m_object->GetPosition(0), 0.3f, 1.5f, true);
|
||||||
m_sound->AddEnvelope(i, 0.3f, 1.5f, 1.0f/m_speed, SOPER_STOP);
|
m_sound->AddEnvelope(i, 0.3f, 1.5f, 1.0f/m_speed, SOPER_STOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +125,7 @@ Error CTaskGunGoal::Start(float dirV, float dirH)
|
||||||
|
|
||||||
Error CTaskGunGoal::IsEnded()
|
Error CTaskGunGoal::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
|
|
||||||
if ( m_initialDirV == m_finalDirV &&
|
if ( m_initialDirV == m_finalDirV &&
|
||||||
m_initialDirH == m_finalDirH ) return ERR_STOP;
|
m_initialDirH == m_finalDirH ) return ERR_STOP;
|
||||||
|
|
|
@ -16,13 +16,10 @@
|
||||||
|
|
||||||
// taskinfo.cpp
|
// taskinfo.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskinfo.h"
|
#include "object/task/taskinfo.h"
|
||||||
|
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "old/particule.h"
|
#include "graphics/engine/particle.h"
|
||||||
#include "object/auto/autoinfo.h"
|
#include "object/auto/autoinfo.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,8 +44,8 @@ CTaskInfo::~CTaskInfo()
|
||||||
|
|
||||||
bool CTaskInfo::EventProcess(const Event &event)
|
bool CTaskInfo::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
m_progress += event.rTime*m_speed; // other advance
|
m_progress += event.rTime*m_speed; // other advance
|
||||||
|
@ -60,7 +57,7 @@ bool CTaskInfo::EventProcess(const Event &event)
|
||||||
|
|
||||||
// Assigns the goal was achieved.
|
// Assigns the goal was achieved.
|
||||||
|
|
||||||
Error CTaskInfo::Start(char *name, float value, float power, bool bSend)
|
Error CTaskInfo::Start(const char *name, float value, float power, bool bSend)
|
||||||
{
|
{
|
||||||
CObject* pInfo;
|
CObject* pInfo;
|
||||||
CAutoInfo* pAuto;
|
CAutoInfo* pAuto;
|
||||||
|
@ -77,7 +74,7 @@ Error CTaskInfo::Start(char *name, float value, float power, bool bSend)
|
||||||
return ERR_INFO_NULL;
|
return ERR_INFO_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pAuto = (CAutoInfo*)pInfo->RetAuto();
|
pAuto = static_cast<CAutoInfo*>(pInfo->GetAuto());
|
||||||
if ( pAuto == 0 )
|
if ( pAuto == 0 )
|
||||||
{
|
{
|
||||||
return ERR_INFO_NULL;
|
return ERR_INFO_NULL;
|
||||||
|
@ -86,10 +83,10 @@ Error CTaskInfo::Start(char *name, float value, float power, bool bSend)
|
||||||
op = 1; // transmission impossible
|
op = 1; // transmission impossible
|
||||||
if ( bSend ) // send?
|
if ( bSend ) // send?
|
||||||
{
|
{
|
||||||
total = pInfo->RetInfoTotal();
|
total = pInfo->GetInfoTotal();
|
||||||
for ( i=0 ; i<total ; i++ )
|
for ( i=0 ; i<total ; i++ )
|
||||||
{
|
{
|
||||||
info = pInfo->RetInfo(i);
|
info = pInfo->GetInfo(i);
|
||||||
if ( strcmp(info.name, name) == 0 )
|
if ( strcmp(info.name, name) == 0 )
|
||||||
{
|
{
|
||||||
info.value = value;
|
info.value = value;
|
||||||
|
@ -114,10 +111,10 @@ Error CTaskInfo::Start(char *name, float value, float power, bool bSend)
|
||||||
}
|
}
|
||||||
else // receive?
|
else // receive?
|
||||||
{
|
{
|
||||||
total = pInfo->RetInfoTotal();
|
total = pInfo->GetInfoTotal();
|
||||||
for ( i=0 ; i<total ; i++ )
|
for ( i=0 ; i<total ; i++ )
|
||||||
{
|
{
|
||||||
info = pInfo->RetInfo(i);
|
info = pInfo->GetInfo(i);
|
||||||
if ( strcmp(info.name, name) == 0 )
|
if ( strcmp(info.name, name) == 0 )
|
||||||
{
|
{
|
||||||
m_object->SetInfoReturn(info.value);
|
m_object->SetInfoReturn(info.value);
|
||||||
|
@ -134,19 +131,19 @@ Error CTaskInfo::Start(char *name, float value, float power, bool bSend)
|
||||||
|
|
||||||
if ( op == 0 ) // transmission?
|
if ( op == 0 ) // transmission?
|
||||||
{
|
{
|
||||||
pos = pInfo->RetPosition(0);
|
pos = pInfo->GetPosition(0);
|
||||||
pos.y += 9.5f;
|
pos.y += 9.5f;
|
||||||
goal = m_object->RetPosition(0);
|
goal = m_object->GetPosition(0);
|
||||||
goal.y += 4.0f;
|
goal.y += 4.0f;
|
||||||
m_particule->CreateRay(pos, goal, PARTIRAY3, Math::Point(2.0f, 2.0f), 1.0f);
|
m_particle->CreateRay(pos, goal, Gfx::PARTIRAY3, Math::Point(2.0f, 2.0f), 1.0f);
|
||||||
}
|
}
|
||||||
if ( op == 2 ) // reception?
|
if ( op == 2 ) // reception?
|
||||||
{
|
{
|
||||||
goal = pInfo->RetPosition(0);
|
goal = pInfo->GetPosition(0);
|
||||||
goal.y += 9.5f;
|
goal.y += 9.5f;
|
||||||
pos = m_object->RetPosition(0);
|
pos = m_object->GetPosition(0);
|
||||||
pos.y += 4.0f;
|
pos.y += 4.0f;
|
||||||
m_particule->CreateRay(pos, goal, PARTIRAY3, Math::Point(2.0f, 2.0f), 1.0f);
|
m_particle->CreateRay(pos, goal, Gfx::PARTIRAY3, Math::Point(2.0f, 2.0f), 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
|
@ -162,7 +159,7 @@ Error CTaskInfo::Start(char *name, float value, float power, bool bSend)
|
||||||
|
|
||||||
Error CTaskInfo::IsEnded()
|
Error CTaskInfo::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
|
|
||||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||||
|
@ -184,27 +181,27 @@ bool CTaskInfo::Abort()
|
||||||
|
|
||||||
CObject* CTaskInfo::SearchInfo(float power)
|
CObject* CTaskInfo::SearchInfo(float power)
|
||||||
{
|
{
|
||||||
CObject *pObj, *pBest;
|
CObject *pObj, *pBest;
|
||||||
Math::Vector iPos, oPos;
|
Math::Vector iPos, oPos;
|
||||||
ObjectType type;
|
ObjectType type;
|
||||||
float dist, min;
|
float dist, min;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
iPos = m_object->RetPosition(0);
|
iPos = m_object->GetPosition(0);
|
||||||
|
|
||||||
min = 100000.0f;
|
min = 100000.0f;
|
||||||
pBest = 0;
|
pBest = 0;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type != OBJECT_INFO ) continue;
|
if ( type != OBJECT_INFO ) continue;
|
||||||
|
|
||||||
if ( !pObj->RetActif() ) continue;
|
if ( !pObj->GetActif() ) continue;
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
dist = Math::Distance(oPos, iPos);
|
dist = Math::Distance(oPos, iPos);
|
||||||
if ( dist > power ) continue; // too far?
|
if ( dist > power ) continue; // too far?
|
||||||
if ( dist < min )
|
if ( dist < min )
|
||||||
|
|
|
@ -31,7 +31,7 @@ public:
|
||||||
|
|
||||||
bool EventProcess(const Event &event);
|
bool EventProcess(const Event &event);
|
||||||
|
|
||||||
Error Start(char *name, float value, float power, bool bSend);
|
Error Start(const char *name, float value, float power, bool bSend);
|
||||||
Error IsEnded();
|
Error IsEnded();
|
||||||
bool Abort();
|
bool Abort();
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ CTaskManager::~CTaskManager()
|
||||||
Error CTaskManager::StartTaskWait(float time)
|
Error CTaskManager::StartTaskWait(float time)
|
||||||
{
|
{
|
||||||
m_task = new CTaskWait(m_iMan, m_object);
|
m_task = new CTaskWait(m_iMan, m_object);
|
||||||
return ((CTaskWait*)m_task)->Start(time);
|
return (static_cast<CTaskWait*>(m_task))->Start(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Advance straight ahead a certain distance.
|
// Advance straight ahead a certain distance.
|
||||||
|
@ -75,7 +75,7 @@ Error CTaskManager::StartTaskWait(float time)
|
||||||
Error CTaskManager::StartTaskAdvance(float length)
|
Error CTaskManager::StartTaskAdvance(float length)
|
||||||
{
|
{
|
||||||
m_task = new CTaskAdvance(m_iMan, m_object);
|
m_task = new CTaskAdvance(m_iMan, m_object);
|
||||||
return ((CTaskAdvance*)m_task)->Start(length);
|
return (static_cast<CTaskAdvance*>(m_task))->Start(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turns through an certain angle.
|
// Turns through an certain angle.
|
||||||
|
@ -83,7 +83,7 @@ Error CTaskManager::StartTaskAdvance(float length)
|
||||||
Error CTaskManager::StartTaskTurn(float angle)
|
Error CTaskManager::StartTaskTurn(float angle)
|
||||||
{
|
{
|
||||||
m_task = new CTaskTurn(m_iMan, m_object);
|
m_task = new CTaskTurn(m_iMan, m_object);
|
||||||
return ((CTaskTurn*)m_task)->Start(angle);
|
return (static_cast<CTaskTurn*>(m_task))->Start(angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reaches a given position.
|
// Reaches a given position.
|
||||||
|
@ -91,7 +91,7 @@ Error CTaskManager::StartTaskTurn(float angle)
|
||||||
Error CTaskManager::StartTaskGoto(Math::Vector pos, float altitude, TaskGotoGoal goalMode, TaskGotoCrash crashMode)
|
Error CTaskManager::StartTaskGoto(Math::Vector pos, float altitude, TaskGotoGoal goalMode, TaskGotoCrash crashMode)
|
||||||
{
|
{
|
||||||
m_task = new CTaskGoto(m_iMan, m_object);
|
m_task = new CTaskGoto(m_iMan, m_object);
|
||||||
return ((CTaskGoto*)m_task)->Start(pos, altitude, goalMode, crashMode);
|
return (static_cast<CTaskGoto*>(m_task))->Start(pos, altitude, goalMode, crashMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move the manipulator arm.
|
// Move the manipulator arm.
|
||||||
|
@ -99,7 +99,7 @@ Error CTaskManager::StartTaskGoto(Math::Vector pos, float altitude, TaskGotoGoal
|
||||||
Error CTaskManager::StartTaskTake()
|
Error CTaskManager::StartTaskTake()
|
||||||
{
|
{
|
||||||
m_task = new CTaskTake(m_iMan, m_object);
|
m_task = new CTaskTake(m_iMan, m_object);
|
||||||
return ((CTaskTake*)m_task)->Start();
|
return (static_cast<CTaskTake*>(m_task))->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move the manipulator arm.
|
// Move the manipulator arm.
|
||||||
|
@ -107,7 +107,7 @@ Error CTaskManager::StartTaskTake()
|
||||||
Error CTaskManager::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
|
Error CTaskManager::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
|
||||||
{
|
{
|
||||||
m_task = new CTaskManip(m_iMan, m_object);
|
m_task = new CTaskManip(m_iMan, m_object);
|
||||||
return ((CTaskManip*)m_task)->Start(order, arm);
|
return (static_cast<CTaskManip*>(m_task))->Start(order, arm);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Puts or removes a flag.
|
// Puts or removes a flag.
|
||||||
|
@ -115,7 +115,7 @@ Error CTaskManager::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
|
||||||
Error CTaskManager::StartTaskFlag(TaskFlagOrder order, int rank)
|
Error CTaskManager::StartTaskFlag(TaskFlagOrder order, int rank)
|
||||||
{
|
{
|
||||||
m_task = new CTaskFlag(m_iMan, m_object);
|
m_task = new CTaskFlag(m_iMan, m_object);
|
||||||
return ((CTaskFlag*)m_task)->Start(order, rank);
|
return (static_cast<CTaskFlag*>(m_task))->Start(order, rank);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Builds a building.
|
// Builds a building.
|
||||||
|
@ -123,7 +123,7 @@ Error CTaskManager::StartTaskFlag(TaskFlagOrder order, int rank)
|
||||||
Error CTaskManager::StartTaskBuild(ObjectType type)
|
Error CTaskManager::StartTaskBuild(ObjectType type)
|
||||||
{
|
{
|
||||||
m_task = new CTaskBuild(m_iMan, m_object);
|
m_task = new CTaskBuild(m_iMan, m_object);
|
||||||
return ((CTaskBuild*)m_task)->Start(type);
|
return (static_cast<CTaskBuild*>(m_task))->Start(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Probe the ground.
|
// Probe the ground.
|
||||||
|
@ -131,7 +131,7 @@ Error CTaskManager::StartTaskBuild(ObjectType type)
|
||||||
Error CTaskManager::StartTaskSearch()
|
Error CTaskManager::StartTaskSearch()
|
||||||
{
|
{
|
||||||
m_task = new CTaskSearch(m_iMan, m_object);
|
m_task = new CTaskSearch(m_iMan, m_object);
|
||||||
return ((CTaskSearch*)m_task)->Start();
|
return (static_cast<CTaskSearch*>(m_task))->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reads an information terminal.
|
// Reads an information terminal.
|
||||||
|
@ -139,7 +139,7 @@ Error CTaskManager::StartTaskSearch()
|
||||||
Error CTaskManager::StartTaskInfo(const char *name, float value, float power, bool bSend)
|
Error CTaskManager::StartTaskInfo(const char *name, float value, float power, bool bSend)
|
||||||
{
|
{
|
||||||
m_task = new CTaskInfo(m_iMan, m_object);
|
m_task = new CTaskInfo(m_iMan, m_object);
|
||||||
return ((CTaskInfo*)m_task)->Start(name, value, power, bSend);
|
return (static_cast<CTaskInfo*>(m_task))->Start(name, value, power, bSend);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Terraforms the ground.
|
// Terraforms the ground.
|
||||||
|
@ -147,7 +147,7 @@ Error CTaskManager::StartTaskInfo(const char *name, float value, float power, bo
|
||||||
Error CTaskManager::StartTaskTerraform()
|
Error CTaskManager::StartTaskTerraform()
|
||||||
{
|
{
|
||||||
m_task = new CTaskTerraform(m_iMan, m_object);
|
m_task = new CTaskTerraform(m_iMan, m_object);
|
||||||
return ((CTaskTerraform*)m_task)->Start();
|
return (static_cast<CTaskTerraform*>(m_task))->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Changes the pencil.
|
// Changes the pencil.
|
||||||
|
@ -155,7 +155,7 @@ Error CTaskManager::StartTaskTerraform()
|
||||||
Error CTaskManager::StartTaskPen(bool bDown, int color)
|
Error CTaskManager::StartTaskPen(bool bDown, int color)
|
||||||
{
|
{
|
||||||
m_task = new CTaskPen(m_iMan, m_object);
|
m_task = new CTaskPen(m_iMan, m_object);
|
||||||
return ((CTaskPen*)m_task)->Start(bDown, color);
|
return (static_cast<CTaskPen*>(m_task))->Start(bDown, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recovers a ruin.
|
// Recovers a ruin.
|
||||||
|
@ -163,7 +163,7 @@ Error CTaskManager::StartTaskPen(bool bDown, int color)
|
||||||
Error CTaskManager::StartTaskRecover()
|
Error CTaskManager::StartTaskRecover()
|
||||||
{
|
{
|
||||||
m_task = new CTaskRecover(m_iMan, m_object);
|
m_task = new CTaskRecover(m_iMan, m_object);
|
||||||
return ((CTaskRecover*)m_task)->Start();
|
return (static_cast<CTaskRecover*>(m_task))->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deploys the shield.
|
// Deploys the shield.
|
||||||
|
@ -173,15 +173,15 @@ Error CTaskManager::StartTaskShield(TaskShieldMode mode, float delay)
|
||||||
if ( mode == TSM_UP )
|
if ( mode == TSM_UP )
|
||||||
{
|
{
|
||||||
m_task = new CTaskShield(m_iMan, m_object);
|
m_task = new CTaskShield(m_iMan, m_object);
|
||||||
return ((CTaskShield*)m_task)->Start(mode, delay);
|
return (static_cast<CTaskShield*>(m_task))->Start(mode, delay);
|
||||||
}
|
}
|
||||||
if ( mode == TSM_DOWN && m_task != 0 )
|
if ( mode == TSM_DOWN && m_task != 0 )
|
||||||
{
|
{
|
||||||
return ((CTaskShield*)m_task)->Start(mode, delay);
|
return (static_cast<CTaskShield*>(m_task))->Start(mode, delay);
|
||||||
}
|
}
|
||||||
if ( mode == TSM_UPDATE && m_task != 0 )
|
if ( mode == TSM_UPDATE && m_task != 0 )
|
||||||
{
|
{
|
||||||
return ((CTaskShield*)m_task)->Start(mode, delay);
|
return (static_cast<CTaskShield*>(m_task))->Start(mode, delay);
|
||||||
}
|
}
|
||||||
return ERR_GENERIC;
|
return ERR_GENERIC;
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ Error CTaskManager::StartTaskFire(float delay)
|
||||||
{
|
{
|
||||||
m_bPilot = true;
|
m_bPilot = true;
|
||||||
m_task = new CTaskFire(m_iMan, m_object);
|
m_task = new CTaskFire(m_iMan, m_object);
|
||||||
return ((CTaskFire*)m_task)->Start(delay);
|
return (static_cast<CTaskFire*>(m_task))->Start(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shoots with the ant.
|
// Shoots with the ant.
|
||||||
|
@ -200,7 +200,7 @@ Error CTaskManager::StartTaskFire(float delay)
|
||||||
Error CTaskManager::StartTaskFireAnt(Math::Vector impact)
|
Error CTaskManager::StartTaskFireAnt(Math::Vector impact)
|
||||||
{
|
{
|
||||||
m_task = new CTaskFireAnt(m_iMan, m_object);
|
m_task = new CTaskFireAnt(m_iMan, m_object);
|
||||||
return ((CTaskFireAnt*)m_task)->Start(impact);
|
return (static_cast<CTaskFireAnt*>(m_task))->Start(impact);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adjusts higher.
|
// Adjusts higher.
|
||||||
|
@ -208,7 +208,7 @@ Error CTaskManager::StartTaskFireAnt(Math::Vector impact)
|
||||||
Error CTaskManager::StartTaskGunGoal(float dirV, float dirH)
|
Error CTaskManager::StartTaskGunGoal(float dirV, float dirH)
|
||||||
{
|
{
|
||||||
m_task = new CTaskGunGoal(m_iMan, m_object);
|
m_task = new CTaskGunGoal(m_iMan, m_object);
|
||||||
return ((CTaskGunGoal*)m_task)->Start(dirV, dirH);
|
return (static_cast<CTaskGunGoal*>(m_task))->Start(dirV, dirH);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Suicide of the spider.
|
// Suicide of the spider.
|
||||||
|
@ -216,7 +216,7 @@ Error CTaskManager::StartTaskGunGoal(float dirV, float dirH)
|
||||||
Error CTaskManager::StartTaskSpiderExplo()
|
Error CTaskManager::StartTaskSpiderExplo()
|
||||||
{
|
{
|
||||||
m_task = new CTaskSpiderExplo(m_iMan, m_object);
|
m_task = new CTaskSpiderExplo(m_iMan, m_object);
|
||||||
return ((CTaskSpiderExplo*)m_task)->Start();
|
return (static_cast<CTaskSpiderExplo*>(m_task))->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset.
|
// Reset.
|
||||||
|
@ -224,7 +224,7 @@ Error CTaskManager::StartTaskSpiderExplo()
|
||||||
Error CTaskManager::StartTaskReset(Math::Vector goal, Math::Vector angle)
|
Error CTaskManager::StartTaskReset(Math::Vector goal, Math::Vector angle)
|
||||||
{
|
{
|
||||||
m_task = new CTaskReset(m_iMan, m_object);
|
m_task = new CTaskReset(m_iMan, m_object);
|
||||||
return ((CTaskReset*)m_task)->Start(goal, angle);
|
return (static_cast<CTaskReset*>(m_task))->Start(goal, angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,14 +16,11 @@
|
||||||
|
|
||||||
// taskmanip.cpp
|
// taskmanip.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskmanip.h"
|
#include "object/task/taskmanip.h"
|
||||||
|
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "old/terrain.h"
|
#include "graphics/engine/terrain.h"
|
||||||
#include "old/pyro.h"
|
#include "graphics/engine/pyro.h"
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "object/robotmain.h"
|
#include "object/robotmain.h"
|
||||||
#include "physics/physics.h"
|
#include "physics/physics.h"
|
||||||
|
@ -65,8 +62,8 @@ bool CTaskManip::EventProcess(const Event &event)
|
||||||
float angle, a, g, cirSpeed, progress;
|
float angle, a, g, cirSpeed, progress;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
if ( m_bBee ) // bee?
|
if ( m_bBee ) // bee?
|
||||||
|
@ -76,10 +73,10 @@ bool CTaskManip::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_bTurn ) // preliminary rotation?
|
if ( m_bTurn ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
a = m_object->RetAngleY(0);
|
a = m_object->GetAngleY(0);
|
||||||
g = m_angle;
|
g = m_angle;
|
||||||
cirSpeed = Math::Direction(a, g)*1.0f;
|
cirSpeed = Math::Direction(a, g)*1.0f;
|
||||||
if ( m_physics->RetType() == TYPE_FLYING ) // flying on the ground?
|
if ( m_physics->GetType() == TYPE_FLYING ) // flying on the ground?
|
||||||
{
|
{
|
||||||
cirSpeed *= 4.0f; // more fishing
|
cirSpeed *= 4.0f; // more fishing
|
||||||
}
|
}
|
||||||
|
@ -107,23 +104,23 @@ bool CTaskManip::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
if ( m_step == 0 ) // fall?
|
if ( m_step == 0 ) // fall?
|
||||||
{
|
{
|
||||||
pos = m_object->RetPosition(1);
|
pos = m_object->GetPosition(1);
|
||||||
pos.y = 3.0f-progress*2.0f;
|
pos.y = 3.0f-progress*2.0f;
|
||||||
m_object->SetPosition(1, pos);
|
m_object->SetPosition(1, pos);
|
||||||
}
|
}
|
||||||
if ( m_step == 1 ) // farm?
|
if ( m_step == 1 ) // farm?
|
||||||
{
|
{
|
||||||
pos = m_object->RetPosition(2);
|
pos = m_object->GetPosition(2);
|
||||||
pos.z = -1.5f+progress*0.5f;
|
pos.z = -1.5f+progress*0.5f;
|
||||||
m_object->SetPosition(2, pos);
|
m_object->SetPosition(2, pos);
|
||||||
|
|
||||||
pos = m_object->RetPosition(3);
|
pos = m_object->GetPosition(3);
|
||||||
pos.z = 1.5f-progress*0.5f;
|
pos.z = 1.5f-progress*0.5f;
|
||||||
m_object->SetPosition(3, pos);
|
m_object->SetPosition(3, pos);
|
||||||
}
|
}
|
||||||
if ( m_step == 2 ) // up?
|
if ( m_step == 2 ) // up?
|
||||||
{
|
{
|
||||||
pos = m_object->RetPosition(1);
|
pos = m_object->GetPosition(1);
|
||||||
pos.y = 3.0f-(1.0f-progress)*2.0f;
|
pos.y = 3.0f-(1.0f-progress)*2.0f;
|
||||||
m_object->SetPosition(1, pos);
|
m_object->SetPosition(1, pos);
|
||||||
}
|
}
|
||||||
|
@ -132,23 +129,23 @@ bool CTaskManip::EventProcess(const Event &event)
|
||||||
{
|
{
|
||||||
if ( m_step == 0 ) // fall?
|
if ( m_step == 0 ) // fall?
|
||||||
{
|
{
|
||||||
pos = m_object->RetPosition(1);
|
pos = m_object->GetPosition(1);
|
||||||
pos.y = 3.0f-progress*2.0f;
|
pos.y = 3.0f-progress*2.0f;
|
||||||
m_object->SetPosition(1, pos);
|
m_object->SetPosition(1, pos);
|
||||||
}
|
}
|
||||||
if ( m_step == 1 ) // farm?
|
if ( m_step == 1 ) // farm?
|
||||||
{
|
{
|
||||||
pos = m_object->RetPosition(2);
|
pos = m_object->GetPosition(2);
|
||||||
pos.z = -1.5f+(1.0f-progress)*0.5f;
|
pos.z = -1.5f+(1.0f-progress)*0.5f;
|
||||||
m_object->SetPosition(2, pos);
|
m_object->SetPosition(2, pos);
|
||||||
|
|
||||||
pos = m_object->RetPosition(3);
|
pos = m_object->GetPosition(3);
|
||||||
pos.z = 1.5f-(1.0f-progress)*0.5f;
|
pos.z = 1.5f-(1.0f-progress)*0.5f;
|
||||||
m_object->SetPosition(3, pos);
|
m_object->SetPosition(3, pos);
|
||||||
}
|
}
|
||||||
if ( m_step == 2 ) // up?
|
if ( m_step == 2 ) // up?
|
||||||
{
|
{
|
||||||
pos = m_object->RetPosition(1);
|
pos = m_object->GetPosition(1);
|
||||||
pos.y = 3.0f-(1.0f-progress)*2.0f;
|
pos.y = 3.0f-(1.0f-progress)*2.0f;
|
||||||
m_object->SetPosition(1, pos);
|
m_object->SetPosition(1, pos);
|
||||||
}
|
}
|
||||||
|
@ -238,7 +235,7 @@ void CTaskManip::InitAngle()
|
||||||
|
|
||||||
for ( i=0 ; i<5 ; i++ )
|
for ( i=0 ; i<5 ; i++ )
|
||||||
{
|
{
|
||||||
m_initialAngle[i] = m_object->RetAngleZ(i+1);
|
m_initialAngle[i] = m_object->GetAngleZ(i+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
max = 0.0f;
|
max = 0.0f;
|
||||||
|
@ -250,10 +247,10 @@ void CTaskManip::InitAngle()
|
||||||
if ( m_speed > 3.0f ) m_speed = 3.0f; // piano, ma non troppo (?)
|
if ( m_speed > 3.0f ) m_speed = 3.0f; // piano, ma non troppo (?)
|
||||||
|
|
||||||
energy = 0.0f;
|
energy = 0.0f;
|
||||||
power = m_object->RetPower();
|
power = m_object->GetPower();
|
||||||
if ( power != 0 )
|
if ( power != 0 )
|
||||||
{
|
{
|
||||||
energy = power->RetEnergy();
|
energy = power->GetEnergy();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( energy == 0.0f )
|
if ( energy == 0.0f )
|
||||||
|
@ -288,12 +285,12 @@ 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, *power;
|
||||||
CPyro *pyro;
|
Gfx::CPyro *pyro;
|
||||||
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;
|
||||||
|
|
||||||
m_arm = arm;
|
m_arm = arm;
|
||||||
m_height = 0.0f;
|
m_height = 0.0f;
|
||||||
|
@ -301,7 +298,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
m_speed = 1.0f/1.5f;
|
m_speed = 1.0f/1.5f;
|
||||||
|
|
||||||
iAngle = m_object->RetAngleY(0);
|
iAngle = m_object->GetAngleY(0);
|
||||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||||
oAngle = iAngle;
|
oAngle = iAngle;
|
||||||
|
|
||||||
|
@ -314,12 +311,12 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
|
|
||||||
m_physics->SetMotorSpeed(Math::Vector(0.0f, 0.0f, 0.0f));
|
m_physics->SetMotorSpeed(Math::Vector(0.0f, 0.0f, 0.0f));
|
||||||
|
|
||||||
type = m_object->RetType();
|
type = m_object->GetType();
|
||||||
if ( type == OBJECT_BEE ) // bee?
|
if ( type == OBJECT_BEE ) // bee?
|
||||||
{
|
{
|
||||||
if ( m_object->RetFret() == 0 )
|
if ( m_object->GetFret() == 0 )
|
||||||
{
|
{
|
||||||
if ( !m_physics->RetLand() ) return ERR_MANIP_FLY;
|
if ( !m_physics->GetLand() ) return ERR_MANIP_FLY;
|
||||||
|
|
||||||
other = SearchTakeUnderObject(m_targetPos, MARGIN_BEE);
|
other = SearchTakeUnderObject(m_targetPos, MARGIN_BEE);
|
||||||
if ( other == 0 ) return ERR_MANIP_NIL;
|
if ( other == 0 ) return ERR_MANIP_NIL;
|
||||||
|
@ -330,19 +327,19 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
other = m_object->RetFret(); // other = ball
|
other = m_object->GetFret(); // other = ball
|
||||||
m_object->SetFret(0); // lick the ball
|
m_object->SetFret(0); // lick the ball
|
||||||
other->SetTruck(0);
|
other->SetTruck(0);
|
||||||
pos = m_object->RetPosition(0);
|
pos = m_object->GetPosition(0);
|
||||||
pos.y -= 3.0f;
|
pos.y -= 3.0f;
|
||||||
other->SetPosition(0, pos);
|
other->SetPosition(0, pos);
|
||||||
|
|
||||||
pos = m_object->RetPosition(0);
|
pos = m_object->GetPosition(0);
|
||||||
pos.y += 2.0f;
|
pos.y += 2.0f;
|
||||||
m_object->SetPosition(0, pos); // against the top of jump
|
m_object->SetPosition(0, pos); // against the top of jump
|
||||||
|
|
||||||
pyro = new CPyro(m_iMan);
|
pyro = new Gfx::CPyro(m_iMan);
|
||||||
pyro->Create(PT_FALL, other); // the ball falls
|
pyro->Create(Gfx::PT_FALL, other); // the ball falls
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bBee = true;
|
m_bBee = true;
|
||||||
|
@ -361,13 +358,13 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_energy = 0.0f;
|
m_energy = 0.0f;
|
||||||
power = m_object->RetPower();
|
power = m_object->GetPower();
|
||||||
if ( power != 0 )
|
if ( power != 0 )
|
||||||
{
|
{
|
||||||
m_energy = power->RetEnergy();
|
m_energy = power->GetEnergy();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !m_physics->RetLand() ) return ERR_MANIP_FLY;
|
if ( !m_physics->GetLand() ) return ERR_MANIP_FLY;
|
||||||
|
|
||||||
if ( type != OBJECT_MOBILEfa &&
|
if ( type != OBJECT_MOBILEfa &&
|
||||||
type != OBJECT_MOBILEta &&
|
type != OBJECT_MOBILEta &&
|
||||||
|
@ -385,7 +382,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
|
|
||||||
if ( order == TMO_AUTO )
|
if ( order == TMO_AUTO )
|
||||||
{
|
{
|
||||||
if ( m_object->RetFret() == 0 )
|
if ( m_object->GetFret() == 0 )
|
||||||
{
|
{
|
||||||
m_order = TMO_GRAB;
|
m_order = TMO_GRAB;
|
||||||
}
|
}
|
||||||
|
@ -399,16 +396,16 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
m_order = order;
|
m_order = order;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_order == TMO_GRAB && m_object->RetFret() != 0 )
|
if ( m_order == TMO_GRAB && m_object->GetFret() != 0 )
|
||||||
{
|
{
|
||||||
return ERR_MANIP_BUSY;
|
return ERR_MANIP_BUSY;
|
||||||
}
|
}
|
||||||
if ( m_order == TMO_DROP && m_object->RetFret() == 0 )
|
if ( m_order == TMO_DROP && m_object->GetFret() == 0 )
|
||||||
{
|
{
|
||||||
return ERR_MANIP_EMPTY;
|
return ERR_MANIP_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
//? speed = m_physics->RetMotorSpeed();
|
//? speed = m_physics->GetMotorSpeed();
|
||||||
//? if ( speed.x != 0.0f ||
|
//? if ( speed.x != 0.0f ||
|
||||||
//? speed.z != 0.0f ) return ERR_MANIP_MOTOR;
|
//? speed.z != 0.0f ) return ERR_MANIP_MOTOR;
|
||||||
|
|
||||||
|
@ -427,7 +424,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
}
|
}
|
||||||
else if ( other != 0 && oDist < fDist )
|
else if ( other != 0 && oDist < fDist )
|
||||||
{
|
{
|
||||||
if ( other->RetPower() == 0 ) return ERR_MANIP_NIL;
|
if ( other->GetPower() == 0 ) return ERR_MANIP_NIL;
|
||||||
m_targetPos = oPos;
|
m_targetPos = oPos;
|
||||||
m_angle = oAngle;
|
m_angle = oAngle;
|
||||||
m_height = oHeight;
|
m_height = oHeight;
|
||||||
|
@ -451,7 +448,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
}
|
}
|
||||||
if ( m_arm == TMA_POWER )
|
if ( m_arm == TMA_POWER )
|
||||||
{
|
{
|
||||||
if ( m_object->RetPower() == 0 ) return ERR_MANIP_NIL;
|
if ( m_object->GetPower() == 0 ) return ERR_MANIP_NIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,7 +457,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
if ( m_arm == TMA_FFRONT )
|
if ( m_arm == TMA_FFRONT )
|
||||||
{
|
{
|
||||||
other = SearchOtherObject(true, oPos, oDist, oAngle, oHeight);
|
other = SearchOtherObject(true, oPos, oDist, oAngle, oHeight);
|
||||||
if ( other != 0 && other->RetPower() == 0 )
|
if ( other != 0 && other->GetPower() == 0 )
|
||||||
{
|
{
|
||||||
m_targetPos = oPos;
|
m_targetPos = oPos;
|
||||||
m_angle = oAngle;
|
m_angle = oAngle;
|
||||||
|
@ -479,27 +476,27 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
|
||||||
}
|
}
|
||||||
if ( m_arm == TMA_POWER )
|
if ( m_arm == TMA_POWER )
|
||||||
{
|
{
|
||||||
if ( m_object->RetPower() != 0 ) return ERR_MANIP_OCC;
|
if ( m_object->GetPower() != 0 ) return ERR_MANIP_OCC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_targetPos);
|
dist = Math::Distance(m_object->GetPosition(0), m_targetPos);
|
||||||
len = dist-TAKE_DIST;
|
len = dist-TAKE_DIST;
|
||||||
if ( m_arm == TMA_OTHER ) len -= TAKE_DIST_OTHER;
|
if ( m_arm == TMA_OTHER ) len -= TAKE_DIST_OTHER;
|
||||||
if ( len < 0.0f ) len = 0.0f;
|
if ( len < 0.0f ) len = 0.0f;
|
||||||
if ( m_arm == TMA_FBACK ) len = -len;
|
if ( m_arm == TMA_FBACK ) len = -len;
|
||||||
m_advanceLength = dist-m_physics->RetLinLength(len);
|
m_advanceLength = dist-m_physics->GetLinLength(len);
|
||||||
if ( dist <= m_advanceLength+0.2f ) m_move = 0.0f; // not necessary to advance
|
if ( dist <= m_advanceLength+0.2f ) m_move = 0.0f; // not necessary to advance
|
||||||
|
|
||||||
if ( m_energy == 0.0f ) m_move = 0.0f;
|
if ( m_energy == 0.0f ) m_move = 0.0f;
|
||||||
|
|
||||||
if ( m_move != 0.0f ) // forward or backward?
|
if ( m_move != 0.0f ) // forward or backward?
|
||||||
{
|
{
|
||||||
m_timeLimit = m_physics->RetLinTimeLength(fabs(len))*1.5f;
|
m_timeLimit = m_physics->GetLinTimeLength(fabs(len))*1.5f;
|
||||||
if ( m_timeLimit < 0.5f ) m_timeLimit = 0.5f;
|
if ( m_timeLimit < 0.5f ) m_timeLimit = 0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_object->RetFret() == 0 ) // not carrying anything?
|
if ( m_object->GetFret() == 0 ) // not carrying anything?
|
||||||
{
|
{
|
||||||
m_hand = TMH_OPEN; // open clamp
|
m_hand = TMH_OPEN; // open clamp
|
||||||
}
|
}
|
||||||
|
@ -540,7 +537,7 @@ Error CTaskManip::IsEnded()
|
||||||
float angle, dist;
|
float angle, dist;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
|
|
||||||
if ( m_bBee ) // bee?
|
if ( m_bBee ) // bee?
|
||||||
|
@ -550,7 +547,7 @@ Error CTaskManip::IsEnded()
|
||||||
|
|
||||||
if ( m_bTurn ) // preliminary rotation?
|
if ( m_bTurn ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
angle = m_object->RetAngleY(0);
|
angle = m_object->GetAngleY(0);
|
||||||
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
||||||
|
|
||||||
if ( Math::TestAngle(angle, m_angle-Math::PI*0.01f, m_angle+Math::PI*0.01f) )
|
if ( Math::TestAngle(angle, m_angle-Math::PI*0.01f, m_angle+Math::PI*0.01f) )
|
||||||
|
@ -570,7 +567,7 @@ Error CTaskManip::IsEnded()
|
||||||
if ( m_timeLimit <= 0.0f )
|
if ( m_timeLimit <= 0.0f )
|
||||||
{
|
{
|
||||||
//OK 1.9
|
//OK 1.9
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_targetPos);
|
dist = Math::Distance(m_object->GetPosition(0), m_targetPos);
|
||||||
if ( dist <= m_advanceLength + 2.0f )
|
if ( dist <= m_advanceLength + 2.0f )
|
||||||
{
|
{
|
||||||
m_move = 0.0f; // advance ended
|
m_move = 0.0f; // advance ended
|
||||||
|
@ -588,7 +585,7 @@ Error CTaskManip::IsEnded()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_targetPos);
|
dist = Math::Distance(m_object->GetPosition(0), m_targetPos);
|
||||||
if ( dist <= m_advanceLength )
|
if ( dist <= m_advanceLength )
|
||||||
{
|
{
|
||||||
m_move = 0.0f; // advance ended
|
m_move = 0.0f; // advance ended
|
||||||
|
@ -624,7 +621,7 @@ Error CTaskManip::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_bSubm ) m_speed = 1.0f/1.5f;
|
if ( m_bSubm ) m_speed = 1.0f/1.5f;
|
||||||
if ( !TruckTakeObject() &&
|
if ( !TruckTakeObject() &&
|
||||||
m_object->RetFret() == 0 )
|
m_object->GetFret() == 0 )
|
||||||
{
|
{
|
||||||
m_hand = TMH_OPEN; // reopens the clamp
|
m_hand = TMH_OPEN; // reopens the clamp
|
||||||
m_arm = TMA_NEUTRAL;
|
m_arm = TMA_NEUTRAL;
|
||||||
|
@ -638,7 +635,7 @@ Error CTaskManip::IsEnded()
|
||||||
(m_fretType == OBJECT_POWER ||
|
(m_fretType == OBJECT_POWER ||
|
||||||
m_fretType == OBJECT_ATOMIC ) )
|
m_fretType == OBJECT_ATOMIC ) )
|
||||||
{
|
{
|
||||||
m_sound->Play(SOUND_POWEROFF, m_object->RetPosition(0));
|
m_sound->Play(SOUND_POWEROFF, m_object->GetPosition(0));
|
||||||
}
|
}
|
||||||
m_arm = TMA_STOCK;
|
m_arm = TMA_STOCK;
|
||||||
InitAngle();
|
InitAngle();
|
||||||
|
@ -653,7 +650,7 @@ Error CTaskManip::IsEnded()
|
||||||
if ( m_step == 1 )
|
if ( m_step == 1 )
|
||||||
{
|
{
|
||||||
if ( m_bSubm ) m_speed = 1.0f/0.7f;
|
if ( m_bSubm ) m_speed = 1.0f/0.7f;
|
||||||
fret = m_object->RetFret();
|
fret = m_object->GetFret();
|
||||||
if ( TruckDeposeObject() )
|
if ( TruckDeposeObject() )
|
||||||
{
|
{
|
||||||
if ( (m_arm == TMA_OTHER ||
|
if ( (m_arm == TMA_OTHER ||
|
||||||
|
@ -661,7 +658,7 @@ Error CTaskManip::IsEnded()
|
||||||
(m_fretType == OBJECT_POWER ||
|
(m_fretType == OBJECT_POWER ||
|
||||||
m_fretType == OBJECT_ATOMIC ) )
|
m_fretType == OBJECT_ATOMIC ) )
|
||||||
{
|
{
|
||||||
m_sound->Play(SOUND_POWERON, m_object->RetPosition(0));
|
m_sound->Play(SOUND_POWERON, m_object->GetPosition(0));
|
||||||
}
|
}
|
||||||
if ( fret != 0 && m_fretType == OBJECT_METAL && m_arm == TMA_FFRONT )
|
if ( fret != 0 && m_fretType == OBJECT_METAL && m_arm == TMA_FFRONT )
|
||||||
{
|
{
|
||||||
|
@ -693,7 +690,7 @@ bool CTaskManip::Abort()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ( m_object->RetFret() == 0 ) // not carrying anything?
|
if ( m_object->GetFret() == 0 ) // not carrying anything?
|
||||||
{
|
{
|
||||||
m_hand = TMH_OPEN; // open clamp
|
m_hand = TMH_OPEN; // open clamp
|
||||||
m_arm = TMA_NEUTRAL;
|
m_arm = TMA_NEUTRAL;
|
||||||
|
@ -729,16 +726,16 @@ CObject* CTaskManip::SearchTakeUnderObject(Math::Vector &pos, float dLimit)
|
||||||
float min, distance;
|
float min, distance;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
iPos = m_object->RetPosition(0);
|
iPos = m_object->GetPosition(0);
|
||||||
|
|
||||||
min = 1000000.0f;
|
min = 1000000.0f;
|
||||||
pBest = 0;
|
pBest = 0;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
|
|
||||||
if ( type != OBJECT_FRET &&
|
if ( type != OBJECT_FRET &&
|
||||||
type != OBJECT_STONE &&
|
type != OBJECT_STONE &&
|
||||||
|
@ -754,11 +751,11 @@ CObject* CTaskManip::SearchTakeUnderObject(Math::Vector &pos, float dLimit)
|
||||||
type != OBJECT_KEYd &&
|
type != OBJECT_KEYd &&
|
||||||
type != OBJECT_TNT ) continue;
|
type != OBJECT_TNT ) continue;
|
||||||
|
|
||||||
if ( pObj->RetTruck() != 0 ) continue; // object transported?
|
if ( pObj->GetTruck() != 0 ) continue; // object transported?
|
||||||
if ( pObj->RetLock() ) continue;
|
if ( pObj->GetLock() ) continue;
|
||||||
if ( pObj->RetZoomY(0) != 1.0f ) continue;
|
if ( pObj->GetZoomY(0) != 1.0f ) continue;
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
distance = Math::Distance(oPos, iPos);
|
distance = Math::Distance(oPos, iPos);
|
||||||
if ( distance <= dLimit &&
|
if ( distance <= dLimit &&
|
||||||
distance < min )
|
distance < min )
|
||||||
|
@ -769,7 +766,7 @@ CObject* CTaskManip::SearchTakeUnderObject(Math::Vector &pos, float dLimit)
|
||||||
}
|
}
|
||||||
if ( pBest != 0 )
|
if ( pBest != 0 )
|
||||||
{
|
{
|
||||||
pos = pBest->RetPosition(0);
|
pos = pBest->GetPosition(0);
|
||||||
}
|
}
|
||||||
return pBest;
|
return pBest;
|
||||||
}
|
}
|
||||||
|
@ -785,8 +782,8 @@ CObject* CTaskManip::SearchTakeFrontObject(bool bAdvance, Math::Vector &pos,
|
||||||
float min, iAngle, bAngle, aLimit, dLimit, f;
|
float min, iAngle, bAngle, aLimit, dLimit, f;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
iPos = m_object->RetPosition(0);
|
iPos = m_object->GetPosition(0);
|
||||||
iAngle = m_object->RetAngleY(0);
|
iAngle = m_object->GetAngleY(0);
|
||||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||||
|
|
||||||
if ( bAdvance && m_energy > 0.0f )
|
if ( bAdvance && m_energy > 0.0f )
|
||||||
|
@ -806,10 +803,10 @@ CObject* CTaskManip::SearchTakeFrontObject(bool bAdvance, Math::Vector &pos,
|
||||||
bAngle = 0.0f;
|
bAngle = 0.0f;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
|
|
||||||
if ( type != OBJECT_FRET &&
|
if ( type != OBJECT_FRET &&
|
||||||
type != OBJECT_STONE &&
|
type != OBJECT_STONE &&
|
||||||
|
@ -830,11 +827,11 @@ CObject* CTaskManip::SearchTakeFrontObject(bool bAdvance, Math::Vector &pos,
|
||||||
type != OBJECT_SCRAP4 &&
|
type != OBJECT_SCRAP4 &&
|
||||||
type != OBJECT_SCRAP5 ) continue;
|
type != OBJECT_SCRAP5 ) continue;
|
||||||
|
|
||||||
if ( pObj->RetTruck() != 0 ) continue; // object transported?
|
if ( pObj->GetTruck() != 0 ) continue; // object transported?
|
||||||
if ( pObj->RetLock() ) continue;
|
if ( pObj->GetLock() ) continue;
|
||||||
if ( pObj->RetZoomY(0) != 1.0f ) continue;
|
if ( pObj->GetZoomY(0) != 1.0f ) continue;
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
distance = fabs(Math::Distance(oPos, iPos)-TAKE_DIST);
|
distance = fabs(Math::Distance(oPos, iPos)-TAKE_DIST);
|
||||||
f = 1.0f-distance/50.0f;
|
f = 1.0f-distance/50.0f;
|
||||||
if ( f < 0.5f ) f = 0.5f;
|
if ( f < 0.5f ) f = 0.5f;
|
||||||
|
@ -859,7 +856,7 @@ CObject* CTaskManip::SearchTakeFrontObject(bool bAdvance, Math::Vector &pos,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos = pBest->RetPosition(0);
|
pos = pBest->GetPosition(0);
|
||||||
distance = min;
|
distance = min;
|
||||||
angle = bAngle;
|
angle = bAngle;
|
||||||
}
|
}
|
||||||
|
@ -877,8 +874,8 @@ CObject* CTaskManip::SearchTakeBackObject(bool bAdvance, Math::Vector &pos,
|
||||||
float min, iAngle, bAngle, aLimit, dLimit, f;
|
float min, iAngle, bAngle, aLimit, dLimit, f;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
iPos = m_object->RetPosition(0);
|
iPos = m_object->GetPosition(0);
|
||||||
iAngle = m_object->RetAngleY(0)+Math::PI;
|
iAngle = m_object->GetAngleY(0)+Math::PI;
|
||||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||||
|
|
||||||
if ( bAdvance && m_energy > 0.0f )
|
if ( bAdvance && m_energy > 0.0f )
|
||||||
|
@ -897,10 +894,10 @@ CObject* CTaskManip::SearchTakeBackObject(bool bAdvance, Math::Vector &pos,
|
||||||
bAngle = 0.0f;
|
bAngle = 0.0f;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
|
|
||||||
if ( type != OBJECT_FRET &&
|
if ( type != OBJECT_FRET &&
|
||||||
type != OBJECT_STONE &&
|
type != OBJECT_STONE &&
|
||||||
|
@ -921,11 +918,11 @@ CObject* CTaskManip::SearchTakeBackObject(bool bAdvance, Math::Vector &pos,
|
||||||
type != OBJECT_SCRAP4 &&
|
type != OBJECT_SCRAP4 &&
|
||||||
type != OBJECT_SCRAP5 ) continue;
|
type != OBJECT_SCRAP5 ) continue;
|
||||||
|
|
||||||
if ( pObj->RetTruck() != 0 ) continue; // object transported?
|
if ( pObj->GetTruck() != 0 ) continue; // object transported?
|
||||||
if ( pObj->RetLock() ) continue;
|
if ( pObj->GetLock() ) continue;
|
||||||
if ( pObj->RetZoomY(0) != 1.0f ) continue;
|
if ( pObj->GetZoomY(0) != 1.0f ) continue;
|
||||||
|
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
distance = fabs(Math::Distance(oPos, iPos)-TAKE_DIST);
|
distance = fabs(Math::Distance(oPos, iPos)-TAKE_DIST);
|
||||||
f = 1.0f-distance/50.0f;
|
f = 1.0f-distance/50.0f;
|
||||||
if ( f < 0.5f ) f = 0.5f;
|
if ( f < 0.5f ) f = 0.5f;
|
||||||
|
@ -950,7 +947,7 @@ CObject* CTaskManip::SearchTakeBackObject(bool bAdvance, Math::Vector &pos,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos = pBest->RetPosition(0);
|
pos = pBest->GetPosition(0);
|
||||||
distance = min;
|
distance = min;
|
||||||
angle = bAngle;
|
angle = bAngle;
|
||||||
}
|
}
|
||||||
|
@ -978,7 +975,7 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos,
|
||||||
if ( m_bSubm ) return 0; // impossible with the submarine
|
if ( m_bSubm ) return 0; // impossible with the submarine
|
||||||
|
|
||||||
if ( !m_object->GetCrashSphere(0, iPos, iRad) ) return 0;
|
if ( !m_object->GetCrashSphere(0, iPos, iRad) ) return 0;
|
||||||
iAngle = m_object->RetAngleY(0);
|
iAngle = m_object->GetAngleY(0);
|
||||||
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
|
||||||
|
|
||||||
if ( bAdvance && m_energy > 0.0f )
|
if ( bAdvance && m_energy > 0.0f )
|
||||||
|
@ -994,12 +991,12 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos,
|
||||||
|
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( pObj == m_object ) continue; // yourself?
|
if ( pObj == m_object ) continue; // yourself?
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type != OBJECT_MOBILEfa &&
|
if ( type != OBJECT_MOBILEfa &&
|
||||||
type != OBJECT_MOBILEta &&
|
type != OBJECT_MOBILEta &&
|
||||||
type != OBJECT_MOBILEwa &&
|
type != OBJECT_MOBILEwa &&
|
||||||
|
@ -1032,22 +1029,22 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos,
|
||||||
type != OBJECT_LABO &&
|
type != OBJECT_LABO &&
|
||||||
type != OBJECT_NUCLEAR ) continue;
|
type != OBJECT_NUCLEAR ) continue;
|
||||||
|
|
||||||
pPower = pObj->RetPower();
|
pPower = pObj->GetPower();
|
||||||
if ( pPower != 0 )
|
if ( pPower != 0 )
|
||||||
{
|
{
|
||||||
if ( pPower->RetLock() ) continue;
|
if ( pPower->GetLock() ) continue;
|
||||||
if ( pPower->RetZoomY(0) != 1.0f ) continue;
|
if ( pPower->GetZoomY(0) != 1.0f ) continue;
|
||||||
|
|
||||||
powerType = pPower->RetType();
|
powerType = pPower->GetType();
|
||||||
if ( powerType == OBJECT_NULL ||
|
if ( powerType == OBJECT_NULL ||
|
||||||
powerType == OBJECT_FIX ) continue;
|
powerType == OBJECT_FIX ) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
mat = pObj->RetWorldMatrix(0);
|
mat = pObj->GetWorldMatrix(0);
|
||||||
character = pObj->RetCharacter();
|
character = pObj->GetCharacter();
|
||||||
oPos = Transform(*mat, character->posPower);
|
oPos = Transform(*mat, character->posPower);
|
||||||
|
|
||||||
oAngle = pObj->RetAngleY(0);
|
oAngle = pObj->GetAngleY(0);
|
||||||
if ( type == OBJECT_TOWER ||
|
if ( type == OBJECT_TOWER ||
|
||||||
type == OBJECT_RESEARCH )
|
type == OBJECT_RESEARCH )
|
||||||
{
|
{
|
||||||
|
@ -1080,7 +1077,7 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos,
|
||||||
angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW !
|
angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW !
|
||||||
if ( Math::TestAngle(angle, iAngle-aLimit, iAngle+aLimit) )
|
if ( Math::TestAngle(angle, iAngle-aLimit, iAngle+aLimit) )
|
||||||
{
|
{
|
||||||
character = pObj->RetCharacter();
|
character = pObj->GetCharacter();
|
||||||
height = character->posPower.y;
|
height = character->posPower.y;
|
||||||
pos = oPos;
|
pos = oPos;
|
||||||
return pObj;
|
return pObj;
|
||||||
|
@ -1105,12 +1102,12 @@ bool CTaskManip::TruckTakeObject()
|
||||||
|
|
||||||
if ( m_arm == TMA_GRAB ) // takes immediately?
|
if ( m_arm == TMA_GRAB ) // takes immediately?
|
||||||
{
|
{
|
||||||
fret = m_object->RetFret();
|
fret = m_object->GetFret();
|
||||||
if ( fret == 0 ) return false; // nothing to take?
|
if ( fret == 0 ) return false; // nothing to take?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
if ( m_object->RetType() == OBJECT_HUMAN ||
|
if ( m_object->GetType() == OBJECT_HUMAN ||
|
||||||
m_object->RetType() == OBJECT_TECH )
|
m_object->GetType() == OBJECT_TECH )
|
||||||
{
|
{
|
||||||
fret->SetTruck(m_object);
|
fret->SetTruck(m_object);
|
||||||
fret->SetTruckPart(4); // takes with the hand
|
fret->SetTruckPart(4); // takes with the hand
|
||||||
|
@ -1150,7 +1147,7 @@ bool CTaskManip::TruckTakeObject()
|
||||||
{
|
{
|
||||||
fret = SearchTakeFrontObject(false, pos, dist, angle);
|
fret = SearchTakeFrontObject(false, pos, dist, angle);
|
||||||
if ( fret == 0 ) return false; // nothing to take?
|
if ( fret == 0 ) return false; // nothing to take?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
if ( m_bSubm )
|
if ( m_bSubm )
|
||||||
{
|
{
|
||||||
|
@ -1182,7 +1179,7 @@ bool CTaskManip::TruckTakeObject()
|
||||||
{
|
{
|
||||||
fret = SearchTakeBackObject(false, pos, dist, angle);
|
fret = SearchTakeBackObject(false, pos, dist, angle);
|
||||||
if ( fret == 0 ) return false; // nothing to take?
|
if ( fret == 0 ) return false; // nothing to take?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
fret->SetTruck(m_object);
|
fret->SetTruck(m_object);
|
||||||
fret->SetTruckPart(3); // takes with the hand
|
fret->SetTruckPart(3); // takes with the hand
|
||||||
|
@ -1198,9 +1195,9 @@ bool CTaskManip::TruckTakeObject()
|
||||||
|
|
||||||
if ( m_arm == TMA_POWER ) // takes battery in the back?
|
if ( m_arm == TMA_POWER ) // takes battery in the back?
|
||||||
{
|
{
|
||||||
fret = m_object->RetPower();
|
fret = m_object->GetPower();
|
||||||
if ( fret == 0 ) return false; // no battery?
|
if ( fret == 0 ) return false; // no battery?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
pos = Math::Vector(4.7f, 0.0f, 0.0f); // relative to the hand (lem4)
|
pos = Math::Vector(4.7f, 0.0f, 0.0f); // relative to the hand (lem4)
|
||||||
fret->SetPosition(0, pos);
|
fret->SetPosition(0, pos);
|
||||||
|
@ -1218,9 +1215,9 @@ bool CTaskManip::TruckTakeObject()
|
||||||
other = SearchOtherObject(false, pos, dist, angle, m_height);
|
other = SearchOtherObject(false, pos, dist, angle, m_height);
|
||||||
if ( other == 0 ) return false;
|
if ( other == 0 ) return false;
|
||||||
|
|
||||||
fret = other->RetPower();
|
fret = other->GetPower();
|
||||||
if ( fret == 0 ) return false; // the other does not have a battery?
|
if ( fret == 0 ) return false; // the other does not have a battery?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
other->SetPower(0);
|
other->SetPower(0);
|
||||||
fret->SetTruck(m_object);
|
fret->SetTruck(m_object);
|
||||||
|
@ -1251,15 +1248,15 @@ bool CTaskManip::TruckDeposeObject()
|
||||||
|
|
||||||
if ( m_arm == TMA_FFRONT ) // deposits on the ground in front?
|
if ( m_arm == TMA_FFRONT ) // deposits on the ground in front?
|
||||||
{
|
{
|
||||||
fret = m_object->RetFret();
|
fret = m_object->GetFret();
|
||||||
if ( fret == 0 ) return false; // nothing transported?
|
if ( fret == 0 ) return false; // nothing transported?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
mat = fret->RetWorldMatrix(0);
|
mat = fret->GetWorldMatrix(0);
|
||||||
pos = Transform(*mat, Math::Vector(0.0f, 1.0f, 0.0f));
|
pos = Transform(*mat, Math::Vector(0.0f, 1.0f, 0.0f));
|
||||||
m_terrain->MoveOnFloor(pos);
|
m_terrain->AdjustToFloor(pos);
|
||||||
fret->SetPosition(0, pos);
|
fret->SetPosition(0, pos);
|
||||||
fret->SetAngleY(0, m_object->RetAngleY(0)+Math::PI/2.0f);
|
fret->SetAngleY(0, m_object->GetAngleY(0)+Math::PI/2.0f);
|
||||||
fret->SetAngleX(0, 0.0f);
|
fret->SetAngleX(0, 0.0f);
|
||||||
fret->SetAngleZ(0, 0.0f);
|
fret->SetAngleZ(0, 0.0f);
|
||||||
fret->FloorAdjust(); // plate well on the ground
|
fret->FloorAdjust(); // plate well on the ground
|
||||||
|
@ -1270,15 +1267,15 @@ bool CTaskManip::TruckDeposeObject()
|
||||||
|
|
||||||
if ( m_arm == TMA_FBACK ) // deposited on the ground behind?
|
if ( m_arm == TMA_FBACK ) // deposited on the ground behind?
|
||||||
{
|
{
|
||||||
fret = m_object->RetFret();
|
fret = m_object->GetFret();
|
||||||
if ( fret == 0 ) return false; // nothing transported?
|
if ( fret == 0 ) return false; // nothing transported?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
mat = fret->RetWorldMatrix(0);
|
mat = fret->GetWorldMatrix(0);
|
||||||
pos = Transform(*mat, Math::Vector(0.0f, 1.0f, 0.0f));
|
pos = Transform(*mat, Math::Vector(0.0f, 1.0f, 0.0f));
|
||||||
m_terrain->MoveOnFloor(pos);
|
m_terrain->AdjustToFloor(pos);
|
||||||
fret->SetPosition(0, pos);
|
fret->SetPosition(0, pos);
|
||||||
fret->SetAngleY(0, m_object->RetAngleY(0)+Math::PI/2.0f);
|
fret->SetAngleY(0, m_object->GetAngleY(0)+Math::PI/2.0f);
|
||||||
fret->SetAngleX(0, 0.0f);
|
fret->SetAngleX(0, 0.0f);
|
||||||
fret->SetAngleZ(0, 0.0f);
|
fret->SetAngleZ(0, 0.0f);
|
||||||
|
|
||||||
|
@ -1288,16 +1285,16 @@ bool CTaskManip::TruckDeposeObject()
|
||||||
|
|
||||||
if ( m_arm == TMA_POWER ) // deposits battery in the back?
|
if ( m_arm == TMA_POWER ) // deposits battery in the back?
|
||||||
{
|
{
|
||||||
fret = m_object->RetFret();
|
fret = m_object->GetFret();
|
||||||
if ( fret == 0 ) return false; // nothing transported?
|
if ( fret == 0 ) return false; // nothing transported?
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
if ( m_object->RetPower() != 0 ) return false;
|
if ( m_object->GetPower() != 0 ) return false;
|
||||||
|
|
||||||
fret->SetTruck(m_object);
|
fret->SetTruck(m_object);
|
||||||
fret->SetTruckPart(0); // carried by the base
|
fret->SetTruckPart(0); // carried by the base
|
||||||
|
|
||||||
character = m_object->RetCharacter();
|
character = m_object->GetCharacter();
|
||||||
fret->SetPosition(0, character->posPower);
|
fret->SetPosition(0, character->posPower);
|
||||||
fret->SetAngleY(0, 0.0f);
|
fret->SetAngleY(0, 0.0f);
|
||||||
fret->SetAngleX(0, 0.0f);
|
fret->SetAngleX(0, 0.0f);
|
||||||
|
@ -1312,17 +1309,17 @@ bool CTaskManip::TruckDeposeObject()
|
||||||
other = SearchOtherObject(false, pos, dist, angle, m_height);
|
other = SearchOtherObject(false, pos, dist, angle, m_height);
|
||||||
if ( other == 0 ) return false;
|
if ( other == 0 ) return false;
|
||||||
|
|
||||||
fret = other->RetPower();
|
fret = other->GetPower();
|
||||||
if ( fret != 0 ) return false; // the other already has a battery?
|
if ( fret != 0 ) return false; // the other already has a battery?
|
||||||
|
|
||||||
fret = m_object->RetFret();
|
fret = m_object->GetFret();
|
||||||
if ( fret == 0 ) return false;
|
if ( fret == 0 ) return false;
|
||||||
m_fretType = fret->RetType();
|
m_fretType = fret->GetType();
|
||||||
|
|
||||||
other->SetPower(fret);
|
other->SetPower(fret);
|
||||||
fret->SetTruck(other);
|
fret->SetTruck(other);
|
||||||
|
|
||||||
character = other->RetCharacter();
|
character = other->GetCharacter();
|
||||||
fret->SetPosition(0, character->posPower);
|
fret->SetPosition(0, character->posPower);
|
||||||
fret->SetAngleY(0, 0.0f);
|
fret->SetAngleY(0, 0.0f);
|
||||||
fret->SetAngleX(0, 0.0f);
|
fret->SetAngleX(0, 0.0f);
|
||||||
|
@ -1345,17 +1342,17 @@ bool CTaskManip::IsFreeDeposeObject(Math::Vector pos)
|
||||||
float oRadius;
|
float oRadius;
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
mat = m_object->RetWorldMatrix(0);
|
mat = m_object->GetWorldMatrix(0);
|
||||||
iPos = Transform(*mat, pos);
|
iPos = Transform(*mat, pos);
|
||||||
|
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( pObj == m_object ) continue;
|
if ( pObj == m_object ) continue;
|
||||||
if ( !pObj->RetActif() ) continue; // inactive?
|
if ( !pObj->GetActif() ) continue; // inactive?
|
||||||
if ( pObj->RetTruck() != 0 ) continue; // object transported?
|
if ( pObj->GetTruck() != 0 ) continue; // object transported?
|
||||||
|
|
||||||
j = 0;
|
j = 0;
|
||||||
while ( pObj->GetCrashSphere(j++, oPos, oRadius) )
|
while ( pObj->GetCrashSphere(j++, oPos, oRadius) )
|
||||||
|
@ -1375,7 +1372,7 @@ void CTaskManip::SoundManip(float time, float amplitude, float frequency)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = m_sound->Play(SOUND_MANIP, m_object->RetPosition(0), 0.0f, 0.3f*frequency, true);
|
i = m_sound->Play(SOUND_MANIP, m_object->GetPosition(0), 0.0f, 0.3f*frequency, true);
|
||||||
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, 0.1f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, 0.1f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, time-0.1f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, time-0.1f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 0.0f, 0.3f*frequency, 0.1f, SOPER_STOP);
|
m_sound->AddEnvelope(i, 0.0f, 0.3f*frequency, 0.1f, SOPER_STOP);
|
||||||
|
|
|
@ -16,12 +16,9 @@
|
||||||
|
|
||||||
// taskpen.cpp
|
// taskpen.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskpen.h"
|
#include "object/task/taskpen.h"
|
||||||
|
|
||||||
#include "old/particule.h"
|
#include "graphics/engine/particle.h"
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "object/object.h"
|
#include "object/object.h"
|
||||||
|
|
||||||
|
@ -49,8 +46,8 @@ bool CTaskPen::EventProcess(const Event &event)
|
||||||
Math::Point dim;
|
Math::Point dim;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
if ( m_delay == 0.0f )
|
if ( m_delay == 0.0f )
|
||||||
|
@ -67,17 +64,17 @@ bool CTaskPen::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_phase == TPP_UP ) // back the pencil
|
if ( m_phase == TPP_UP ) // back the pencil
|
||||||
{
|
{
|
||||||
i = AngleToRank(m_object->RetAngleY(1));
|
i = AngleToRank(m_object->GetAngleY(1));
|
||||||
pos = m_object->RetPosition(10+i);
|
pos = m_object->GetPosition(10+i);
|
||||||
pos.y = -3.2f*(1.0f-m_progress);
|
pos.y = -3.2f*(1.0f-m_progress);
|
||||||
m_object->SetPosition(10+i, pos);
|
m_object->SetPosition(10+i, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_phase == TPP_TURN ) // turns the carousel?
|
if ( m_phase == TPP_TURN ) // turns the carousel?
|
||||||
{
|
{
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.05f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos = m_supportPos;
|
pos = m_supportPos;
|
||||||
pos.x += (Math::Rand()-0.5f)*5.0f;
|
pos.x += (Math::Rand()-0.5f)*5.0f;
|
||||||
|
@ -87,7 +84,7 @@ bool CTaskPen::EventProcess(const Event &event)
|
||||||
speed.y = Math::Rand()*2.0f;
|
speed.y = Math::Rand()*2.0f;
|
||||||
dim.x = Math::Rand()*1.5f+2.0f;
|
dim.x = Math::Rand()*1.5f+2.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTISMOKE3, 4.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISMOKE3, 4.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_object->SetAngleY(1, m_oldAngle+(m_newAngle-m_oldAngle)*m_progress);
|
m_object->SetAngleY(1, m_oldAngle+(m_newAngle-m_oldAngle)*m_progress);
|
||||||
|
@ -95,9 +92,9 @@ bool CTaskPen::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_phase == TPP_DOWN ) // down the pencil?
|
if ( m_phase == TPP_DOWN ) // down the pencil?
|
||||||
{
|
{
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.05f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos = m_supportPos;
|
pos = m_supportPos;
|
||||||
pos.x += (Math::Rand()-0.5f)*5.0f;
|
pos.x += (Math::Rand()-0.5f)*5.0f;
|
||||||
|
@ -107,11 +104,11 @@ bool CTaskPen::EventProcess(const Event &event)
|
||||||
speed.y = Math::Rand()*5.0f;
|
speed.y = Math::Rand()*5.0f;
|
||||||
dim.x = Math::Rand()*1.0f+1.0f;
|
dim.x = Math::Rand()*1.0f+1.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIVAPOR, 4.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIVAPOR, 4.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
i = AngleToRank(m_object->RetAngleY(1));
|
i = AngleToRank(m_object->GetAngleY(1));
|
||||||
pos = m_object->RetPosition(10+i);
|
pos = m_object->GetPosition(10+i);
|
||||||
if ( m_timeDown == 0.0f )
|
if ( m_timeDown == 0.0f )
|
||||||
{
|
{
|
||||||
pos.y = 0.0f;
|
pos.y = 0.0f;
|
||||||
|
@ -138,16 +135,16 @@ Error CTaskPen::Start(bool bDown, int color)
|
||||||
|
|
||||||
m_bError = true; // operation impossible
|
m_bError = true; // operation impossible
|
||||||
|
|
||||||
type = m_object->RetType();
|
type = m_object->GetType();
|
||||||
if ( type != OBJECT_MOBILEdr ) return ERR_FIRE_VEH;
|
if ( type != OBJECT_MOBILEdr ) return ERR_FIRE_VEH;
|
||||||
|
|
||||||
m_bError = false; // ok
|
m_bError = false; // ok
|
||||||
|
|
||||||
m_oldAngle = m_object->RetAngleY(1);
|
m_oldAngle = m_object->GetAngleY(1);
|
||||||
m_newAngle = ColorToAngle(color);
|
m_newAngle = ColorToAngle(color);
|
||||||
|
|
||||||
i = AngleToRank(m_oldAngle);
|
i = AngleToRank(m_oldAngle);
|
||||||
pos = m_object->RetPosition(10+i);
|
pos = m_object->GetPosition(10+i);
|
||||||
|
|
||||||
if ( pos.y == 0.0f ) // pencil at the top?
|
if ( pos.y == 0.0f ) // pencil at the top?
|
||||||
{
|
{
|
||||||
|
@ -167,7 +164,7 @@ Error CTaskPen::Start(bool bDown, int color)
|
||||||
m_timeDown = 0.0f;
|
m_timeDown = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
mat = m_object->RetWorldMatrix(0);
|
mat = m_object->GetWorldMatrix(0);
|
||||||
pos = Math::Vector(-3.0f, 7.0f, 0.0f);
|
pos = Math::Vector(-3.0f, 7.0f, 0.0f);
|
||||||
pos = Math::Transform(*mat, pos); // position of carousel
|
pos = Math::Transform(*mat, pos); // position of carousel
|
||||||
m_supportPos = pos;
|
m_supportPos = pos;
|
||||||
|
@ -182,7 +179,7 @@ Error CTaskPen::Start(bool bDown, int color)
|
||||||
SoundManip(m_timeUp, 1.0f, 0.5f);
|
SoundManip(m_timeUp, 1.0f, 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
|
|
||||||
//? m_camera->StartCentering(m_object, Math::PI*0.60f, 99.9f, 5.0f, 0.5f);
|
//? m_camera->StartCentering(m_object, Math::PI*0.60f, 99.9f, 5.0f, 0.5f);
|
||||||
|
|
||||||
|
@ -193,7 +190,7 @@ Error CTaskPen::Start(bool bDown, int color)
|
||||||
|
|
||||||
Error CTaskPen::IsEnded()
|
Error CTaskPen::IsEnded()
|
||||||
{
|
{
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
|
|
||||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||||
|
@ -205,7 +202,7 @@ Error CTaskPen::IsEnded()
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
m_delay = fabs(m_oldAngle-m_newAngle)/Math::PI;
|
m_delay = fabs(m_oldAngle-m_newAngle)/Math::PI;
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
if ( m_delay > 0.0f )
|
if ( m_delay > 0.0f )
|
||||||
{
|
{
|
||||||
SoundManip(m_delay, 1.0f, 1.0f);
|
SoundManip(m_delay, 1.0f, 1.0f);
|
||||||
|
@ -220,7 +217,7 @@ Error CTaskPen::IsEnded()
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
m_delay = m_timeDown;
|
m_delay = m_timeDown;
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
return ERR_CONTINUE;
|
return ERR_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +240,7 @@ void CTaskPen::SoundManip(float time, float amplitude, float frequency)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = m_sound->Play(SOUND_MANIP, m_object->RetPosition(0), 0.0f, 0.3f*frequency, true);
|
i = m_sound->Play(SOUND_MANIP, m_object->GetPosition(0), 0.0f, 0.3f*frequency, true);
|
||||||
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, 0.1f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, 0.1f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, time-0.1f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 0.5f*amplitude, 1.0f*frequency, time-0.1f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 0.0f, 0.3f*frequency, 0.1f, SOPER_STOP);
|
m_sound->AddEnvelope(i, 0.0f, 0.3f*frequency, 0.1f, SOPER_STOP);
|
||||||
|
@ -257,7 +254,7 @@ int CTaskPen::AngleToRank(float angle)
|
||||||
//? return (int)(angle/(-45.0f*Math::PI/180.0f));
|
//? return (int)(angle/(-45.0f*Math::PI/180.0f));
|
||||||
angle = -angle;
|
angle = -angle;
|
||||||
angle += (45.0f*Math::PI/180.0f)/2.0f;
|
angle += (45.0f*Math::PI/180.0f)/2.0f;
|
||||||
return (int)(angle/(45.0f*Math::PI/180.0f));
|
return static_cast<int>(angle/(45.0f*Math::PI/180.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converting a color to the angle of carousel of pencils.
|
// Converting a color to the angle of carousel of pencils.
|
||||||
|
|
|
@ -57,8 +57,8 @@ protected:
|
||||||
float m_progress;
|
float m_progress;
|
||||||
float m_delay;
|
float m_delay;
|
||||||
float m_time;
|
float m_time;
|
||||||
float m_lastParticule;
|
float m_lastParticle;
|
||||||
Math::Vector m_supportPos;
|
Math::Vector m_supportPos;
|
||||||
|
|
||||||
float m_timeUp;
|
float m_timeUp;
|
||||||
float m_oldAngle;
|
float m_oldAngle;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "old/particule.h"
|
#include "graphics/engine/particle.h"
|
||||||
#include "physics/physics.h"
|
#include "physics/physics.h"
|
||||||
#include "ui/displaytext.h"
|
#include "ui/displaytext.h"
|
||||||
|
|
||||||
|
@ -58,13 +58,13 @@ bool CTaskRecover::EventProcess(const Event &event)
|
||||||
Math::Point dim;
|
Math::Point dim;
|
||||||
float a, g, cirSpeed, angle, energy, dist, linSpeed;
|
float a, g, cirSpeed, angle, energy, dist, linSpeed;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
if ( m_phase == TRP_TURN ) // preliminary rotation?
|
if ( m_phase == TRP_TURN ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
a = m_object->RetAngleY(0);
|
a = m_object->GetAngleY(0);
|
||||||
g = m_angle;
|
g = m_angle;
|
||||||
cirSpeed = Math::Direction(a, g)*1.0f;
|
cirSpeed = Math::Direction(a, g)*1.0f;
|
||||||
if ( cirSpeed > 1.0f ) cirSpeed = 1.0f;
|
if ( cirSpeed > 1.0f ) cirSpeed = 1.0f;
|
||||||
|
@ -90,7 +90,7 @@ bool CTaskRecover::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_phase == TRP_MOVE ) // preliminary forward/backward?
|
if ( m_phase == TRP_MOVE ) // preliminary forward/backward?
|
||||||
{
|
{
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_ruin->RetPosition(0));
|
dist = Math::Distance(m_object->GetPosition(0), m_ruin->GetPosition(0));
|
||||||
linSpeed = 0.0f;
|
linSpeed = 0.0f;
|
||||||
if ( dist > RECOVER_DIST ) linSpeed = 1.0f;
|
if ( dist > RECOVER_DIST ) linSpeed = 1.0f;
|
||||||
if ( dist < RECOVER_DIST ) linSpeed = -1.0f;
|
if ( dist < RECOVER_DIST ) linSpeed = -1.0f;
|
||||||
|
@ -100,10 +100,10 @@ bool CTaskRecover::EventProcess(const Event &event)
|
||||||
|
|
||||||
if ( m_phase == TRP_OPER )
|
if ( m_phase == TRP_OPER )
|
||||||
{
|
{
|
||||||
power = m_object->RetPower();
|
power = m_object->GetPower();
|
||||||
if ( power != 0 )
|
if ( power != 0 )
|
||||||
{
|
{
|
||||||
energy = power->RetEnergy();
|
energy = power->GetEnergy();
|
||||||
power->SetEnergy(energy-ENERGY_RECOVER*event.rTime*m_speed);
|
power->SetEnergy(energy-ENERGY_RECOVER*event.rTime*m_speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,9 +122,9 @@ bool CTaskRecover::EventProcess(const Event &event)
|
||||||
m_metal->SetZoom(0, (m_progress-0.5f)/0.3f);
|
m_metal->SetZoom(0, (m_progress-0.5f)/0.3f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.02f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.02f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos = m_recoverPos;
|
pos = m_recoverPos;
|
||||||
pos.x += (Math::Rand()-0.5f)*8.0f*(1.0f-m_progress);
|
pos.x += (Math::Rand()-0.5f)*8.0f*(1.0f-m_progress);
|
||||||
|
@ -135,7 +135,7 @@ bool CTaskRecover::EventProcess(const Event &event)
|
||||||
speed.y = Math::Rand()*15.0f;
|
speed.y = Math::Rand()*15.0f;
|
||||||
dim.x = Math::Rand()*2.0f+1.5f;
|
dim.x = Math::Rand()*2.0f+1.5f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIRECOVER, 1.0f, 0.0f, 0.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIRECOVER, 1.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,9 +149,9 @@ bool CTaskRecover::EventProcess(const Event &event)
|
||||||
m_object->SetAngleZ(3, angle);
|
m_object->SetAngleZ(3, angle);
|
||||||
m_object->SetAngleZ(5, angle);
|
m_object->SetAngleZ(5, angle);
|
||||||
|
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.02f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.02f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos = m_recoverPos;
|
pos = m_recoverPos;
|
||||||
pos.y -= 4.0f;
|
pos.y -= 4.0f;
|
||||||
|
@ -160,7 +160,7 @@ bool CTaskRecover::EventProcess(const Event &event)
|
||||||
speed.y = Math::Rand()*15.0f;
|
speed.y = Math::Rand()*15.0f;
|
||||||
dim.x = Math::Rand()*2.0f+1.5f;
|
dim.x = Math::Rand()*2.0f+1.5f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIRECOVER, 1.0f, 0.0f, 0.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIRECOVER, 1.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,17 +180,17 @@ Error CTaskRecover::Start()
|
||||||
ObjectType type;
|
ObjectType type;
|
||||||
|
|
||||||
m_bError = true; // operation impossible
|
m_bError = true; // operation impossible
|
||||||
if ( !m_physics->RetLand() ) return ERR_RECOVER_VEH;
|
if ( !m_physics->GetLand() ) return ERR_RECOVER_VEH;
|
||||||
|
|
||||||
type = m_object->RetType();
|
type = m_object->GetType();
|
||||||
if ( type != OBJECT_MOBILErr ) return ERR_RECOVER_VEH;
|
if ( type != OBJECT_MOBILErr ) return ERR_RECOVER_VEH;
|
||||||
|
|
||||||
power = m_object->RetPower();
|
power = m_object->GetPower();
|
||||||
if ( power == 0 ) return ERR_RECOVER_ENERGY;
|
if ( power == 0 ) return ERR_RECOVER_ENERGY;
|
||||||
energy = power->RetEnergy();
|
energy = power->GetEnergy();
|
||||||
if ( energy < ENERGY_RECOVER/power->RetCapacity()+0.05f ) return ERR_RECOVER_ENERGY;
|
if ( energy < ENERGY_RECOVER/power->GetCapacity()+0.05f ) return ERR_RECOVER_ENERGY;
|
||||||
|
|
||||||
mat = m_object->RetWorldMatrix(0);
|
mat = m_object->GetWorldMatrix(0);
|
||||||
pos = Math::Vector(RECOVER_DIST, 3.3f, 0.0f);
|
pos = Math::Vector(RECOVER_DIST, 3.3f, 0.0f);
|
||||||
pos = Transform(*mat, pos); // position in front
|
pos = Transform(*mat, pos); // position in front
|
||||||
m_recoverPos = pos;
|
m_recoverPos = pos;
|
||||||
|
@ -199,8 +199,8 @@ Error CTaskRecover::Start()
|
||||||
if ( m_ruin == 0 ) return ERR_RECOVER_NULL;
|
if ( m_ruin == 0 ) return ERR_RECOVER_NULL;
|
||||||
m_ruin->SetLock(true); // ruin no longer usable
|
m_ruin->SetLock(true); // ruin no longer usable
|
||||||
|
|
||||||
iPos = m_object->RetPosition(0);
|
iPos = m_object->GetPosition(0);
|
||||||
oPos = m_ruin->RetPosition(0);
|
oPos = m_ruin->GetPosition(0);
|
||||||
m_angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW !
|
m_angle = Math::RotateAngle(oPos.x-iPos.x, iPos.z-oPos.z); // CW !
|
||||||
|
|
||||||
m_metal = 0;
|
m_metal = 0;
|
||||||
|
@ -209,7 +209,7 @@ Error CTaskRecover::Start()
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
m_speed = 1.0f/1.0f;
|
m_speed = 1.0f/1.0f;
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
|
|
||||||
m_bError = false; // ok
|
m_bError = false; // ok
|
||||||
|
|
||||||
|
@ -227,27 +227,27 @@ Error CTaskRecover::IsEnded()
|
||||||
float angle, dist, time;
|
float angle, dist, time;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
|
|
||||||
if ( m_phase == TRP_TURN ) // preliminary rotation?
|
if ( m_phase == TRP_TURN ) // preliminary rotation?
|
||||||
{
|
{
|
||||||
angle = m_object->RetAngleY(0);
|
angle = m_object->GetAngleY(0);
|
||||||
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
angle = Math::NormAngle(angle); // 0..2*Math::PI
|
||||||
|
|
||||||
if ( Math::TestAngle(angle, m_angle-Math::PI*0.01f, m_angle+Math::PI*0.01f) )
|
if ( Math::TestAngle(angle, m_angle-Math::PI*0.01f, m_angle+Math::PI*0.01f) )
|
||||||
{
|
{
|
||||||
m_physics->SetMotorSpeedZ(0.0f);
|
m_physics->SetMotorSpeedZ(0.0f);
|
||||||
|
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_ruin->RetPosition(0));
|
dist = Math::Distance(m_object->GetPosition(0), m_ruin->GetPosition(0));
|
||||||
if ( dist > RECOVER_DIST )
|
if ( dist > RECOVER_DIST )
|
||||||
{
|
{
|
||||||
time = m_physics->RetLinTimeLength(dist-RECOVER_DIST, 1.0f);
|
time = m_physics->GetLinTimeLength(dist-RECOVER_DIST, 1.0f);
|
||||||
m_speed = 1.0f/time;
|
m_speed = 1.0f/time;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
time = m_physics->RetLinTimeLength(RECOVER_DIST-dist, -1.0f);
|
time = m_physics->GetLinTimeLength(RECOVER_DIST-dist, -1.0f);
|
||||||
m_speed = 1.0f/time;
|
m_speed = 1.0f/time;
|
||||||
}
|
}
|
||||||
m_phase = TRP_MOVE;
|
m_phase = TRP_MOVE;
|
||||||
|
@ -258,19 +258,19 @@ Error CTaskRecover::IsEnded()
|
||||||
|
|
||||||
if ( m_phase == TRP_MOVE ) // preliminary advance?
|
if ( m_phase == TRP_MOVE ) // preliminary advance?
|
||||||
{
|
{
|
||||||
dist = Math::Distance(m_object->RetPosition(0), m_ruin->RetPosition(0));
|
dist = Math::Distance(m_object->GetPosition(0), m_ruin->GetPosition(0));
|
||||||
|
|
||||||
if ( dist >= RECOVER_DIST-1.0f &&
|
if ( dist >= RECOVER_DIST-1.0f &&
|
||||||
dist <= RECOVER_DIST+1.0f )
|
dist <= RECOVER_DIST+1.0f )
|
||||||
{
|
{
|
||||||
m_physics->SetMotorSpeedX(0.0f);
|
m_physics->SetMotorSpeedX(0.0f);
|
||||||
|
|
||||||
mat = m_object->RetWorldMatrix(0);
|
mat = m_object->GetWorldMatrix(0);
|
||||||
pos = Math::Vector(RECOVER_DIST, 3.3f, 0.0f);
|
pos = Math::Vector(RECOVER_DIST, 3.3f, 0.0f);
|
||||||
pos = Transform(*mat, pos); // position in front
|
pos = Transform(*mat, pos); // position in front
|
||||||
m_recoverPos = pos;
|
m_recoverPos = pos;
|
||||||
|
|
||||||
i = m_sound->Play(SOUND_MANIP, m_object->RetPosition(0), 0.0f, 0.9f, true);
|
i = m_sound->Play(SOUND_MANIP, m_object->GetPosition(0), 0.0f, 0.9f, true);
|
||||||
m_sound->AddEnvelope(i, 1.0f, 1.5f, 0.3f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 1.0f, 1.5f, 0.3f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 1.0f, 1.5f, 1.0f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 1.0f, 1.5f, 1.0f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 0.0f, 0.9f, 0.3f, SOPER_STOP);
|
m_sound->AddEnvelope(i, 0.0f, 0.9f, 0.3f, SOPER_STOP);
|
||||||
|
@ -310,15 +310,15 @@ Error CTaskRecover::IsEnded()
|
||||||
m_metal->SetLock(true); // metal not yet usable
|
m_metal->SetLock(true); // metal not yet usable
|
||||||
m_metal->SetZoom(0, 0.0f);
|
m_metal->SetZoom(0, 0.0f);
|
||||||
|
|
||||||
mat = m_object->RetWorldMatrix(0);
|
mat = m_object->GetWorldMatrix(0);
|
||||||
pos = Math::Vector(RECOVER_DIST, 3.1f, 3.9f);
|
pos = Math::Vector(RECOVER_DIST, 3.1f, 3.9f);
|
||||||
pos = Transform(*mat, pos);
|
pos = Transform(*mat, pos);
|
||||||
goal = Math::Vector(RECOVER_DIST, 3.1f, -3.9f);
|
goal = Math::Vector(RECOVER_DIST, 3.1f, -3.9f);
|
||||||
goal = Transform(*mat, goal);
|
goal = Transform(*mat, goal);
|
||||||
m_particule->CreateRay(pos, goal, PARTIRAY2,
|
m_particle->CreateRay(pos, goal, Gfx::PARTIRAY2,
|
||||||
Math::Point(2.0f, 2.0f), 8.0f);
|
Math::Point(2.0f, 2.0f), 8.0f);
|
||||||
|
|
||||||
m_soundChannel = m_sound->Play(SOUND_RECOVER, m_ruin->RetPosition(0), 0.0f, 1.0f, true);
|
m_soundChannel = m_sound->Play(SOUND_RECOVER, m_ruin->GetPosition(0), 0.0f, 1.0f, true);
|
||||||
m_sound->AddEnvelope(m_soundChannel, 0.6f, 1.0f, 2.0f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(m_soundChannel, 0.6f, 1.0f, 2.0f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(m_soundChannel, 0.6f, 1.0f, 4.0f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(m_soundChannel, 0.6f, 1.0f, 4.0f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.7f, 2.0f, SOPER_STOP);
|
m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.7f, 2.0f, SOPER_STOP);
|
||||||
|
@ -338,7 +338,7 @@ Error CTaskRecover::IsEnded()
|
||||||
|
|
||||||
m_soundChannel = -1;
|
m_soundChannel = -1;
|
||||||
|
|
||||||
i = m_sound->Play(SOUND_MANIP, m_object->RetPosition(0), 0.0f, 0.9f, true);
|
i = m_sound->Play(SOUND_MANIP, m_object->GetPosition(0), 0.0f, 0.9f, true);
|
||||||
m_sound->AddEnvelope(i, 1.0f, 1.5f, 0.3f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 1.0f, 1.5f, 0.3f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 1.0f, 1.5f, 1.0f, SOPER_CONTINUE);
|
m_sound->AddEnvelope(i, 1.0f, 1.5f, 1.0f, SOPER_CONTINUE);
|
||||||
m_sound->AddEnvelope(i, 0.0f, 0.9f, 0.3f, SOPER_STOP);
|
m_sound->AddEnvelope(i, 0.0f, 0.9f, 0.3f, SOPER_STOP);
|
||||||
|
@ -389,10 +389,10 @@ CObject* CTaskRecover::SearchRuin()
|
||||||
min = 100000.0f;
|
min = 100000.0f;
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type == OBJECT_RUINmobilew1 ||
|
if ( type == OBJECT_RUINmobilew1 ||
|
||||||
type == OBJECT_RUINmobilew2 ||
|
type == OBJECT_RUINmobilew2 ||
|
||||||
type == OBJECT_RUINmobilet1 ||
|
type == OBJECT_RUINmobilet1 ||
|
||||||
|
@ -400,7 +400,7 @@ CObject* CTaskRecover::SearchRuin()
|
||||||
type == OBJECT_RUINmobiler1 ||
|
type == OBJECT_RUINmobiler1 ||
|
||||||
type == OBJECT_RUINmobiler2 ) // vehicle in ruin?
|
type == OBJECT_RUINmobiler2 ) // vehicle in ruin?
|
||||||
{
|
{
|
||||||
oPos = pObj->RetPosition(0);
|
oPos = pObj->GetPosition(0);
|
||||||
dist = Math::Distance(oPos, m_recoverPos);
|
dist = Math::Distance(oPos, m_recoverPos);
|
||||||
if ( dist > 40.0f ) continue;
|
if ( dist > 40.0f ) continue;
|
||||||
|
|
||||||
|
|
|
@ -56,11 +56,11 @@ protected:
|
||||||
float m_speed;
|
float m_speed;
|
||||||
float m_time;
|
float m_time;
|
||||||
float m_angle;
|
float m_angle;
|
||||||
float m_lastParticule;
|
float m_lastParticle;
|
||||||
bool m_bError;
|
bool m_bError;
|
||||||
CObject* m_ruin;
|
CObject* m_ruin;
|
||||||
CObject* m_metal;
|
CObject* m_metal;
|
||||||
Math::Vector m_recoverPos;
|
Math::Vector m_recoverPos;
|
||||||
int m_soundChannel;
|
int m_soundChannel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,6 @@
|
||||||
|
|
||||||
// taskreset.cpp
|
// taskreset.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/taskreset.h"
|
#include "object/task/taskreset.h"
|
||||||
|
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
|
@ -55,8 +52,8 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
Math::Point dim;
|
Math::Point dim;
|
||||||
float angle, duration;
|
float angle, duration;
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return true;
|
if ( m_engine->GetPause() ) return true;
|
||||||
if ( event.event != EVENT_FRAME ) return true;
|
if ( event.type != EVENT_FRAME ) return true;
|
||||||
if ( m_bError ) return false;
|
if ( m_bError ) return false;
|
||||||
|
|
||||||
m_time += event.rTime;
|
m_time += event.rTime;
|
||||||
|
@ -69,9 +66,9 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
m_object->SetAngleY(0, angle);
|
m_object->SetAngleY(0, angle);
|
||||||
m_object->SetZoom(0, 1.0f-m_progress);
|
m_object->SetZoom(0, 1.0f-m_progress);
|
||||||
|
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.05f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos = m_begin;
|
pos = m_begin;
|
||||||
pos.x += (Math::Rand()-0.5f)*5.0f;
|
pos.x += (Math::Rand()-0.5f)*5.0f;
|
||||||
|
@ -81,7 +78,7 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
speed.y = 5.0f+Math::Rand()*5.0f;
|
speed.y = 5.0f+Math::Rand()*5.0f;
|
||||||
dim.x = Math::Rand()*2.0f+2.0f;
|
dim.x = Math::Rand()*2.0f+2.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIGLINTb, 2.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGLINTb, 2.0f);
|
||||||
|
|
||||||
pos = m_begin;
|
pos = m_begin;
|
||||||
speed.x = (Math::Rand()-0.5f)*20.0f;
|
speed.x = (Math::Rand()-0.5f)*20.0f;
|
||||||
|
@ -94,7 +91,7 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
pos.y += dim.y;
|
pos.y += dim.y;
|
||||||
duration = Math::Rand()*1.5f+1.5f;
|
duration = Math::Rand()*1.5f+1.5f;
|
||||||
m_particule->CreateTrack(pos, speed, dim, PARTITRACK6,
|
m_particle->CreateTrack(pos, speed, dim, Gfx::PARTITRACK6,
|
||||||
duration, 0.0f,
|
duration, 0.0f,
|
||||||
duration*0.9f, 0.7f);
|
duration*0.9f, 0.7f);
|
||||||
}
|
}
|
||||||
|
@ -105,9 +102,9 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
pos = m_begin+(m_goal-m_begin)*m_progress;
|
pos = m_begin+(m_goal-m_begin)*m_progress;
|
||||||
m_object->SetPosition(0, pos);
|
m_object->SetPosition(0, pos);
|
||||||
|
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.05f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos.x += (Math::Rand()-0.5f)*5.0f;
|
pos.x += (Math::Rand()-0.5f)*5.0f;
|
||||||
pos.z += (Math::Rand()-0.5f)*5.0f;
|
pos.z += (Math::Rand()-0.5f)*5.0f;
|
||||||
|
@ -116,7 +113,7 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
speed.y = 2.0f+Math::Rand()*2.0f;
|
speed.y = 2.0f+Math::Rand()*2.0f;
|
||||||
dim.x = Math::Rand()*2.0f+2.0f;
|
dim.x = Math::Rand()*2.0f+2.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIGLINTb, 2.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGLINTb, 2.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,9 +124,9 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
m_object->SetAngleY(0, angle);
|
m_object->SetAngleY(0, angle);
|
||||||
m_object->SetZoom(0, m_progress);
|
m_object->SetZoom(0, m_progress);
|
||||||
|
|
||||||
if ( m_lastParticule+m_engine->ParticuleAdapt(0.05f) <= m_time )
|
if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time )
|
||||||
{
|
{
|
||||||
m_lastParticule = m_time;
|
m_lastParticle = m_time;
|
||||||
|
|
||||||
pos = m_goal;
|
pos = m_goal;
|
||||||
pos.x += (Math::Rand()-0.5f)*5.0f;
|
pos.x += (Math::Rand()-0.5f)*5.0f;
|
||||||
|
@ -139,7 +136,7 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
speed.y = 5.0f+Math::Rand()*5.0f;
|
speed.y = 5.0f+Math::Rand()*5.0f;
|
||||||
dim.x = Math::Rand()*2.0f+2.0f;
|
dim.x = Math::Rand()*2.0f+2.0f;
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
m_particule->CreateParticule(pos, speed, dim, PARTIGLINTb, 2.0f);
|
m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGLINTb, 2.0f);
|
||||||
|
|
||||||
pos = m_goal;
|
pos = m_goal;
|
||||||
speed.x = (Math::Rand()-0.5f)*20.0f;
|
speed.x = (Math::Rand()-0.5f)*20.0f;
|
||||||
|
@ -150,7 +147,7 @@ bool CTaskReset::EventProcess(const Event &event)
|
||||||
dim.y = dim.x;
|
dim.y = dim.x;
|
||||||
pos.y += dim.y;
|
pos.y += dim.y;
|
||||||
duration = Math::Rand()*1.5f+1.5f;
|
duration = Math::Rand()*1.5f+1.5f;
|
||||||
m_particule->CreateTrack(pos, speed, dim, PARTITRACK6,
|
m_particle->CreateTrack(pos, speed, dim, Gfx::PARTITRACK6,
|
||||||
duration, 0.0f,
|
duration, 0.0f,
|
||||||
duration*0.9f, 0.7f);
|
duration*0.9f, 0.7f);
|
||||||
}
|
}
|
||||||
|
@ -168,24 +165,24 @@ Error CTaskReset::Start(Math::Vector goal, Math::Vector angle)
|
||||||
CObject* fret;
|
CObject* fret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
fret = m_object->RetFret();
|
fret = m_object->GetFret();
|
||||||
if ( fret != 0 && fret->RetResetCap() == RESET_MOVE )
|
if ( fret != 0 && fret->GetResetCap() == RESET_MOVE )
|
||||||
{
|
{
|
||||||
fret->SetTruck(0);
|
fret->SetTruck(0);
|
||||||
m_object->SetFret(0); // does nothing
|
m_object->SetFret(0); // does nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !m_main->RetNiceReset() ) // quick return?
|
if ( !m_main->GetNiceReset() ) // quick return?
|
||||||
{
|
{
|
||||||
m_object->SetPosition(0, goal);
|
m_object->SetPosition(0, goal);
|
||||||
m_object->SetAngle(0, angle);
|
m_object->SetAngle(0, angle);
|
||||||
m_brain->RunProgram(m_object->RetResetRun());
|
m_brain->RunProgram(m_object->GetResetRun());
|
||||||
|
|
||||||
m_bError = false;
|
m_bError = false;
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_begin = m_object->RetPosition(0);
|
m_begin = m_object->GetPosition(0);
|
||||||
m_goal = goal;
|
m_goal = goal;
|
||||||
m_angle = angle;
|
m_angle = angle;
|
||||||
|
|
||||||
|
@ -195,12 +192,12 @@ Error CTaskReset::Start(Math::Vector goal, Math::Vector angle)
|
||||||
return ERR_RESET_NEAR;
|
return ERR_RESET_NEAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_iAngle = m_object->RetAngleY(0);
|
m_iAngle = m_object->GetAngleY(0);
|
||||||
m_time = 0.0f;
|
m_time = 0.0f;
|
||||||
m_phase = TRSP_ZOUT;
|
m_phase = TRSP_ZOUT;
|
||||||
m_speed = 1.0f/RESET_DELAY_ZOOM;
|
m_speed = 1.0f/RESET_DELAY_ZOOM;
|
||||||
m_progress = 0.0f;
|
m_progress = 0.0f;
|
||||||
m_lastParticule = 0.0f;
|
m_lastParticle = 0.0f;
|
||||||
|
|
||||||
m_object->SetResetBusy(true);
|
m_object->SetResetBusy(true);
|
||||||
|
|
||||||
|
@ -219,12 +216,12 @@ Error CTaskReset::IsEnded()
|
||||||
float dist;
|
float dist;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ( !m_main->RetNiceReset() ) // quick return?
|
if ( !m_main->GetNiceReset() ) // quick return?
|
||||||
{
|
{
|
||||||
return ERR_STOP;
|
return ERR_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_engine->RetPause() ) return ERR_CONTINUE;
|
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||||
if ( m_bError ) return ERR_STOP;
|
if ( m_bError ) return ERR_STOP;
|
||||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||||
|
|
||||||
|
@ -254,13 +251,13 @@ Error CTaskReset::IsEnded()
|
||||||
m_object->SetAngle(0, m_angle);
|
m_object->SetAngle(0, m_angle);
|
||||||
m_object->SetZoom(0, 1.0f);
|
m_object->SetZoom(0, 1.0f);
|
||||||
|
|
||||||
power = m_object->RetPower();
|
power = m_object->GetPower();
|
||||||
if ( power != 0 )
|
if ( power != 0 )
|
||||||
{
|
{
|
||||||
power->SetEnergy(power->RetCapacity()); // refueling
|
power->SetEnergy(power->GetCapacity()); // refueling
|
||||||
}
|
}
|
||||||
|
|
||||||
m_brain->RunProgram(m_object->RetResetRun());
|
m_brain->RunProgram(m_object->GetResetRun());
|
||||||
m_object->SetResetBusy(false);
|
m_object->SetResetBusy(false);
|
||||||
return ERR_STOP;
|
return ERR_STOP;
|
||||||
}
|
}
|
||||||
|
@ -278,12 +275,12 @@ bool CTaskReset::SearchVehicle()
|
||||||
|
|
||||||
for ( i=0 ; i<1000000 ; i++ )
|
for ( i=0 ; i<1000000 ; i++ )
|
||||||
{
|
{
|
||||||
pObj = (CObject*)m_iMan->SearchInstance(CLASS_OBJECT, i);
|
pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
|
||||||
if ( pObj == 0 ) break;
|
if ( pObj == 0 ) break;
|
||||||
|
|
||||||
if ( pObj == m_object ) continue;
|
if ( pObj == m_object ) continue;
|
||||||
|
|
||||||
type = pObj->RetType();
|
type = pObj->GetType();
|
||||||
if ( type != OBJECT_HUMAN &&
|
if ( type != OBJECT_HUMAN &&
|
||||||
type != OBJECT_TECH &&
|
type != OBJECT_TECH &&
|
||||||
type != OBJECT_MOBILEfa &&
|
type != OBJECT_MOBILEfa &&
|
||||||
|
|
|
@ -57,7 +57,7 @@ protected:
|
||||||
float m_time;
|
float m_time;
|
||||||
float m_speed;
|
float m_speed;
|
||||||
float m_progress;
|
float m_progress;
|
||||||
float m_lastParticule; // time of generation last particle
|
float m_lastParticle; // time of generation last particle
|
||||||
float m_iAngle;
|
float m_iAngle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,14 +16,11 @@
|
||||||
|
|
||||||
// tasktake.cpp
|
// tasktake.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "object/task/tasktake.h"
|
#include "object/task/tasktake.h"
|
||||||
|
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "old/terrain.h"
|
#include "graphics/engine/terrain.h"
|
||||||
#include "old/water.h"
|
#include "graphics/engine/water.h"
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
#include "object/motion/motionhuman.h"
|
#include "object/motion/motionhuman.h"
|
||||||
#include "object/robotmain.h"
|
#include "object/robotmain.h"
|
||||||
|
|
|
@ -59,7 +59,8 @@ protected:
|
||||||
bool IsFreeDeposeObject(Math::Vector pos);
|
bool IsFreeDeposeObject(Math::Vector pos);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CTerrain* m_terrain;
|
//TODO this is same member as in base class, probable should be deleted
|
||||||
|
Gfx::CTerrain* m_terrain;
|
||||||
|
|
||||||
TaskTakeOrder m_order;
|
TaskTakeOrder m_order;
|
||||||
TaskTakeArm m_arm;
|
TaskTakeArm m_arm;
|
||||||
|
|
Loading…
Reference in New Issue