Skip to content

Commit fceba61

Browse files
committed
-
1 parent d69c750 commit fceba61

14 files changed

Lines changed: 65 additions & 61 deletions

src/Decoration.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#include "Decoration.h"
33
#include "TimeManager.h"
44
#include "SpriteManager.h"
5-
#include "GameCheatsWindow.h"
65

76
Decoration::Decoration(GameObjectID id, GameObjectStyle* desc)
87
: GameObject(eGameObjectClass_Decoration, id)
@@ -15,14 +14,10 @@ Decoration::~Decoration()
1514
{
1615
}
1716

18-
void Decoration::DrawFrame(SpriteBatch& spriteBatch)
17+
void Decoration::PreDrawFrame()
1918
{
20-
if (!gGameCheatsWindow.mEnableDrawDecorations)
21-
return;
22-
2319
gSpriteManager.GetSpriteTexture(mObjectID, mAnimationState.GetCurrentFrame(), 0, mDrawSprite);
2420
mDrawSprite.SetOriginToCenter();
25-
spriteBatch.DrawSprite(mDrawSprite);
2621
}
2722

2823
void Decoration::UpdateFrame()

src/Decoration.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Decoration final: public GameObject
1414
~Decoration();
1515

1616
// override GameObject
17-
void DrawFrame(SpriteBatch& spriteBatch) override;
17+
void PreDrawFrame() override;
1818
void UpdateFrame() override;
1919
void DrawDebug(DebugRenderer& debugRender) override;
2020

@@ -23,6 +23,5 @@ class Decoration final: public GameObject
2323

2424
private:
2525
SpriteAnimation mAnimationState;
26-
Sprite2D mDrawSprite;
2726
GameObjectStyle* mGameObjectDesc = nullptr;
2827
};

src/GameObject.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class DebugRenderer;
88
class GameObject: public cxx::noncopyable
99
{
1010
friend class GameObjectsManager;
11+
friend class MapRenderer;
1112

1213
// add runtime information support for gameobject
1314
decl_rtti_base(GameObject)
@@ -22,8 +23,8 @@ class GameObject: public cxx::noncopyable
2223
public:
2324
virtual ~GameObject();
2425

25-
// draw gameobject
26-
virtual void DrawFrame(SpriteBatch& spriteBatch)
26+
// update drawing sprite
27+
virtual void PreDrawFrame()
2728
{
2829
}
2930
// process logic
@@ -74,6 +75,9 @@ class GameObject: public cxx::noncopyable
7475
GameObject* mParentObject = nullptr;
7576
std::vector<GameObject*> mAttachedObjects;
7677

78+
// drawing spricific data
79+
Sprite2D mDrawSprite;
80+
7781
private:
7882
// marked object will be destroyed next game frame
7983
bool mMarkedForDeletion = false;

src/MapRenderer.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,17 @@ void MapRenderer::DrawGameObject(RenderView* renderview, GameObject* gameObject)
111111
if (gameObject->IsMarkedForDeletion() || gameObject->IsInvisibleFlag())
112112
return;
113113

114-
gameObject->DrawFrame(mSpriteBatch);
114+
bool dbgSkipDraw =
115+
(!gGameCheatsWindow.mEnableDrawPedestrians && gameObject->IsPedestrianClass()) ||
116+
(!gGameCheatsWindow.mEnableDrawVehicles && gameObject->IsVehicleClass()) ||
117+
(!gGameCheatsWindow.mEnableDrawObstacles && gameObject->IsObstacleClass()) ||
118+
(!gGameCheatsWindow.mEnableDrawDecorations && gameObject->IsDecorationClass());
119+
120+
if (!dbgSkipDraw)
121+
{
122+
gameObject->PreDrawFrame();
123+
mSpriteBatch.DrawSprite(gameObject->mDrawSprite);
124+
}
115125

116126
if (!gameObject->HasAttachedObjects())
117127
return;

src/Obstacle.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#include "Obstacle.h"
33
#include "TimeManager.h"
44
#include "SpriteManager.h"
5-
#include "GameCheatsWindow.h"
65

76
Obstacle::Obstacle(GameObjectID id, GameObjectStyle* desc)
87
: GameObject(eGameObjectClass_Obstacle, id)
@@ -15,14 +14,10 @@ Obstacle::~Obstacle()
1514
{
1615
}
1716

18-
void Obstacle::DrawFrame(SpriteBatch& spriteBatch)
17+
void Obstacle::PreDrawFrame()
1918
{
20-
if (!gGameCheatsWindow.mEnableDrawObstacles)
21-
return;
22-
2319
gSpriteManager.GetSpriteTexture(mObjectID, mAnimationState.GetCurrentFrame(), 0, mDrawSprite);
2420
mDrawSprite.SetOriginToCenter();
25-
spriteBatch.DrawSprite(mDrawSprite);
2621
}
2722

2823
void Obstacle::UpdateFrame()

src/Obstacle.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Obstacle final: public GameObject
1414
~Obstacle();
1515

1616
// override GameObject
17-
void DrawFrame(SpriteBatch& spriteBatch) override;
17+
void PreDrawFrame() override;
1818
void UpdateFrame() override;
1919
void DrawDebug(DebugRenderer& debugRender) override;
2020

@@ -23,6 +23,5 @@ class Obstacle final: public GameObject
2323

2424
private:
2525
SpriteAnimation mAnimationState;
26-
Sprite2D mDrawSprite;
2726
GameObjectStyle* mGameObjectDesc = nullptr;
2827
};

src/Pedestrian.cpp

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "PedestrianStates.h"
99
#include "Vehicle.h"
1010
#include "TimeManager.h"
11-
#include "GameCheatsWindow.h"
1211

