Skip to content

Commit 7c0c116

Browse files
committed
Initial player level up logic.
Need to show character sheet UI next.
1 parent f171eb4 commit 7c0c116

3 files changed

Lines changed: 22 additions & 0 deletions

File tree

OpenTESArena/src/Game/Game.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,7 @@ void Game::loop()
916916
this->gameState.tickPlayerHealth(clampedDeltaTime, *this);
917917
this->gameState.tickPlayerStamina(clampedDeltaTime, *this);
918918
this->gameState.tickPlayerAttack(clampedDeltaTime, *this);
919+
this->gameState.tickPlayerLevel(*this);
919920
this->gameState.tickVoxels(clampedDeltaTime, *this);
920921
this->gameState.tickCollision(clampedDeltaTime, this->physicsSystem, *this);
921922

OpenTESArena/src/Game/GameState.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "Game.h"
77
#include "GameState.h"
88
#include "../Assets/ArenaPaletteName.h"
9+
#include "../Assets/ArenaSoundName.h"
910
#include "../Assets/ArenaTextureName.h"
1011
#include "../Assets/BinaryAssetLibrary.h"
1112
#include "../Assets/ExeData.h"
@@ -23,6 +24,7 @@
2324
#include "../Rendering/RenderCamera.h"
2425
#include "../Rendering/Renderer.h"
2526
#include "../Rendering/RendererUtils.h"
27+
#include "../Stats/CharacterClassLibrary.h"
2628
#include "../Stats/CharacterRaceLibrary.h"
2729
#include "../Time/ArenaClockUtils.h"
2830
#include "../Time/ClockLibrary.h"
@@ -913,6 +915,24 @@ void GameState::tickPlayerAttack(double dt, Game &game)
913915
player.queuedMeleeSwingDirection = -1;
914916
}
915917

918+
void GameState::tickPlayerLevel(Game &game)
919+
{
920+
Player &player = game.player;
921+
const CharacterClassDefinition &charClassDef = CharacterClassLibrary::getInstance().getDefinition(player.charClassDefID);
922+
const int requiredExpForLevelUp = charClassDef.getExperienceCap(player.level);
923+
924+
if (player.experience >= requiredExpForLevelUp)
925+
{
926+
player.level++;
927+
928+
AudioManager &audioManager = game.audioManager;
929+
audioManager.playSoundOneShot(ArenaSoundName::Fanfare1);
930+
DebugLogFormat("Player is now level %d.", player.level);
931+
932+
// @todo character sheet UI context
933+
}
934+
}
935+
916936
void GameState::tickVoxels(double dt, Game &game)
917937
{
918938
SceneManager &sceneManager = game.sceneManager;

OpenTESArena/src/Game/GameState.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ class GameState
167167
void tickPlayerHealth(double dt, Game &game);
168168
void tickPlayerStamina(double dt, Game &game);
169169
void tickPlayerAttack(double dt, Game &game);
170+
void tickPlayerLevel(Game &game);
170171
void tickVoxels(double dt, Game &game);
171172
void tickEntitiesPrePhysicsStep(double dt, Game &game);
172173
void tickEntitiesPostPhysicsStep(Game &game);

0 commit comments

Comments
 (0)