Skip to content

Commit 02c6259

Browse files
committed
-
1 parent f1da1c3 commit 02c6259

14 files changed

Lines changed: 162 additions & 97 deletions

src/AudioSource.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ bool AudioSampleBuffer::SetupBufferData(int sampleRate, int bitsPerSample, int c
3333
return false;
3434
}
3535

36+
mDataLength = dataLength;
3637
mSampleRate = sampleRate;
3738
mBitsPerSample = bitsPerSample;
3839
mChannelsCount = channelsCount;
@@ -64,6 +65,22 @@ bool AudioSampleBuffer::IsStereo() const
6465
return mChannelsCount == 2;
6566
}
6667

68+
float AudioSampleBuffer::GetBufferDurationSeconds() const
69+
{
70+
float durationSeconds = 0.0f;
71+
if (ContainsData())
72+
{
73+
int samplesCount = mDataLength / (mChannelsCount * (mBitsPerSample / 8));
74+
durationSeconds = (1.0f * samplesCount) / mSampleRate;
75+
}
76+
return durationSeconds;
77+
}
78+
79+
bool AudioSampleBuffer::ContainsData() const
80+
{
81+
return (mDataLength > 0) && (mChannelsCount > 0) && (mBitsPerSample > 0) && (mSampleRate > 0);
82+
}
83+
6784
//////////////////////////////////////////////////////////////////////////
6885

6986
AudioSource::AudioSource()

src/AudioSource.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,20 @@ class AudioSampleBuffer final: public cxx::noncopyable
3232
bool SetupBufferData(int sampleRate, int bitsPerSample, int channelsCount, int dataLength, const void* bufferData);
3333
bool IsBufferError() const;
3434

35+
float GetBufferDurationSeconds() const;
36+
3537
// Sample data desc
3638
bool IsStereo() const;
3739
bool IsMono() const;
3840

41+
bool ContainsData() const;
42+
3943
private:
4044
unsigned int mBufferID = 0; // openal buffer handle
4145
int mSampleRate = 0;
4246
int mBitsPerSample = 0;
4347
int mChannelsCount = 0;
48+
int mDataLength = 0;
4449
};
4550

4651
// Represents audio channel instance which can play sounds

