Skip to content

Commit

Permalink
DRAGONAGE2: Use ScopedPtr in Campaign
Browse files Browse the repository at this point in the history
  • Loading branch information
DrMcCoy committed Oct 26, 2016
1 parent b21afa9 commit 112bd75
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 24 deletions.
33 changes: 13 additions & 20 deletions src/engines/dragonage2/campaign.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ Campaign::Campaign(Game &game, const Common::UString &cifPath,
const Common::UString &manifestPath, const Common::UString &addinBase) :
Object(kObjectTypeModule), _game(&game), _cifPath(cifPath),
_addinBase(addinBase), _enabled(false), _bioware(false), _needsAuth(false),
_priority(0xFFFFFFFF), _format(0xFFFFFFFF), _state(0xFFFFFFFF), _rimRoot(0),
_loaded(false), _pc(0), _currentArea(0) {
_priority(0xFFFFFFFF), _format(0xFFFFFFFF), _state(0xFFFFFFFF),
_loaded(false), _pc(0) {

_entryPosition[0] = 0.0;
_entryPosition[1] = 0.0;
Expand All @@ -83,9 +83,6 @@ Campaign::Campaign(Game &game, const Common::UString &cifPath,
}

Campaign::~Campaign() {
delete _rimRoot;
_rimRoot = 0;

try {
unload();
} catch (...) {
Expand Down Expand Up @@ -299,7 +296,7 @@ const std::vector<Common::UString> &Campaign::getAreas() const {
}

Area *Campaign::getCurrentArea() const {
return _currentArea;
return _currentArea.get();
}

Creature *Campaign::getPC() const {
Expand Down Expand Up @@ -344,7 +341,7 @@ void Campaign::readCIFDynamic(const Common::UString &path) {

const GFF4Struct *rimRoot = cifTop.getStruct(kGFF4RimTreeRootNode);
if (rimRoot)
_rimRoot = readRIMs(*rimRoot);
_rimRoot.reset(readRIMs(*rimRoot));

readVarTable(cifTop);
readScript(cifTop);
Expand All @@ -366,11 +363,8 @@ void Campaign::load() {
void Campaign::unload() {
leave();

delete _currentArea;
_currentArea = 0;

delete _rimRoot;
_rimRoot = 0;
_currentArea.reset();
_rimRoot.reset();

_areaMap.clear();
_areas.clear();
Expand Down Expand Up @@ -416,13 +410,13 @@ void Campaign::enterArea(bool startArea) {

_eventQueue.clear();

_currentArea->runScript(kEventTypeEnter , _currentArea, _pc);
_currentArea->runScript(kEventTypeAreaLoadPreLoadExit, _currentArea);
_currentArea->runScript(kEventTypeEnter , _currentArea.get(), _pc);
_currentArea->runScript(kEventTypeAreaLoadPreLoadExit, _currentArea.get());

_currentArea->show();

_currentArea->runScript(kEventTypeAreaLoadPostLoadExit, _currentArea);
_currentArea->runScript(kEventTypeAreaLoadSpecial , _currentArea);
_currentArea->runScript(kEventTypeAreaLoadPostLoadExit, _currentArea.get());
_currentArea->runScript(kEventTypeAreaLoadSpecial , _currentArea.get());

status("Entered area \"%s\" (\"%s\")", _currentArea->getTag().c_str(), _currentArea->getName().getString().c_str());
}
Expand Down Expand Up @@ -455,16 +449,15 @@ void Campaign::leaveArea() {
return;

if (_pc)
_currentArea->runScript(kEventTypeExit, _currentArea, _pc);
_currentArea->runScript(kEventTypeExit, _currentArea.get(), _pc);

_currentArea->hide();
}

void Campaign::unloadArea() {
leaveArea();

delete _currentArea;
_currentArea = 0;
_currentArea.reset();

clearObjects();
}
Expand All @@ -478,7 +471,7 @@ void Campaign::loadArea() {
if (area == _areaMap.end())
throw Common::Exception("Area \"%s\" does not exist in this campaign", _newArea.c_str());

_currentArea = new Area(*this, area->second->area, area->second->environment, area->second->rim);
_currentArea.reset(new Area(*this, area->second->area, area->second->environment, area->second->rim));
}

bool Campaign::changeArea() {
Expand Down
9 changes: 5 additions & 4 deletions src/engines/dragonage2/campaign.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <list>
#include <map>

#include "src/common/scopedptr.h"
#include "src/common/ustring.h"

#include "src/aurora/locstring.h"
Expand Down Expand Up @@ -148,8 +149,8 @@ class Campaign : public DragonAge2::Object, public DragonAge2::ObjectContainer {

std::vector<Common::UString> _packages;

RIMNode *_rimRoot;
AreaMap _areaMap;
Common::ScopedPtr<RIMNode> _rimRoot;
AreaMap _areaMap;

std::vector<Common::UString> _areas;

Expand All @@ -161,8 +162,8 @@ class Campaign : public DragonAge2::Object, public DragonAge2::ObjectContainer {
/** The player character we use. */
Creature *_pc;

Common::UString _newArea; ///< The new area to enter.
Area *_currentArea; ///< The current area.
Common::UString _newArea; ///< The new area to enter.
Common::ScopedPtr<Area> _currentArea; ///< The current area.

EventQueue _eventQueue;

Expand Down

0 comments on commit 112bd75

Please sign in to comment.