Skip to content

Commit d0323b3

Browse files
revolucasXottab-DUTY
authored andcommitted
+ Restored method to attach vehicle to actor
+ added many exported car methods by RayTwitty + Three new actor callbacks! on_attach_vehicle, on_detach_vehicle and on_use_vehicle
1 parent dc0acae commit d0323b3

File tree

12 files changed

+217
-40
lines changed

12 files changed

+217
-40
lines changed

src/xrGame/Actor.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,9 @@ CActor::CActor() : CEntityAlive(), current_ik_cam_shift(0)
180180
m_pUsableObject = NULL;
181181

182182
m_anims = new SActorMotions();
183-
//. m_vehicle_anims = new SActorVehicleAnims();
183+
//Alundaio: Needed for car
184+
m_vehicle_anims = new SActorVehicleAnims();
185+
//-Alundaio
184186
m_entity_condition = NULL;
185187
m_iLastHitterID = u16(-1);
186188
m_iLastHittingWeaponID = u16(-1);
@@ -221,7 +223,9 @@ CActor::~CActor()
221223
xr_delete(m_pPhysics_support);
222224

223225
xr_delete(m_anims);
224-
//. xr_delete (m_vehicle_anims);
226+
//Alundaio: For car
227+
xr_delete(m_vehicle_anims);
228+
//-Alundaio
225229
}
226230

227231
void CActor::reinit()

src/xrGame/Actor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ class CActor : public CEntityAlive,
271271

272272
public:
273273
SActorMotions* m_anims;
274-
//. SActorVehicleAnims* m_vehicle_anims;
274+
SActorVehicleAnims* m_vehicle_anims;
275275

276276
CBlend* m_current_legs_blend;
277277
CBlend* m_current_torso_blend;

src/xrGame/ActorAnimation.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,18 @@ void CActor::steer_Vehicle(float angle)
272272
{
273273
if (!m_holder)
274274
return;
275-
/*
276-
CCar* car = smart_cast<CCar*>(m_holder);
277-
u16 anim_type = car->DriverAnimationType();
278-
SVehicleAnimCollection& anims=m_vehicle_anims->m_vehicles_type_collections[anim_type];
279-
if(angle==0.f) smart_cast<IKinematicsAnimated*> (Visual())->PlayCycle(anims.idles[0]);
280-
else if(angle>0.f) smart_cast<IKinematicsAnimated*> (Visual())->PlayCycle(anims.steer_right);
281-
else smart_cast<IKinematicsAnimated*> (Visual())->PlayCycle(anims.steer_left);
282-
*/
275+
276+
//Alundaio: Re-enable Car
277+
CCar* car = smart_cast<CCar*>(m_holder);
278+
u16 anim_type = car->DriverAnimationType();
279+
SVehicleAnimCollection& anims = m_vehicle_anims->m_vehicles_type_collections[anim_type];
280+
if (angle == 0.f)
281+
smart_cast<IKinematicsAnimated*>(Visual())->PlayCycle(anims.idles[0]);
282+
else if (angle > 0.f)
283+
smart_cast<IKinematicsAnimated*>(Visual())->PlayCycle(anims.steer_right);
284+
else
285+
smart_cast<IKinematicsAnimated*>(Visual())->PlayCycle(anims.steer_left);
286+
//-Alundaio
283287
}
284288

285289
void legs_play_callback(CBlend* blend)

src/xrGame/ActorVehicle.cpp

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,41 +20,50 @@
2020
#include "CharacterPhysicsSupport.h"
2121
#include "inventory.h"
2222