src/CarnageGame.cpp

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ CvarEnum<eGtaGameVersion> gCvarGameVersion("g_gamever", eGtaGameVersion_Unknown,
3131
CvarString gCvarGameLanguage("g_gamelang", "en", "Current game language", CvarFlags_Init);
3232
CvarInt gCvarNumPlayers("g_numplayers", 1, "Number of players in split screen mode", CvarFlags_Init);
3333

34+
// debug
35+
CvarVoid gCvarDbgDumpSpriteDeltas("dbg_dumpSpriteDeltas", "Dump sprite deltas", CvarFlags_None);
36+
CvarVoid gCvarDbgDumpBlockTextures("dbg_dumpBlocks", "Dump block textures", CvarFlags_None);
37+
CvarVoid gCvarDbgDumpSprites("dbg_dumpSprites", "Dump all sprites", CvarFlags_None);
38+
CvarVoid gCvarDbgDumpCarSprites("dbg_dumpCarSprites", "Dump car sprites", CvarFlags_None);
39+
3440
//////////////////////////////////////////////////////////////////////////
3541

3642
CarnageGame gCarnageGame;
@@ -127,6 +133,8 @@ void CarnageGame::UpdateFrame()
127133
// advance game state
128134
if (IsInGameState())
129135
{
136+
ProcessDebugCvars();
137+
130138
gSpriteManager.UpdateBlocksAnimations(deltaTime);
131139
gPhysics.UpdateFrame();
132140
gGameObjectsManager.UpdateFrame();
@@ -389,10 +397,6 @@ bool CarnageGame::StartScenario(const std::string& mapName)
389397
{
390398
debug_assert(false);
391399
}
392-
//gSpriteManager.DumpSpriteDeltas("D:/Temp/gta1_deltas");
393-
//gSpriteCache.DumpBlocksTexture("D:/Temp/gta1_blocks");
394-
//gSpriteManager.DumpSpriteTextures("D:/Temp/gta1_sprites");
395-
//gSpriteManager.DumpCarsTextures("D:/Temp/gta_cars");
396400

397401
gPhysics.EnterWorld();
398402
gParticleManager.EnterWorld();
@@ -579,3 +583,38 @@ std::string CarnageGame::GetTextsLanguageFileName(const std::string& languageID)
579583

580584
return "ENGLISH.FXT";
581585
}
586+
587+
void CarnageGame::ProcessDebugCvars()
588+
{
589+
if (gCvarDbgDumpSpriteDeltas.IsModified())
590+
{
591+
gCvarDbgDumpSpriteDeltas.ClearModified();
592+
std::string savePath = gFiles.mExecutableDirectory + "/sprite_deltas";
593+
gSpriteManager.DumpSpriteDeltas(savePath);
594+
gConsole.LogMessage(eLogMessage_Info, "Sprite deltas path is '%s'", savePath.c_str());
595+
}
596+
597+
if (gCvarDbgDumpBlockTextures.IsModified())
598+
{
599+
gCvarDbgDumpBlockTextures.ClearModified();
600+
std::string savePath = gFiles.mExecutableDirectory + "/block_textures";
601+
gSpriteManager.DumpBlocksTexture(savePath);
602+
gConsole.LogMessage(eLogMessage_Info, "Blocks textures path is '%s'", savePath.c_str());
603+
}
604+
605+
if (gCvarDbgDumpSprites.IsModified())
606+
{
607+
gCvarDbgDumpSprites.ClearModified();
608+
std::string savePath = gFiles.mExecutableDirectory + "/sprites";
609+
gSpriteManager.DumpSpriteTextures(savePath);
610+
gConsole.LogMessage(eLogMessage_Info, "Sprites path is '%s'", savePath.c_str());
611+
}
612+
613+
if (gCvarDbgDumpCarSprites.IsModified())
614+
{
615+
gCvarDbgDumpCarSprites.ClearModified();
616+
std::string savePath = gFiles.mExecutableDirectory + "/car_sprites";
617+
gSpriteManager.DumpCarsTextures(savePath);
618+
gConsole.LogMessage(eLogMessage_Info, "Car sprites path is '%s'", savePath.c_str());
619+
}
620+
}

src/CarnageGame.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ class CarnageGame final: public InputEventsHandler
6565

6666
bool StartScenario(const std::string& mapName);
6767
void ShutdownCurrentScenario();
68+
69+
void ProcessDebugCvars();
6870
};
6971

7072
extern CarnageGame gCarnageGame;

src/ConsoleVar.cpp

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@ Cvar::~Cvar()
1616

1717
void Cvar::CallWithParams(const std::string& params)
1818
{
19-
if (params.empty()) // print cvar info
19+
if (IsVoid() || !params.empty())
2020
{
21+
// try set new value
22+
SetFromString(params, eCvarSetMethod_Console);
23+
}
24+
else
25+
{
26+
// print cvar info
2127
std::string currValue;
2228
GetPrintableValue(currValue);
2329

@@ -27,10 +33,6 @@ void Cvar::CallWithParams(const std::string& params)
2733
gConsole.LogMessage(eLogMessage_Info, "Current value: '%s', default value: '%s', description: '%s'",
2834
currValue.c_str(), defaultValue.c_str(), mDescription.c_str());
2935
}
30-
else // try set new value
31-
{
32-
SetFromString(params, eCvarSetMethod_Console);
33-
}
3436
}
3537

3638
bool Cvar::SetFromString(const std::string& input, eCvarSetMethod setMethod)
@@ -39,10 +41,6 @@ bool Cvar::SetFromString(const std::string& input, eCvarSetMethod setMethod)
3941
{
4042
debug_assert(!IsHidden());
4143
}
42-
if (IsCommand())
43-
{
44-
debug_assert(false);
45-
}
4644
// check rom access
4745
if (IsReadonly() && (setMethod != eCvarSetMethod_Config))
4846
{
@@ -172,11 +170,6 @@ void Cvar::PrintInfo()
172170
cvarInfo += " ";
173171
cvarInfo += "point";
174172
}
175-
if (IsCommand())
176-
{
177-
cvarInfo += " ";
178-
cvarInfo += "command";
179-
}
180173
cvarInfo += " ]";
181174
gConsole.LogMessage(eLogMessage_Info, cvarInfo.c_str());
182175
}
@@ -461,38 +454,24 @@ bool CvarVec3::DeserializeValue(const std::string& input, bool& valueChanged)
461454

