Skip to content

Commit b3fbf7b

Browse files
committed
-
1 parent e6dd466 commit b3fbf7b

25 files changed

Lines changed: 373 additions & 348 deletions

gamedata/entities/common.json

Lines changed: 0 additions & 72 deletions
This file was deleted.

gamedata/entities/weapons.json

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
[
2+
{
3+
"weapon_type": "fists",
4+
"fire_type": "melee",
5+
// base params
6+
"base_hit_range": 0.2,
7+
"base_fire_rate": 2.0
8+
},
9+
10+
{
11+
"weapon_type": "pistol",
12+
"fire_type": "projectile",
13+
// projectile data
14+
"projectile_type": "bullet",
15+
"projectile_size": 0.025,
16+
"projectile_speed": 8.0,
17+
"projectile_object": 74,
18+
"projectile_hit_effect": 13, // spark
19+
// base params
20+
"base_hit_range": 4.5,
21+
"base_fire_rate": 2.0,
22+
"base_ammo_limit": 999,
23+
24+
"hud_sprite": 30
25+
},
26+
27+
{
28+
"weapon_type": "machinegun",
29+
"fire_type": "projectile",
30+
// projectile data
31+
"projectile_type": "bullet",
32+
"projectile_size": 0.025,
33+
"projectile_speed": 8.0,
34+
"projectile_object": 74,
35+
"projectile_hit_effect": 13, // spark
36+
// base params
37+
"base_hit_range": 4.5,
38+
"base_fire_rate": 8.0,
39+
"base_ammo_limit": 999,
40+
41+
"hud_sprite": 31
42+
},
43+
44+
{
45+
"weapon_type": "flamethrower",
46+
"fire_type": "projectile",
47+
// projectile data
48+
"projectile_type": "flame",
49+
"projectile_size": 0.075,
50+
"projectile_speed": 3.1,
51+
"projectile_object": 75,
52+
// base params
53+
"base_hit_range": 1.1,
54+
"base_fire_rate": 15.0,
55+
"base_ammo_limit": 999,
56+
57+
"hud_sprite": 33
58+
},
59+
60+
{
61+
"weapon_type": "rocket_launcher",
62+
"fire_type": "projectile",
63+
// projectile data
64+
"projectile_type": "missile",
65+
"projectile_size": 0.03,
66+
"projectile_speed": 4.4,
67+
"projectile_object": 31,
68+
// base params
69+
"base_hit_range": 20.0,
70+
"base_fire_rate": 1.0,
71+
"base_ammo_limit": 999,
72+
73+
"hud_sprite": 32
74+
}
75+
]

src/Carnage3D.vcxproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@
248248
<ClInclude Include="PixelsArray.h" />
249249
<ClInclude Include="TrimeshBuffer.h" />
250250
<ClInclude Include="Vehicle.h" />
251+
<ClInclude Include="WeaponInfo.h" />
251252
</ItemGroup>
252253
<ItemGroup>
253254
<ClCompile Include="AiCharacterController.cpp" />
@@ -322,6 +323,7 @@
322323
<ClCompile Include="PixelsArray.cpp" />
323324
<ClCompile Include="TrimeshBuffer.cpp" />
324325
<ClCompile Include="Vehicle.cpp" />
326+
<ClCompile Include="WeaponInfo.cpp" />
325327
</ItemGroup>
326328
<ItemGroup>
327329
<ProjectReference Include="Box2D\Box2D.vcxproj">
@@ -334,7 +336,7 @@
334336
<ItemGroup>
335337
<None Include="..\gamedata\config\inputs.json.default" />
336338
<None Include="..\gamedata\config\sys_config.json.default" />
337-
<None Include="..\gamedata\entities\common.json" />
339+
<None Include="..\gamedata\entities\weapons.json" />
338340
<None Include="..\gamedata\entities\gta_objects.json" />
339341
<None Include="..\gamedata\entities\ped_animations.json" />
340342
<None Include="..\gamedata\shaders\city_mesh.glsl" />

