Skip to content

Commit

Permalink
SpellsLvl01: Use std::unique_ptr
Browse files Browse the repository at this point in the history
  • Loading branch information
dscharrer committed Aug 27, 2021
1 parent 05df052 commit ebe67b9
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 38 deletions.
64 changes: 28 additions & 36 deletions src/game/magic/spells/SpellsLvl01.cpp
Expand Up @@ -32,12 +32,17 @@
#include "game/NPC.h"
#include "game/effect/ParticleSystems.h"
#include "game/magic/spells/SpellsLvl03.h"

#include "graphics/particle/ParticleEffects.h"
#include "graphics/particle/ParticleManager.h"

#include "physics/Collisions.h"

#include "scene/GameSound.h"
#include "scene/Object.h"

#include "util/Range.h"

bool MagicSightSpell::CanLaunch() {

return !spells.ExistAnyInstanceForThisCaster(m_type, m_caster);
Expand Down Expand Up @@ -121,14 +126,6 @@ MagicMissileSpell::MagicMissileSpell()
: m_mrCheat(false)
{ }

MagicMissileSpell::~MagicMissileSpell() {

for(size_t i = 0; i < m_missiles.size(); i++) {
delete m_missiles[i];
}
m_missiles.clear();
}

void MagicMissileSpell::Launch() {

m_duration = 6s;
Expand Down Expand Up @@ -209,14 +206,13 @@ void MagicMissileSpell::Launch() {

for(size_t i = 0; i < number; i++) {

CMagicMissile * missile = nullptr;
if(!m_mrCheat) {
missile = new CMagicMissile();
m_missiles.emplace_back(std::make_unique<CMagicMissile>());
} else {
missile = new MrMagicMissileFx();
m_missiles.emplace_back(std::make_unique<MrMagicMissileFx>());
}

m_missiles.push_back(missile);
CMagicMissile & missile = *m_missiles.back();

Anglef angles(pitch, yaw, 0.f);

Expand All @@ -225,14 +221,14 @@ void MagicMissileSpell::Launch() {
angles.setYaw(angles.getYaw() + Random::getf(-6.0f, 6.0f));
}

missile->Create(startPos, angles);
missile.Create(startPos, angles);

GameDuration lTime = m_duration + std::chrono::milliseconds(Random::get(-1000, 1000));

lTime = std::max(GameDuration(1s), lTime);
lMax = std::max(lMax, lTime);

missile->SetDuration(lTime);
missile.SetDuration(lTime);
}

ARX_SOUND_PlaySFX(g_snd.SPELL_MM_CREATE, &startPos);
Expand All @@ -248,9 +244,6 @@ void MagicMissileSpell::End() {
endLightDelayed(m_lights[i], 500ms);
}

for(size_t i = 0; i < m_missiles.size(); i++) {
delete m_missiles[i];
}
m_missiles.clear();

ARX_SOUND_Stop(snd_loop);
Expand All @@ -259,29 +252,28 @@ void MagicMissileSpell::End() {

void MagicMissileSpell::Update() {

for(size_t i = 0; i < m_missiles.size(); i++) {
CMagicMissile * missile = m_missiles[i];
for(CMagicMissile & missile : util::dereference(m_missiles)) {

if(missile->bExplo) {
if(missile.bExplo) {
continue;
}

Sphere sphere = Sphere(missile->eCurPos, 10.f);
Sphere sphere = Sphere(missile.eCurPos, 10.f);

Entity * caster = entities.get(m_caster);
if(CheckAnythingInSphere(sphere, caster, CAS_NO_SAME_GROUP)) {

LaunchMagicMissileExplosion(missile->eCurPos, m_mrCheat);
LaunchMagicMissileExplosion(missile.eCurPos, m_mrCheat);
if(caster) {
spawnAudibleSound(missile->eCurPos, *caster);
spawnAudibleSound(missile.eCurPos, *caster);
}

missile->SetTTL(1s);
missile->bExplo = true;
missile->bMove = false;
missile.SetTTL(1s);
missile.bExplo = true;
missile.bMove = false;

DamageParameters damage;
damage.pos = missile->eCurPos;
damage.pos = missile.eCurPos;
damage.radius = 80.f;
damage.damages = (4 + m_level * 0.2f) * 0.8f;
damage.area = DAMAGE_FULL;
Expand All @@ -292,15 +284,15 @@ void MagicMissileSpell::Update() {
DamageCreate(damage);

Color3f rgb(.3f, .3f, .45f);
ARX_PARTICLES_Add_Smoke(missile->eCurPos, 0, 6, rgb);
ARX_PARTICLES_Add_Smoke(missile.eCurPos, 0, 6, rgb);
}
}

Vec3f averageMissilePos = Vec3f(0.f);

for(size_t i = 0 ; i < m_missiles.size() ; i++) {
m_missiles[i]->Update(g_gameTime.lastFrameDuration());
averageMissilePos += m_missiles[i]->eCurPos;
for(CMagicMissile & missile : util::dereference(m_missiles)) {
missile.Update(g_gameTime.lastFrameDuration());
averageMissilePos += missile.eCurPos;
}

averageMissilePos /= float(m_missiles.size());
Expand All @@ -319,9 +311,8 @@ void MagicMissileSpell::Update() {

{
long nbmissiles = 0;
for(size_t i = 0; i < m_missiles.size(); i++) {
CMagicMissile * pMM = m_missiles[i];
if(pMM->bMove) {
for(CMagicMissile & missile : util::dereference(m_missiles)) {
if(missile.bMove) {
nbmissiles++;
}
}
Expand All @@ -330,9 +321,10 @@ void MagicMissileSpell::Update() {
}
}

for(size_t i = 0; i < m_missiles.size(); i++) {
m_missiles[i]->Render();
for(CMagicMissile & missile : util::dereference(m_missiles)) {
missile.Render();
}

}


Expand Down
5 changes: 3 additions & 2 deletions src/game/magic/spells/SpellsLvl01.h
Expand Up @@ -20,6 +20,8 @@
#ifndef ARX_GAME_MAGIC_SPELLS_SPELLSLVL01_H
#define ARX_GAME_MAGIC_SPELLS_SPELLSLVL01_H

#include <memory>

#include "game/magic/Spell.h"

#include "graphics/effects/MagicMissile.h"
Expand All @@ -41,7 +43,6 @@ class MagicMissileSpell final : public SpellBase {
public:

MagicMissileSpell();
~MagicMissileSpell() override;

void Launch() override;
void End() override;
Expand All @@ -52,7 +53,7 @@ class MagicMissileSpell final : public SpellBase {
bool m_mrCheat;
audio::SourcedSample snd_loop;
std::vector<LightHandle> m_lights;
std::vector<CMagicMissile *> m_missiles;
std::vector<std::unique_ptr<CMagicMissile>> m_missiles;

};

Expand Down

0 comments on commit ebe67b9

Please sign in to comment.