462455
//////////////////////////////////////////////////////////////////////////
463456

464-
CvarCommand::CvarCommand(const std::string& name, const std::string& description, CvarCommandProc commandProc, CvarFlags cvarFlags)
465-
: Cvar(name, description, cvarFlags | CvarFlags_CvarCommand)
466-
, mCommandProc(commandProc)
457+
CvarVoid::CvarVoid(const std::string& cvarName, const std::string& description, CvarFlags cvarFlags)
458+
: Cvar(cvarName, description, cvarFlags | CvarFlags_CvarVoid)
467459
{
468-
debug_assert(!IsArchive());
469-
debug_assert(!IsReadonly());
470-
debug_assert(!IsModified());
471-
}
472-
473-
void CvarCommand::GetPrintableValue(std::string& output) const
474-
{
475-
// do nothing
476-
477-
debug_assert(false);
478460
}
479461

480-
void CvarCommand::GetPrintableDefaultValue(std::string& output) const
462+
void CvarVoid::GetPrintableValue(std::string& output) const
481463
{
482-
// do nothing
483-
484-
debug_assert(false);
464+
output.clear();
485465
}
486466

487-
bool CvarCommand::DeserializeValue(const std::string& input, bool& valueChanged)
467+
void CvarVoid::GetPrintableDefaultValue(std::string& output) const
488468
{
489-
return false;
469+
output.clear();
490470
}
491471

492-
void CvarCommand::CallWithParams(const std::string& params)
472+
bool CvarVoid::DeserializeValue(const std::string& input, bool& valueChanged)
493473
{
494-
if (mCommandProc)
495-
{
496-
mCommandProc(params.c_str());
497-
}
498-
}
474+
mCallingArgs = input;
475+
valueChanged = true;
476+
return true;
477+
}

src/ConsoleVar.h

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ enum CvarFlags: unsigned long
2020
CvarFlags_CvarPoint = BIT(13), // 2 ints
2121
CvarFlags_CvarVec3 = BIT(14), // 3 floats
2222
CvarFlags_CvarEnum = BIT(15), // int
23-
// special value types
24-
CvarFlags_CvarCommand = BIT(16), // does not holds any data but executes command
23+
CvarFlags_CvarVoid = BIT(16), // cvar contains to data and acts like command
2524
};
2625
decl_enum_as_flags(CvarFlags);
2726

@@ -87,7 +86,7 @@ class Cvar: public cxx::noncopyable
8786
bool IsColor() const { return (mCvarFlags & CvarFlags_CvarColor) > 0; }
8887
bool IsPoint() const { return (mCvarFlags & CvarFlags_CvarPoint) > 0; }
8988
bool IsVec3() const { return (mCvarFlags & CvarFlags_CvarVec3) > 0; }
90-
bool IsCommand() const { return (mCvarFlags & CvarFlags_CvarCommand)> 0; }
89+
bool IsVoid() const { return (mCvarFlags & CvarFlags_CvarVoid) > 0; }
9190

9291
protected:
9392
Cvar(const std::string& cvarName, const std::string& description, CvarFlags cvarFlags);
@@ -247,6 +246,25 @@ class CvarVec3: public Cvar
247246

248247
//////////////////////////////////////////////////////////////////////////
249248

