Fix performance issues
This commit is contained in:
+124
-104
@@ -9,42 +9,17 @@
|
|||||||
#define ROOM_HEIGHT 6
|
#define ROOM_HEIGHT 6
|
||||||
|
|
||||||
TDirtEntity::TDirtEntity(NGame::TEntity::TId id)
|
TDirtEntity::TDirtEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(TERRAIN_GROUP);
|
SetCollisionGroup(TERRAIN_GROUP);
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Wall.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Wall.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDirtEntity::Update(std::uint32_t delta) {
|
void TDirtEntity::Update(std::uint32_t delta) {
|
||||||
auto entityList = NGame::TApp::Instance()->EntityManager().CollisionList(Position(), Size(), DAMAGE_GROUP, Id());
|
|
||||||
|
|
||||||
for (auto& otherId : entityList) {
|
|
||||||
auto other = NGame::TApp::Instance()->EntityManager().Entity(otherId);
|
|
||||||
|
|
||||||
if (dynamic_cast<TExplosionEntity*>(other.get())) {
|
|
||||||
auto explosionCenter = other->Position() + other->Size() / 2;
|
|
||||||
auto ourCenter = Position() + Size() / 2;
|
|
||||||
|
|
||||||
float distance = (ourCenter - explosionCenter).Length();
|
|
||||||
if (distance <= other->Size().X) {
|
|
||||||
Remove();
|
|
||||||
|
|
||||||
std::size_t rockCount = rand() % 3 + 1;
|
|
||||||
while (rockCount--) {
|
|
||||||
NGame::Vec2f speedVector;
|
|
||||||
|
|
||||||
auto rockEntity = NGame::TApp::Instance()->EntityManager().MakeEntity<TRubbleEntity>();
|
|
||||||
rockEntity->SetPosition(Position());
|
|
||||||
speedVector.X = rand() % 100 - 50;
|
|
||||||
speedVector.Y = rand() % 50;
|
|
||||||
speedVector = speedVector.Normilize() * 100;
|
|
||||||
dynamic_cast<TRubbleEntity*>(rockEntity.get())->SetSpeed(speedVector);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDirtEntity::Draw() const {
|
void TDirtEntity::Draw() const {
|
||||||
@@ -52,6 +27,25 @@ void TDirtEntity::Draw() const {
|
|||||||
NGame::TApp::Instance()->SpriteManager().Draw(Sprite_, 1, Position());
|
NGame::TApp::Instance()->SpriteManager().Draw(Sprite_, 1, Position());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TDirtEntity::Alarm(NGame::TAlarm::TId id) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDirtEntity::Destroy() {
|
||||||
|
std::size_t rockCount = rand() % 3 + 1;
|
||||||
|
while (rockCount--) {
|
||||||
|
NGame::Vec2f speedVector;
|
||||||
|
|
||||||
|
auto rockEntity = NGame::TApp::Instance()->EntityManager().MakeEntity<TRubbleEntity>();
|
||||||
|
rockEntity->SetPosition(Position());
|
||||||
|
speedVector.X = rand() % 100 - 50;
|
||||||
|
speedVector.Y = rand() % 50;
|
||||||
|
speedVector = speedVector.Normilize() * 100;
|
||||||
|
dynamic_cast<TRubbleEntity*>(rockEntity.get())->SetSpeed(speedVector);
|
||||||
|
}
|
||||||
|
|
||||||
|
Remove();
|
||||||
|
}
|
||||||
|
|
||||||
TGrassEntity::TGrassEntity(NGame::TEntity::TId id)
|
TGrassEntity::TGrassEntity(NGame::TEntity::TId id)
|
||||||
: TDirtEntity(id) {
|
: TDirtEntity(id) {
|
||||||
}
|
}
|
||||||
@@ -62,7 +56,10 @@ void TGrassEntity::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TPlankEntity::TPlankEntity(NGame::TEntity::TId id)
|
TPlankEntity::TPlankEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(TERRAIN_GROUP);
|
SetCollisionGroup(TERRAIN_GROUP);
|
||||||
SetSize({16, 2});
|
SetSize({16, 2});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Plank.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Plank.txt");
|
||||||
@@ -78,7 +75,10 @@ void TPlankEntity::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TStoneEntity::TStoneEntity(NGame::TEntity::TId id)
|
TStoneEntity::TStoneEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(TERRAIN_GROUP);
|
SetCollisionGroup(TERRAIN_GROUP);
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Wall.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Wall.txt");
|
||||||
@@ -94,7 +94,10 @@ void TStoneEntity::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TLadderEntity::TLadderEntity(NGame::TEntity::TId id)
|
TLadderEntity::TLadderEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(LADDER_GROUP);
|
SetCollisionGroup(LADDER_GROUP);
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Ladder.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Ladder.txt");
|
||||||
@@ -114,7 +117,10 @@ void TLadderEntity::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TExplosionEntity::TExplosionEntity(NGame::TEntity::TId id)
|
TExplosionEntity::TExplosionEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(DAMAGE_GROUP);
|
SetCollisionGroup(DAMAGE_GROUP);
|
||||||
SetSize({64, 64});
|
SetSize({64, 64});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Light.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Light.txt");
|
||||||
@@ -131,12 +137,32 @@ void TExplosionEntity::Draw() const {
|
|||||||
|
|
||||||
void TExplosionEntity::Alarm(NGame::TAlarm::TId id) {
|
void TExplosionEntity::Alarm(NGame::TAlarm::TId id) {
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
|
auto entityList = NGame::TApp::Instance()->EntityManager().CollisionList(Position(), Size(), TERRAIN_GROUP | DAMAGE_GROUP, Id());
|
||||||
|
|
||||||
|
for (auto& otherId : entityList) {
|
||||||
|
auto other = NGame::TApp::Instance()->EntityManager().Entity(otherId);
|
||||||
|
auto dirtCenter = other->Position() + other->Size() / 2;
|
||||||
|
auto ourCenter = Position() + Size() / 2;
|
||||||
|
|
||||||
|
float distance = (ourCenter - dirtCenter).Length();
|
||||||
|
if (distance <= Size().X) {
|
||||||
|
if (dynamic_cast<TDirtEntity*>(other.get())) {
|
||||||
|
dynamic_cast<TDirtEntity*>(other.get())->Destroy();
|
||||||
|
} else if (dynamic_cast<TMineEntity*>(other.get())) {
|
||||||
|
dynamic_cast<TMineEntity*>(other.get())->Explode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Remove();
|
Remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TKeyEntity::TKeyEntity(NGame::TEntity::TId id)
|
TKeyEntity::TKeyEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(ITEM_GROUP);
|
SetCollisionGroup(ITEM_GROUP);
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Item.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Item.txt");
|
||||||
@@ -152,16 +178,20 @@ void TKeyEntity::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TMineEntity::TMineEntity(NGame::TEntity::TId id)
|
TMineEntity::TMineEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
|
SetCollisionGroup(DAMAGE_GROUP);
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Mine.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Mine.txt");
|
||||||
Blinking_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Flash.txt");
|
Blinking_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Flash.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMineEntity::Update(std::uint32_t delta) {
|
void TMineEntity::Update(std::uint32_t delta) {
|
||||||
auto& entityManager = NGame::TApp::Instance()->EntityManager();
|
auto& entityManager = App_->EntityManager();
|
||||||
switch (State_) {
|
|
||||||
|
|
||||||
|
switch (State_) {
|
||||||
case Dormant:
|
case Dormant:
|
||||||
if (!entityManager.IsPlaceEmpty(Position() + Size() / 2 - TriggerRadius_ / 2, TriggerRadius_, HERO_GROUP)) {
|
if (!entityManager.IsPlaceEmpty(Position() + Size() / 2 - TriggerRadius_ / 2, TriggerRadius_, HERO_GROUP)) {
|
||||||
Remaining_ = rand() % 5 + 5;
|
Remaining_ = rand() % 5 + 5;
|
||||||
@@ -175,45 +205,27 @@ void TMineEntity::Update(std::uint32_t delta) {
|
|||||||
|
|
||||||
case Active:
|
case Active:
|
||||||
if (!Remaining_) {
|
if (!Remaining_) {
|
||||||
auto explosion = entityManager.MakeEntity<TExplosionEntity>();
|
Explode();
|
||||||
explosion->SetPosition(Position() + Size() / 2 - explosion->Size() / 2 + NGame::Vec2i{0, 4});
|
|
||||||
Remove();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Chain detonation
|
void TMineEntity::Explode() {
|
||||||
auto entityList = NGame::TApp::Instance()->EntityManager().CollisionList(Position(), Size(), DAMAGE_GROUP, Id());
|
auto& entityManager = App_->EntityManager();
|
||||||
|
|
||||||
for (auto& otherId : entityList) {
|
|
||||||
auto other = NGame::TApp::Instance()->EntityManager().Entity(otherId);
|
|
||||||
|
|
||||||
if (dynamic_cast<TExplosionEntity*>(other.get())) {
|
|
||||||
auto explosionCenter = other->Position() + other->Size() / 2;
|
|
||||||
auto ourCenter = Position() + Size() / 2;
|
|
||||||
|
|
||||||
float distance = (ourCenter - explosionCenter).Length();
|
|
||||||
if (distance <= other->Size().X) {
|
|
||||||
auto explosion = entityManager.MakeEntity<TExplosionEntity>();
|
|
||||||
explosion->SetPosition(Position() + Size() / 2 - explosion->Size() / 2 + NGame::Vec2i{0, 4});
|
|
||||||
Remove();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
auto explosion = entityManager.MakeEntity<TExplosionEntity>();
|
||||||
|
explosion->SetPosition(Position() + Size() / 2 - explosion->Size() / 2 + NGame::Vec2i{0, 4});
|
||||||
|
Remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMineEntity::Draw() const {
|
void TMineEntity::Draw() const {
|
||||||
auto& renderManager = NGame::TApp::Instance()->RenderManager();
|
RenderManager_.SetLayer(NGame::TRenderManager::Background);
|
||||||
auto& spriteManager = NGame::TApp::Instance()->SpriteManager();
|
SpriteManager_.Draw(Sprite_, 0, Position());
|
||||||
|
|
||||||
renderManager.SetLayer(NGame::TRenderManager::Background);
|
|
||||||
spriteManager.Draw(Sprite_, 0, Position());
|
|
||||||
|
|
||||||
if (State_ == EState::Active) {
|
if (State_ == EState::Active) {
|
||||||
renderManager.SetLayer(NGame::TRenderManager::EffectsGlow);
|
RenderManager_.SetLayer(NGame::TRenderManager::EffectsGlow);
|
||||||
spriteManager.Draw(Blinking_, AlternateBlink_, Position() + (Size() * NGame::Vec2f(0.5f, 0.75f)) - Blinking_->Frames[0].Size, {2, 2});
|
SpriteManager_.Draw(Blinking_, AlternateBlink_, Position() + (Size() * NGame::Vec2f(0.5f, 0.75f)) - Blinking_->Frames[0].Size, {2, 2});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,7 +239,10 @@ void TMineEntity::Alarm(NGame::TAlarm::TId id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TCurseEntity::TCurseEntity(NGame::TEntity::TId id)
|
TCurseEntity::TCurseEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(ITEM_GROUP);
|
SetCollisionGroup(ITEM_GROUP);
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Item.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Item.txt");
|
||||||
@@ -243,7 +258,10 @@ void TCurseEntity::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TSpikeEntity::TSpikeEntity(NGame::TEntity::TId id)
|
TSpikeEntity::TSpikeEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(DAMAGE_GROUP);
|
SetCollisionGroup(DAMAGE_GROUP);
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Spike.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Spike.txt");
|
||||||
@@ -267,7 +285,10 @@ void TSpikeEntity::SetBloody(bool value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEntranceEntity::TEntranceEntity(NGame::TEntity::TId id)
|
TEntranceEntity::TEntranceEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetCollisionGroup(PASSAGE_GROUP);
|
SetCollisionGroup(PASSAGE_GROUP);
|
||||||
SetSize({16, 16});
|
SetSize({16, 16});
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Passage.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Passage.txt");
|
||||||
@@ -290,7 +311,6 @@ TExitEntity::TExitEntity(NGame::TEntity::TId id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TExitEntity::Update(std::uint32_t delta) {
|
void TExitEntity::Update(std::uint32_t delta) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TExitEntity::Draw() const {
|
void TExitEntity::Draw() const {
|
||||||
@@ -299,7 +319,10 @@ void TExitEntity::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TFloatingTextEntity::TFloatingTextEntity(NGame::TEntity::TId id)
|
TFloatingTextEntity::TFloatingTextEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
Alarm_.Set(0, 1000);
|
Alarm_.Set(0, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,10 +339,9 @@ void TFloatingTextEntity::Update(std::uint32_t delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TFloatingTextEntity::Draw() const {
|
void TFloatingTextEntity::Draw() const {
|
||||||
auto& renderManager = NGame::TApp::Instance()->RenderManager();
|
auto& fontManager = App_->FontManager();
|
||||||
auto& fontManager = NGame::TApp::Instance()->FontManager();
|
|
||||||
|
|
||||||
renderManager.SetLayer(NGame::TRenderManager::AfterLightEffects);
|
RenderManager_.SetLayer(NGame::TRenderManager::AfterLightEffects);
|
||||||
fontManager.Draw(Color_, Position(), Text_);
|
fontManager.Draw(Color_, Position(), Text_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -620,7 +642,10 @@ void TRoomEntity::SelectRoom(int type, TRoom& room) {
|
|||||||
|
|
||||||
|
|
||||||
THero::THero(NGame::TEntity::TId id)
|
THero::THero(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetSize(NGame::Vec2i(4, 12));
|
SetSize(NGame::Vec2i(4, 12));
|
||||||
SetPosition(NGame::Vec2i(0, 0));
|
SetPosition(NGame::Vec2i(0, 0));
|
||||||
SetCollisionGroup(HERO_GROUP);
|
SetCollisionGroup(HERO_GROUP);
|
||||||
@@ -706,8 +731,7 @@ void THero::Input(SDL_Event* event) {
|
|||||||
|
|
||||||
|
|
||||||
void THero::Update(std::uint32_t delta) {
|
void THero::Update(std::uint32_t delta) {
|
||||||
auto app = NGame::TApp::Instance();
|
auto& entityManager = App_->EntityManager();
|
||||||
auto& entityManager = app->EntityManager();
|
|
||||||
|
|
||||||
for (bool repeatState = true; repeatState; ) {
|
for (bool repeatState = true; repeatState; ) {
|
||||||
repeatState = false;
|
repeatState = false;
|
||||||
@@ -966,7 +990,7 @@ void THero::Update(std::uint32_t delta) {
|
|||||||
}
|
}
|
||||||
if (!moveResult.second.second) {
|
if (!moveResult.second.second) {
|
||||||
// Fall damage
|
// Fall damage
|
||||||
if (app->State().Variable("FallDamage").Bool() && (Position().Y - LastStablePosition_.Y > 40)) {
|
if (App_->State().Variable("FallDamage").Bool() && (Position().Y - LastStablePosition_.Y > 40)) {
|
||||||
State_ = EState::Dead;
|
State_ = EState::Dead;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -983,7 +1007,7 @@ void THero::Update(std::uint32_t delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set camera to track hero
|
// Set camera to track hero
|
||||||
app->RenderManager().SetCamera(Position() - app->RenderManager().Size() / 2);
|
RenderManager_.SetCamera(Position() - App_->RenderManager().Size() / 2);
|
||||||
|
|
||||||
// Reset pressed keys
|
// Reset pressed keys
|
||||||
IgnorePlanks_ = false;
|
IgnorePlanks_ = false;
|
||||||
@@ -991,11 +1015,8 @@ void THero::Update(std::uint32_t delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void THero::Draw() const {
|
void THero::Draw() const {
|
||||||
auto& renderManager = NGame::TApp::Instance()->RenderManager();
|
RenderManager_.SetLayer(NGame::TRenderManager::Foreground);
|
||||||
auto& spriteManager = NGame::TApp::Instance()->SpriteManager();
|
auto hero = SpriteManager_.Get("Sprites/Hero.txt");
|
||||||
|
|
||||||
renderManager.SetLayer(NGame::TRenderManager::Foreground);
|
|
||||||
auto hero = spriteManager.Get("Sprites/Hero.txt");
|
|
||||||
int spriteIndex = 0;
|
int spriteIndex = 0;
|
||||||
|
|
||||||
|
|
||||||
@@ -1013,14 +1034,14 @@ void THero::Draw() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (State_ != EState::Dead) {
|
if (State_ != EState::Dead) {
|
||||||
spriteManager.Draw(hero, spriteIndex, Position() - NGame::Vec2i((16 - Size().X) / 2, 16 - Size().Y), {(FaceLeft_?-1.0f:1.0f), 1.0f});
|
SpriteManager_.Draw(hero, spriteIndex, Position() - NGame::Vec2i((16 - Size().X) / 2, 16 - Size().Y), {(FaceLeft_?-1.0f:1.0f), 1.0f});
|
||||||
} else {
|
} else {
|
||||||
spriteManager.Draw(hero, spriteIndex, Position() - NGame::Vec2i((16 - Size().X) / 2, 16 - Size().Y - 3), {(FaceLeft_?-1.0f:1.0f), 1.0f});
|
SpriteManager_.Draw(hero, spriteIndex, Position() - NGame::Vec2i((16 - Size().X) / 2, 16 - Size().Y - 3), {(FaceLeft_?-1.0f:1.0f), 1.0f});
|
||||||
}
|
}
|
||||||
|
|
||||||
renderManager.SetLayer(NGame::TRenderManager::Light);
|
RenderManager_.SetLayer(NGame::TRenderManager::Light);
|
||||||
auto light = spriteManager.Get("Sprites/Light.txt");
|
auto light = SpriteManager_.Get("Sprites/Light.txt");
|
||||||
spriteManager.Draw(light, 0, Position() - (light->Frames[0].Size * 4 / 2), {4, 4});
|
SpriteManager_.Draw(light, 0, Position() - (light->Frames[0].Size * 4 / 2), {4, 4});
|
||||||
}
|
}
|
||||||
|
|
||||||
void THero::Alarm(NGame::TAlarm::TId id) {
|
void THero::Alarm(NGame::TAlarm::TId id) {
|
||||||
@@ -1030,36 +1051,38 @@ void THero::Alarm(NGame::TAlarm::TId id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TBackgroundTiler::TBackgroundTiler(NGame::TEntity::TId id)
|
TBackgroundTiler::TBackgroundTiler(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
Background_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Wall.txt");
|
Background_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Wall.txt");
|
||||||
}
|
}
|
||||||
void TBackgroundTiler::Draw() const {
|
void TBackgroundTiler::Draw() const {
|
||||||
auto& renderManager = NGame::TApp::Instance()->RenderManager();
|
auto cameraPosition = RenderManager_.Camera();
|
||||||
auto& spriteManager = NGame::TApp::Instance()->SpriteManager();
|
|
||||||
|
|
||||||
auto cameraPosition = renderManager.Camera();
|
|
||||||
auto tileOffset = cameraPosition;
|
auto tileOffset = cameraPosition;
|
||||||
tileOffset.X %= 16;
|
tileOffset.X %= 16;
|
||||||
tileOffset.Y %= 16;
|
tileOffset.Y %= 16;
|
||||||
|
|
||||||
|
RenderManager_.SetLayer(NGame::TRenderManager::Tile);
|
||||||
renderManager.SetLayer(NGame::TRenderManager::Tile);
|
|
||||||
for (int i = -1; i <= 320 / 16; ++i) {
|
for (int i = -1; i <= 320 / 16; ++i) {
|
||||||
for (int j = -1; j <= 240 / 16; ++j) {
|
for (int j = -1; j <= 240 / 16; ++j) {
|
||||||
spriteManager.Draw(Background_, 0, NGame::Vec2i(i * 16, j * 16) + cameraPosition - tileOffset);
|
SpriteManager_.Draw(Background_, 0, NGame::Vec2i(i * 16, j * 16) + cameraPosition - tileOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TRubbleEntity::TRubbleEntity(NGame::TEntity::TId id)
|
TRubbleEntity::TRubbleEntity(NGame::TEntity::TId id)
|
||||||
: NGame::TEntity(id) {
|
: NGame::TEntity(id)
|
||||||
|
, App_(NGame::TApp::Instance())
|
||||||
|
, RenderManager_(App_->RenderManager())
|
||||||
|
, SpriteManager_(App_->SpriteManager()) {
|
||||||
SetSize(8);
|
SetSize(8);
|
||||||
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Stone.txt");
|
Sprite_ = NGame::TApp::Instance()->SpriteManager().Get("Sprites/Stone.txt");
|
||||||
Alarm_.Set(0, 5000);
|
Alarm_.Set(0, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRubbleEntity::Update(std::uint32_t delta) {
|
void TRubbleEntity::Update(std::uint32_t delta) {
|
||||||
auto& entityManager = NGame::TApp::Instance()->EntityManager();
|
auto& entityManager = App_->EntityManager();
|
||||||
|
|
||||||
Speed_.Y += MovementPerTick(delta, Gravity_);
|
Speed_.Y += MovementPerTick(delta, Gravity_);
|
||||||
NGame::Vec2f resultSpeed = MovementPerTick(delta, Speed_);
|
NGame::Vec2f resultSpeed = MovementPerTick(delta, Speed_);
|
||||||
@@ -1081,11 +1104,8 @@ void TRubbleEntity::Update(std::uint32_t delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TRubbleEntity::Draw() const {
|
void TRubbleEntity::Draw() const {
|
||||||
auto& renderManager = NGame::TApp::Instance()->RenderManager();
|
RenderManager_.SetLayer(NGame::TRenderManager::Foreground);
|
||||||
auto& spriteManager = NGame::TApp::Instance()->SpriteManager();
|
SpriteManager_.Draw(Sprite_, 0, Position());
|
||||||
|
|
||||||
renderManager.SetLayer(NGame::TRenderManager::Foreground);
|
|
||||||
spriteManager.Draw(Sprite_, 0, Position());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRubbleEntity::Alarm(NGame::TAlarm::TId id) {
|
void TRubbleEntity::Alarm(NGame::TAlarm::TId id) {
|
||||||
|
|||||||
@@ -16,8 +16,14 @@ public:
|
|||||||
|
|
||||||
virtual void Update(std::uint32_t delta) override;
|
virtual void Update(std::uint32_t delta) override;
|
||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
virtual void Alarm(NGame::TAlarm::TId id) override;
|
||||||
|
void Destroy();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -35,6 +41,9 @@ public:
|
|||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -46,6 +55,9 @@ public:
|
|||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -57,6 +69,9 @@ public:
|
|||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -69,6 +84,9 @@ public:
|
|||||||
virtual void Alarm(NGame::TAlarm::TId id) override;
|
virtual void Alarm(NGame::TAlarm::TId id) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -80,6 +98,9 @@ public:
|
|||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -95,8 +116,13 @@ public:
|
|||||||
virtual void Update(std::uint32_t delta) override;
|
virtual void Update(std::uint32_t delta) override;
|
||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
virtual void Alarm(NGame::TAlarm::TId id) override;
|
virtual void Alarm(NGame::TAlarm::TId id) override;
|
||||||
|
void Explode();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
bool AlternateBlink_ = false;
|
bool AlternateBlink_ = false;
|
||||||
std::size_t Remaining_ = 0;
|
std::size_t Remaining_ = 0;
|
||||||
EState State_ = Dormant;
|
EState State_ = Dormant;
|
||||||
@@ -113,6 +139,10 @@ public:
|
|||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -126,6 +156,10 @@ public:
|
|||||||
void SetBloody(bool value);
|
void SetBloody(bool value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
bool IsBloody_ = false;
|
bool IsBloody_ = false;
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
@@ -138,6 +172,10 @@ public:
|
|||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -164,6 +202,10 @@ public:
|
|||||||
virtual void Alarm(NGame::TAlarm::TId id) override;
|
virtual void Alarm(NGame::TAlarm::TId id) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
std::string Text_;
|
std::string Text_;
|
||||||
NGame::TFontManager::EColor Color_;
|
NGame::TFontManager::EColor Color_;
|
||||||
};
|
};
|
||||||
@@ -259,6 +301,10 @@ public:
|
|||||||
virtual void Alarm(NGame::TAlarm::TId id) override;
|
virtual void Alarm(NGame::TAlarm::TId id) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
bool KeysPressed_[static_cast<int>(EKeys::MaxSentinel)] = {};
|
bool KeysPressed_[static_cast<int>(EKeys::MaxSentinel)] = {};
|
||||||
bool KeysHeld_[static_cast<int>(EKeys::MaxSentinel)] = {};
|
bool KeysHeld_[static_cast<int>(EKeys::MaxSentinel)] = {};
|
||||||
bool FaceLeft_ = false;
|
bool FaceLeft_ = false;
|
||||||
@@ -279,6 +325,10 @@ public:
|
|||||||
virtual void Draw() const override;
|
virtual void Draw() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Background_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Background_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -294,6 +344,10 @@ public:
|
|||||||
void SetSpeed(const NGame::Vec2f& speed);
|
void SetSpeed(const NGame::Vec2f& speed);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
NGame::TApp* App_;
|
||||||
|
NGame::TSpriteManager& SpriteManager_;
|
||||||
|
NGame::TRenderManager& RenderManager_;
|
||||||
|
|
||||||
const float Gravity_ = 500;
|
const float Gravity_ = 500;
|
||||||
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
std::shared_ptr<NGame::TSpriteManager::TSprite> Sprite_;
|
||||||
NGame::Vec2f Speed_ = NGame::Vec2f(0.0, 0.0);
|
NGame::Vec2f Speed_ = NGame::Vec2f(0.0, 0.0);
|
||||||
|
|||||||
Reference in New Issue
Block a user