src/Carnage3D.vcxproj.filters

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,9 @@
350350
<ClInclude Include="Explosion.h">
351351
<Filter>Game\GameObjects</Filter>
352352
</ClInclude>
353+
<ClInclude Include="WeaponInfo.h">
354+
<Filter>Game</Filter>
355+
</ClInclude>
353356
</ItemGroup>
354357
<ItemGroup>
355358
<ClCompile Include="stdafx.cpp">
@@ -549,6 +552,9 @@
549552
<ClCompile Include="Explosion.cpp">
550553
<Filter>Game\GameObjects</Filter>
551554
</ClCompile>
555+
<ClCompile Include="WeaponInfo.cpp">
556+
<Filter>Game</Filter>
557+
</ClCompile>
552558
</ItemGroup>
553559
<ItemGroup>
554560
<None Include="..\gamedata\config\sys_config.json.default">
@@ -572,15 +578,15 @@
572578
<None Include="..\gamedata\config\inputs.json.default">
573579
<Filter>Data\config</Filter>
574580
</None>
575-
<None Include="..\gamedata\entities\common.json">
576-
<Filter>Data\entities</Filter>
577-
</None>
578581
<None Include="..\gamedata\entities\ped_animations.json">
579582
<Filter>Data\entities</Filter>
580583
</None>
581584
<None Include="..\gamedata\entities\gta_objects.json">
582585
<Filter>Data\entities</Filter>
583586
</None>
587+
<None Include="..\gamedata\entities\weapons.json">
588+
<Filter>Data\entities</Filter>
589+
</None>
584590
</ItemGroup>
585591
<ItemGroup>
586592
<Text Include="..\docs\CorrectionsToCDS.txt">

src/Decoration.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ void Decoration::UpdateFrame()
2626
gSpriteManager.GetSpriteTexture(mObjectID, mAnimationState.GetCurrentFrame(), 0, mDrawSprite);
2727
mDrawSprite.SetOriginToCenter();
2828
}
29+
30+
if (mLifeDuration > 0 && !mAnimationState.IsAnimationActive())
31+
{
32+
MarkForDeletion();
33+
}
2934
}
3035

3136
void Decoration::DrawDebug(DebugRenderer& debugRender)
@@ -49,4 +54,5 @@ void Decoration::Spawn(const glm::vec3& startPosition, cxx::angle_t startRotatio
4954
void Decoration::SetLifeDuration(int numAnimationCycles)
5055
{
5156
mLifeDuration = numAnimationCycles;
57+
mAnimationState.SetMaxRepeatCycles(numAnimationCycles);
5258
}

src/GameDefs.h

Lines changed: 8 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -677,33 +677,18 @@ enum ePedestrianAnimID
677677

678678
decl_enum_strings(ePedestrianAnimID);
679679

680-
// various sprites animations
681-
enum eSpriteAnimID
682-
{
683-
// cops
684-
685-
// projectiles
686-
eSpriteAnimID_Projectile_Missile,
687-
eSpriteAnimID_Projectile_Bullet,
688-
eSpriteAnimID_Projectile_Flame,
689-
690-
eSpriteAnimID_COUNT
691-
};
692-
693-
decl_enum_strings(eSpriteAnimID);
694-
695680
// pedestrian weapon
696-
enum eWeaponType
681+
enum eWeaponID
697682
{
698-
eWeaponType_Fists,
699-
eWeaponType_Pistol,
700-
eWeaponType_Machinegun,
701-
eWeaponType_Flamethrower,
702-
eWeaponType_RocketLauncher,
703-
eWeaponType_COUNT
683+
eWeapon_Fists,
684+
eWeapon_Pistol,
685+
eWeapon_Machinegun,
686+
eWeapon_Flamethrower,
687+
eWeapon_RocketLauncher,
688+
eWeapon_COUNT
704689
};
705690

706-
decl_enum_strings(eWeaponType);
691+
decl_enum_strings(eWeaponID);
707692

708693
// weapon fire type
709694
enum eWeaponFireType
@@ -819,34 +804,4 @@ struct PedestrianCtlState
819804
}
820805
public:
821806
bool mCtlActions[ePedestrianAction_COUNT]; // control actions
822-
};
823-
824-
// projectile type data
825-
struct ProjectileStyle
826-
{
827-
eProjectileType mTypeID = eProjectileType_Bullet;
828-
829-
eSpriteAnimID mAnimID = eSpriteAnimID_Projectile_Bullet;
830-
eSpriteAnimLoop mAnimLoop = eSpriteAnimLoop_FromStart;
831-
832-
float mBaseDistance = 1.0f; // how far projectile can fly, meters
833-
float mProjectileRadius = 1.0f; // size, meters
834-
float mSpeed = 1.0f; // how fast projectile moves, meters
835-
float mBasePrimaryDamageRadius = 0.0f; // how far projectile can impact, meters
836-
float mBaseSecondaryDamageRadius = 0.0f; // // how far projectile can impact, meters
837-
};
838-
839-
// weapon type data
840-
struct WeaponStyle
841-
{
842-
eWeaponType mTypeID = eWeaponType_Fists;
843-
844-
eWeaponFireType mFireTypeID = eWeaponFireType_Melee;
845-
eProjectileType mProjectileID = eProjectileType_Bullet; // has meaning only if mFireTypeID is projectile
846-
847-
float mBaseFireRate = 1.0f; // num shots per seconds
848-
float mBaseMeleeHitDistance = 1.0f; // has meaning only of mFireTypeID is melee
849-
850-
int mSpriteIndex = 0; // hud sprite
851-
int mBaseAmmoLimit = 0; // max ammo, 0 is unlimited
852807
};