23+
#include "pch_script.h"
24+
#include "game_object_space.h"
25+
#include "script_callback_ex.h"
26+
#include "script_game_object.h"
27+
2328
void CActor::attach_Vehicle(CHolderCustom* vehicle)
2429
{
25-
/*
26-
if(!vehicle) return;
27-
if(m_holder) return;
30+
if(!vehicle || m_holder)
31+
return;
2832

29-
PickupModeOff ();
30-
m_holder=vehicle;
33+
//PickupModeOff();
34+
m_holder=vehicle;
3135

32-
IRenderVisual *pVis = Visual();
33-
IKinematicsAnimated* V = smart_cast<IKinematicsAnimated*>(pVis); R_ASSERT(V);
34-
IKinematics* pK = smart_cast<IKinematics*>(pVis);
36+
IRenderVisual* pVis = Visual();
37+
IKinematicsAnimated* V = smart_cast<IKinematicsAnimated*>(pVis);
38+
R_ASSERT(V);
39+
IKinematics* pK = smart_cast<IKinematics*>(pVis);
3540

36-
if(!m_holder->attach_Actor(this)){
37-
m_holder=NULL;
38-
return;
39-
}
40-
// temp play animation
41-
CCar* car = smart_cast<CCar*>(m_holder);
42-
u16 anim_type = car->DriverAnimationType();
43-
SVehicleAnimCollection& anims = m_vehicle_anims->m_vehicles_type_collections[anim_type];
44-
V->PlayCycle (anims.idles[0],FALSE);
41+
if (!m_holder->attach_Actor(this))
42+
{
43+
m_holder = nullptr;
44+
return;
45+
}
46+
47+
// temp play animation
48+
CCar* car = smart_cast<CCar*>(m_holder);
49+
u16 anim_type = car->DriverAnimationType();
50+
SVehicleAnimCollection& anims = m_vehicle_anims->m_vehicles_type_collections[anim_type];
51+
V->PlayCycle(anims.idles[0], false);
52+
53+
ResetCallbacks();
54+
u16 head_bone = pK->LL_BoneID("bip01_head");
55+
pK->LL_GetBoneInstance(u16(head_bone)).set_callback(bctPhysics, VehicleHeadCallback, this);
4556

46-
ResetCallbacks ();
47-
u16 head_bone = pK->LL_BoneID("bip01_head");
48-
pK->LL_GetBoneInstance (u16(head_bone)).set_callback (bctPhysics, VehicleHeadCallback,this);
57+
character_physics_support()->movement()->DestroyCharacter();
58+
mstate_wishful = 0;
59+
m_holderID = car->ID();
4960

50-
character_physics_support ()->movement()->DestroyCharacter();
51-
mstate_wishful = 0;
52-
m_holderID=car->ID ();
61+
SetWeaponHideState(INV_STATE_CAR, true);
5362

54-
SetWeaponHideState (INV_STATE_CAR, true);
63+
CStepManager::on_animation_start(MotionID(), nullptr);
5564

56-
CStepManager::on_animation_start(MotionID(), 0);
57-
*/
65+
// Real Wolf: Колбек на посадку в машину. 01.08.2014.
66+
this->callback(GameObject::eAttachVehicle)(car->lua_game_object());
5867
}
5968

6069
void CActor::detach_Vehicle()
@@ -97,6 +106,9 @@ void CActor::detach_Vehicle()
97106

98107
//. SetWeaponHideState(whs_CAR, FALSE);
99108
SetWeaponHideState(INV_STATE_CAR, false);
109+
110+
// Real Wolf: колбек на высадку из машины. 01.08.2014.
111+
this->callback(GameObject::eDetachVehicle)(car->lua_game_object());
100112
}
101113

102114
bool CActor::use_Vehicle(CHolderCustom* object)
@@ -131,6 +143,9 @@ bool CActor::use_Vehicle(CHolderCustom* object)
131143

132144
attach_Vehicle(vehicle);
133145
}
146+
// Real Wolf: колбек на использование машины (но не посадку) без учета расстояния. 01.08.2014.
147+
else if (auto car = smart_cast<CCar*>(vehicle))
148+
this->callback(GameObject::eUseVehicle)(car->lua_game_object());
134149
return true;
135150
}
136151
return false;

src/xrGame/Actor_Network.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ void CActor::OnChangeVisual()
865865
CStepManager::reload(cNameSect().c_str());
866866
SetCallbacks();
867867
m_anims->Create(V);
868-
//. m_vehicle_anims->Create (V);
868+
m_vehicle_anims->Create(V);
869869
CDamageManager::reload(*cNameSect(), "damage", pSettings);
870870
//-------------------------------------------------------------------------------
871871
m_head = smart_cast<IKinematics*>(Visual())->LL_BoneID("bip01_head");