1312
Pedestrian::Pedestrian(GameObjectID id) : GameObject(eGameObjectClass_Pedestrian, id)
1413
, mPhysicsBody()
@@ -86,22 +85,11 @@ void Pedestrian::UpdateFrame()
8685
mStatesManager.ProcessFrame();
8786
}
8887

89-
void Pedestrian::DrawFrame(SpriteBatch& spriteBatch)
88+
void Pedestrian::PreDrawFrame()
9089
{
9190
glm::vec3 position = mPhysicsBody->mSmoothPosition;
9291
ComputeDrawHeight(position);
9392

94-
if (!gGameCheatsWindow.mEnableDrawPedestrians)
95-
return;
96-
97-
ePedestrianState currState = GetCurrentStateID();
98-
if (currState == ePedestrianState_DrivingCar)
99-
{
100-
// dont draw pedestrian if it in car with hard top
101-
if (mDrawHeight < mCurrentCar->mDrawHeight) // todo: check car props
102-
return;
103-
}
104-
10593
cxx::angle_t rotationAngle = mPhysicsBody->GetRotationAngle() - cxx::angle_t::from_degrees(SPRITE_ZERO_ANGLE);
10694

10795
int spriteIndex = mCurrentAnimState.GetCurrentFrame();
@@ -113,7 +101,6 @@ void Pedestrian::DrawFrame(SpriteBatch& spriteBatch)
113101
mDrawSprite.mRotateAngle = rotationAngle;
114102
mDrawSprite.mHeight = mDrawHeight;
115103
mDrawSprite.SetOriginToCenter();
116-
spriteBatch.DrawSprite(mDrawSprite);
117104
}
118105

119106
void Pedestrian::DrawDebug(DebugRenderer& debugRender)
@@ -136,10 +123,8 @@ void Pedestrian::ComputeDrawHeight(const glm::vec3& position)
136123
{
137124
if (mCurrentCar)
138125
{
139-
bool isBike = (mCurrentCar->mCarStyle->mVType == eCarVType_Motorcycle);
140126
// dont draw pedestrian if it in car with hard top
141-
if ((mCurrentCar->mCarStyle->mConvertible == eCarConvertible_HardTop ||
142-
mCurrentCar->mCarStyle->mConvertible == eCarConvertible_HardTopAnimated) && !isBike)
127+
if (mCurrentCar->HasHardTop())
143128
{
144129
mDrawHeight = mCurrentCar->mDrawHeight - 0.01f; // todo: magic numbers
145130
}

src/Pedestrian.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class Pedestrian final: public GameObject
4747

4848
// override GameObject
4949
void UpdateFrame() override;
50-
void DrawFrame(SpriteBatch& spriteBatch) override;
50+
void PreDrawFrame() override;
5151
void DrawDebug(DebugRenderer& debugRender) override;
5252

5353
// setup initial state when spawned or respawned on level
@@ -104,8 +104,6 @@ class Pedestrian final: public GameObject
104104
ePedestrianAnimID mCurrentAnimID;
105105
SpriteAnimation mCurrentAnimState;
106106
PedestrianStatesManager mStatesManager;
107-
108-
Sprite2D mDrawSprite;
109107
};
110108

111109
const int Sizeof_Pedestrian = sizeof(Pedestrian);

src/PedestrianStates.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ void PedestrianStatesManager::InitFuncsTable()
9191
&PedestrianStatesManager::StateDummy_ProcessEvent};
9292

9393
mFuncsTable[ePedestrianState_DrivingCar] = {&PedestrianStatesManager::StateDriveCar_ProcessEnter,
94-
&PedestrianStatesManager::StateDummy_ProcessExit,
94+
&PedestrianStatesManager::StateDriveCar_ProcessExit,
9595
&PedestrianStatesManager::StateDummy_ProcessFrame,
9696
&PedestrianStatesManager::StateDriveCar_ProcessEvent};
9797

@@ -347,11 +347,27 @@ void PedestrianStatesManager::StateDead_ProcessEnter(const PedestrianStateEvent&
347347

348348
//////////////////////////////////////////////////////////////////////////
349349

350-
351350
void PedestrianStatesManager::StateDriveCar_ProcessEnter(const PedestrianStateEvent& stateEvent)
352351
{
353352
bool isBike = (mPedestrian->mCurrentCar->mCarStyle->mVType == eCarVType_Motorcycle);
354353
mPedestrian->SetAnimation(isBike ? ePedestrianAnim_SittingOnBike : ePedestrianAnim_SittingInCar, eSpriteAnimLoop_None);
354+
355+
// dont draw pedestrian if it in car with hard top
356+
if (mPedestrian->mCurrentCar->HasHardTop())
357+
{
358+
eGameObjectFlags flags = mPedestrian->mFlags | eGameObjectFlags_Invisible;
359+
mPedestrian->mFlags = flags;
360+
}
361+
}
362+
363+
void PedestrianStatesManager::StateDriveCar_ProcessExit()
364+
{
365+
// show ped
366+
if (mPedestrian->mCurrentCar->HasHardTop())
367+
{
368+
eGameObjectFlags flags = mPedestrian->mFlags ^ eGameObjectFlags_Invisible;
369+
mPedestrian->mFlags = flags;
370+
}
355371
}
356372

357373
bool PedestrianStatesManager::StateDriveCar_ProcessEvent(const PedestrianStateEvent& stateEvent)

src/PedestrianStates.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class PedestrianStatesManager: public cxx::noncopyable
8888

8989
// state driving car
9090
void StateDriveCar_ProcessEnter(const PedestrianStateEvent& stateEvent);
91+
void StateDriveCar_ProcessExit();
9192
bool StateDriveCar_ProcessEvent(const PedestrianStateEvent& stateEvent);
9293

9394
// state exit car

0 commit comments

Comments
 (0)