src/GameObjectDefs.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ decl_enum_as_flags(eGameObjectFlags);
4343
enum
4444
{
4545
GameObjectType_Null = 0,
46+
// todo...
47+
GameObjectType_MissileProjectile = 31,
48+
GameObjectType_BulletProjectile = 74,
49+
GameObjectType_FireballProjectile = 75,
50+
4651
// todo...
4752
GameObjectType_MAX = 102
4853
};

src/GameObjectsManager.cpp

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -101,33 +101,19 @@ Vehicle* GameObjectsManager::CreateCar(const glm::vec3& position, cxx::angle_t h
101101
return vehicle;
102102
}
103103

104-
Projectile* GameObjectsManager::CreateProjectile(const glm::vec3& position, cxx::angle_t heading, eProjectileType typeID)
104+
Projectile* GameObjectsManager::CreateProjectile(const glm::vec3& position, cxx::angle_t heading)
105105
{
106-
Projectile* projectile = nullptr;
107-
debug_assert(typeID < eProjectileType_COUNT);
108-
for (ProjectileStyle& currStyle: gGameMap.mStyleData.mProjectiles)
109-
{
110-
if (currStyle.mTypeID == typeID)
111-
{
112-
projectile = CreateProjectile(position, heading, &currStyle);
113-
break;
114-
}
115-
}
116-
debug_assert(projectile);
117-
return projectile;
106+
return CreateProjectile(position, heading, nullptr);
118107
}
119108

120-
Projectile* GameObjectsManager::CreateProjectile(const glm::vec3& position, cxx::angle_t heading, ProjectileStyle* desc)
109+
Projectile* GameObjectsManager::CreateProjectile(const glm::vec3& position, cxx::angle_t heading, WeaponInfo* weaponInfo)
121110
{
122-
debug_assert(gGameMap.mStyleData.IsLoaded());
123-
debug_assert(desc);
124-
125-
Projectile* instance = mProjectilesPool.create(desc);
111+
Projectile* instance = mProjectilesPool.create();
126112
debug_assert(instance);
127113

128114
mAllObjectsList.push_back(instance);
129115
// init
130-
instance->Spawn(position, heading);
116+
instance->Spawn(position, heading, weaponInfo);
131117
return instance;
132118
}
133119

src/GameObjectsManager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ class GameObjectsManager final: public cxx::noncopyable
3838
Vehicle* CreateCar(const glm::vec3& position, cxx::angle_t heading, eCarModel carModel);
3939

4040
// Add new projectile instance to map at specific location
41-
Projectile* CreateProjectile(const glm::vec3& position, cxx::angle_t heading, eProjectileType typeID);
42-
Projectile* CreateProjectile(const glm::vec3& position, cxx::angle_t heading, ProjectileStyle* desc);
41+
Projectile* CreateProjectile(const glm::vec3& position, cxx::angle_t heading);
42+
Projectile* CreateProjectile(const glm::vec3& position, cxx::angle_t heading, WeaponInfo* weaponInfo);
4343

4444
// Add new decoration instance to map at specific location
4545
Decoration* CreateDecoration(const glm::vec3& position, cxx::angle_t heading, GameObjectStyle* desc);

src/HUD.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ void HUD::DrawFrame(UiContext& uiContext)
2222
return;
2323

2424
// temporary
25-
if (mCharacter->mCurrentWeapon != eWeaponType_Fists)
25+
if (mCharacter->mCurrentWeapon != eWeapon_Fists)
2626
{
27-
WeaponStyle& weapon = gGameMap.mStyleData.mWeapons[mCharacter->mCurrentWeapon];
27+
WeaponInfo& weapon = gGameMap.mStyleData.mWeapons[mCharacter->mCurrentWeapon];
2828
int spriteIndex = gGameMap.mStyleData.GetSpriteIndex(eSpriteType_Arrow, weapon.mSpriteIndex);
2929

3030
Sprite2D sprite;

0 commit comments

Comments
 (0)