src/xrGame/Car.cpp

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -834,14 +834,18 @@ void CCar::CreateSkeleton(CSE_Abstract* po)
834834
pK->CalculateBones(TRUE);
835835
}
836836
phys_shell_verify_object_model(*this);
837-
#pragma todo(" replace below by P_build_Shell or call inherited")
837+
/* Alundaio: p_build_shell
838+
#pragma todo(" replace below by P_build_Shell or call inherited")
838839
m_pPhysicsShell = P_create_Shell();
839840
m_pPhysicsShell->build_FromKinematics(pK, &bone_map);
840841
m_pPhysicsShell->set_PhysicsRefObject(this);
841842
m_pPhysicsShell->mXFORM.set(XFORM());
842843
m_pPhysicsShell->Activate(true);
843844
m_pPhysicsShell->SetAirResistance(0.f, 0.f);
844845
m_pPhysicsShell->SetPrefereExactIntegration();
846+
*/
847+
m_pPhysicsShell = P_build_Shell(this, true, &bone_map);
848+
//-Alundaio
845849

846850
ApplySpawnIniToPhysicShell(&po->spawn_ini(), m_pPhysicsShell, false);
847851
ApplySpawnIniToPhysicShell(pK->LL_UserData(), m_pPhysicsShell, false);
@@ -1975,4 +1979,74 @@ Fvector CCar::ExitVelocity()
19751979
return v;
19761980
}
19771981

1978-
//#endif // #if 0
1982+
/***** added by Ray Twitty (aka Shadows) START *****/
1983+
// получить и задать текущее количество топлива
1984+
float CCar::GetfFuel()
1985+
{
1986+
return m_fuel;
1987+
}
1988+
1989+
void CCar::SetfFuel(float fuel)
1990+
{
1991+
m_fuel = fuel;
1992+
}
1993+
1994+
// получить и задать размер топливного бака
1995+
float CCar::GetfFuelTank()
1996+
{
1997+
return m_fuel_tank;
1998+
}
1999+
2000+
void CCar::SetfFuelTank(float fuel_tank)
2001+
{
2002+
m_fuel_tank = fuel_tank;
2003+
}
2004+
2005+
// получить и задать величину потребление топлива
2006+
float CCar::GetfFuelConsumption()
2007+
{
2008+
return m_fuel_consumption;
2009+
}
2010+
2011+
void CCar::SetfFuelConsumption(float fuel_consumption)
2012+
{
2013+
m_fuel_consumption = fuel_consumption;
2014+
}
2015+
2016+
// прибавить или убавить количество топлива
2017+
void CCar::ChangefFuel(float fuel)
2018+
{
2019+
if(m_fuel + fuel < 0)
2020+
{
2021+
m_fuel = 0;
2022+
return;
2023+
}
2024+
2025+
if(fuel < m_fuel_tank - m_fuel)
2026+
m_fuel += fuel;
2027+
else
2028+
m_fuel = m_fuel_tank;
2029+
}
2030+
2031+
// прибавить или убавить жизней :)
2032+
void CCar::ChangefHealth(float health)
2033+
{
2034+
float current_health = GetfHealth();
2035+
if(current_health + health < 0)
2036+
{
2037+
SetfHealth(0);
2038+
return;
2039+
}
2040+
2041+
if(health < 1 - current_health)
2042+
SetfHealth(current_health + health);
2043+
else
2044+
SetfHealth(1);
2045+
}
2046+
2047+
// активен ли сейчас двигатель
2048+
bool CCar::isActiveEngine()
2049+
{
2050+
return b_engine_on;
2051+
}
2052+
/***** added by Ray Twitty (aka Shadows) END *****/