249+
class CvarVoid: public Cvar
250+
{
251+
public:
252+
std::string mCallingArgs;
253+
254+
public:
255+
CvarVoid(const std::string& cvarName, const std::string& description, CvarFlags cvarFlags);
256+
257+
protected:
258+
// Get current value string representation
259+
void GetPrintableValue(std::string& output) const override;
260+
void GetPrintableDefaultValue(std::string& output) const override;
261+
262+
// Load new value from input string
263+
bool DeserializeValue(const std::string& input, bool& valueChanged) override;
264+
};
265+
266+
//////////////////////////////////////////////////////////////////////////
267+
250268
template<typename TEnum>
251269
class CvarEnum: public Cvar
252270
{
@@ -301,25 +319,4 @@ class CvarEnum: public Cvar
301319
}
302320
return true;
303321
}
304-
};
305-
306-
//////////////////////////////////////////////////////////////////////////
307-
308-
class CvarCommand: public Cvar
309-
{
310-
public:
311-
CvarCommandProc mCommandProc;
312-
313-
public:
314-
CvarCommand(const std::string& name, const std::string& description, CvarCommandProc commandProc, CvarFlags cvarFlags = CvarFlags_None);
315-
316-
protected:
317-
// Get current value string representation
318-
void GetPrintableValue(std::string& output) const override;
319-
void GetPrintableDefaultValue(std::string& output) const override;
320-
321-
// Load new value from input string
322-
bool DeserializeValue(const std::string& input, bool& valueChanged) override;
323-
324-
void CallWithParams(const std::string& params) override;
325322
};

src/FileSystem.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ FileSystem gFiles;
1818
bool FileSystem::Initialize()
1919
{
2020
mExecutablePath = cxx::get_executable_path();
21-
mWorkingDirectoryPath = cxx::get_parent_directory(mExecutablePath);
21+
mExecutableDirectory = cxx::get_parent_directory(mExecutablePath);
22+
mWorkingDirectoryPath = mExecutableDirectory;
2223
mWorkingDirectoryPath = cxx::get_parent_directory(mWorkingDirectoryPath); // root
2324
if (!mWorkingDirectoryPath.empty())
2425
{
@@ -34,6 +35,7 @@ bool FileSystem::Initialize()
3435
void FileSystem::Deinit()
3536
{
3637
mExecutablePath.clear();
38+
mExecutableDirectory.clear();
3739
mWorkingDirectoryPath.clear();
3840
mGameMapsList.clear();
3941
}

src/FileSystem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class FileSystem final: public cxx::noncopyable
66
public:
77
// standard places paths
88
std::string mExecutablePath;
9+
std::string mExecutableDirectory;
910
std::string mWorkingDirectoryPath;
1011
std::vector<std::string> mSearchPlaces;
1112
std::vector<std::string> mGameMapsList;

src/HUD.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ void HUDWeaponPanel::SetWeaponInfo(Weapon& weaponState)
110110
if ((mPrevAmmunitionCount == 0) || (mPrevAmmunitionCount != weaponState.mAmmunition))
111111
{
112112
mPrevAmmunitionCount = weaponState.mAmmunition;
113-
mAmmunitionText = cxx::va("%d", weaponState.mAmmunition);
113+
mAmmunitionText = cxx::va("%02d", weaponState.mAmmunition);
114114
}
115115

116116
WeaponInfo* weaponInfo = weaponState.GetWeaponInfo();

src/ParticleEffectsManager.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
#include "stdafx.h"
22
#include "ParticleEffectsManager.h"
33
#include "RenderingManager.h"
4+
#include "cvars.h"
5+
6+
//////////////////////////////////////////////////////////////////////////
7+
// cvars
8+
//////////////////////////////////////////////////////////////////////////
9+
10+
CvarBoolean gCvarCarSparksActive("g_carSparks", true, "Enable or disable car sparks effect", CvarFlags_Archive);
11+
12+
//////////////////////////////////////////////////////////////////////////
413

514
ParticleEffectsManager gParticleManager;
615

16+
//////////////////////////////////////////////////////////////////////////
17+
718
ParticleEffectsManager::ParticleEffectsManager()
819
{
920
}
@@ -137,5 +148,5 @@ void ParticleEffectsManager::StartCarSparks(const glm::vec3& position, const glm
137148

138149
bool ParticleEffectsManager::IsCarSparksEffectEnabled() const
139150
{
140-
return true;
151+
return gCvarCarSparksActive.mValue;
141152
}

0 commit comments

Comments
 (0)