src/xrGame/Car.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,8 @@ class CCar : public CEntity,
434434
CCarLights m_lights;
435435
////////////////////////////////////////////////////
436436
/////////////////////////////////////////////////
437+
438+
public:
437439
void InitParabola();
438440
float _stdcall Parabola(float rpm);
439441
// float GetSteerAngle();
@@ -503,6 +505,34 @@ class CCar : public CEntity,
503505
float AddFuel(float ammount); // ammount - fuel to load, ret - fuel loaded
504506
public:
505507
void CarExplode();
508+
/***** added by Ray Twitty (aka Shadows) START *****/
509+
float GetfFuel();
510+
void SetfFuel(float fuel);
511+
512+
float GetfFuelTank();
513+
void SetfFuelTank(float fuel_tank);
514+
515+
float GetfFuelConsumption();
516+
void SetfFuelConsumption (float fuel_consumption);
517+
518+
void ChangefFuel (float fuel);
519+
void ChangefHealth(float health);
520+
521+
void PlayDamageParticles()
522+
{
523+
m_damage_particles.Play1(this);
524+
m_damage_particles.Play2(this);
525+
}
526+
527+
void StopDamageParticles ()
528+
{
529+
m_damage_particles.Stop1(this);
530+
m_damage_particles.Stop2(this);
531+
}
532+
533+
bool isActiveEngine ();
534+
/***** added by Ray Twitty (aka Shadows) END *****/
535+
506536

507537
private:
508538
void OnCameraChange(int type);

src/xrGame/CarDamageParticles.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,25 @@ void CCarDamageParticles::Play2(CCar* car)
6464
}
6565
}
6666

67+
/***** added by Ray Twitty (aka Shadows) START *****/
68+
// функции для выключения партиклов дыма
69+
void CCarDamageParticles::Stop1(CCar* car)
70+
{
71+
if(*m_car_damage_particles1)
72+
for (auto bone : bones1)
73+
car->StopParticles(car->ID(), bone, false);
74+
}
75+
76+
void CCarDamageParticles::Stop2(CCar* car)
77+
{
78+
VERIFY(!physics_world()->Processing());
79+
if(*m_car_damage_particles2)
80+
for (auto bone : bones2)
81+
car->StopParticles(car->ID(), bone, false);
82+
}
83+
/***** added by Ray Twitty (aka Shadows) END *****/
84+
85+
6786
void CCarDamageParticles::PlayWheel1(CCar* car, u16 bone_id) const
6887
{
6988
VERIFY(!physics_world()->Processing());

src/xrGame/CarDamageParticles.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ struct CCarDamageParticles
1717
void Clear();
1818
void Play1(CCar* car);
1919
void Play2(CCar* car);
20+
/***** added by Ray Twitty (aka Shadows) START *****/
21+
// функции для выключения партиклов дыма
22+
void Stop1(CCar* car);
23+
void Stop2(CCar* car);
24+
/***** added by Ray Twitty (aka Shadows) END *****/
25+
2026
void PlayWheel1(CCar* car, u16 bone_id) const;
2127
void PlayWheel2(CCar* car, u16 bone_id) const;
2228
};

src/xrGame/CarScript.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,20 @@ SCRIPT_EXPORT(CCar, (CGameObject, CHolderCustom), {
2828
.def("SetExplodeTime", &CCar::SetExplodeTime)
2929
.def("ExplodeTime", &CCar::ExplodeTime)
3030
.def("CarExplode", &CCar::CarExplode)
31+
/***** added by Ray Twitty (aka Shadows) START *****/
32+
.def("GetfFuel", &CCar::GetfFuel)
33+
.def("SetfFuel", &CCar::SetfFuel)
34+
.def("GetfFuelTank", &CCar::GetfFuelTank)
35+
.def("SetfFuelTank", &CCar::SetfFuelTank)
36+
.def("GetfFuelConsumption", &CCar::GetfFuelConsumption)
37+
.def("SetfFuelConsumption", &CCar::SetfFuelConsumption)
38+
.def("ChangefFuel", &CCar::ChangefFuel)
39+
.def("ChangefHealth", &CCar::ChangefHealth)
40+
.def("PlayDamageParticles", &CCar::PlayDamageParticles)
41+
.def("StopDamageParticles", &CCar::StopDamageParticles)
42+
.def("StartEngine", &CCar::StartEngine)
43+
.def("StopEngine", &CCar::StopEngine)
44+
.def("IsActiveEngine", &CCar::isActiveEngine)
45+
/***** added by Ray Twitty (aka Shadows) END *****/
3146
.def(constructor<>())];
3247
});

0 commit comments

Comments
 (0)