|
From: <ka...@us...> - 2012-12-31 01:10:40
|
Revision: 7710
http://paintown.svn.sourceforge.net/paintown/?rev=7710&view=rev
Author: kazzmir
Date: 2012-12-31 01:10:32 +0000 (Mon, 31 Dec 2012)
Log Message:
-----------
[mugen] use ids instead of pointers to characters
Modified Paths:
--------------
trunk/src/mugen/character.cpp
trunk/src/mugen/character.h
trunk/src/mugen/common.h
trunk/src/mugen/compiler.cpp
trunk/src/mugen/helper.cpp
trunk/src/mugen/helper.h
trunk/src/mugen/object.h
trunk/src/mugen/stage.cpp
trunk/src/mugen/stage.h
trunk/src/mugen/state-controller.cpp
Modified: trunk/src/mugen/character.cpp
===================================================================
--- trunk/src/mugen/character.cpp 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/character.cpp 2012-12-31 01:10:32 UTC (rev 7710)
@@ -88,7 +88,34 @@
}
namespace PaintownUtil = ::Util;
+
+CharacterId::CharacterId():
+id(-1){
+}
+
+CharacterId::CharacterId(int value):
+id(value){
+}
+CharacterId::~CharacterId(){
+}
+
+CharacterId::CharacterId(const CharacterId & copy):
+id(copy.id){
+}
+
+bool CharacterId::operator==(const CharacterId & him) const {
+ return id == him.id;
+}
+
+bool CharacterId::operator!=(const CharacterId & him) const {
+ return !(*this == him);
+}
+
+int CharacterId::intValue() const {
+ return id;
+}
+
static string sourceLocation(const Ast::AttributeSimple & simple, const Filesystem::AbsolutePath & path){
ostringstream out;
out << "in " << path.path() << " at line " << simple.getLine() << " column " << simple.getColumn();
@@ -410,7 +437,6 @@
attack_ticket(0),
alliance(alliance),
facing(FacingLeft),
-objectId(-1),
ticket(0){
}
@@ -421,7 +447,6 @@
attack_ticket(0),
alliance(alliance),
facing(FacingLeft),
-objectId(-1),
ticket(0){
}
@@ -433,7 +458,6 @@
attack_ticket(copy.attack_ticket),
alliance(copy.alliance),
facing(copy.facing),
-objectId(copy.objectId),
ticket(copy.ticket){
}
@@ -550,14 +574,6 @@
void Character::reverseFacing(){
facing = getOppositeFacing();
}
-
-int Object::getObjectId() const {
- return objectId;
-}
-
-void Object::setObjectId(int id){
- this->objectId = id;
-}
Character::Character(const Filesystem::AbsolutePath & s, int alliance):
Object(alliance){
@@ -812,8 +828,8 @@
} else {
/* not all states in the .cmd file will have a statedef */
StateController * controller = parseState(section);
- if (getState(controller->getState()) != NULL){
- getState(controller->getState())->addController(controller);
+ if (getSelfState(controller->getState()) != NULL){
+ getSelfState(controller->getState())->addController(controller);
} else {
delete controller;
}
@@ -1035,7 +1051,7 @@
getLocalData().hitCount = 0;
ostringstream debug;
- debug << getDisplayName() << "-" << getObjectId();
+ debug << getDisplayName() << "-" << getId().intValue();
Global::debug(1, debug.str()) << "Change from state " << getLocalData().currentState << " to state " << stateNumber << endl;
getLocalData().previousState = getLocalData().currentState;
getLocalData().currentState = stateNumber;
@@ -1080,13 +1096,13 @@
getLocalData().hitCount = 0;
ostringstream debug;
- debug << getDisplayName() << "-" << getObjectId();
+ debug << getDisplayName() << "-" << getId().intValue();
Global::debug(1, debug.str()) << "Change from state " << getLocalData().currentState << " to state " << stateNumber << endl;
getLocalData().previousState = getLocalData().currentState;
getLocalData().currentState = stateNumber;
resetStateTime();
- if (getState(getLocalData().currentState) != NULL){
- PaintownUtil::ReferenceCount<State> state = getState(getLocalData().currentState);
+ if (getState(getLocalData().currentState, stage) != NULL){
+ PaintownUtil::ReferenceCount<State> state = getState(getLocalData().currentState, stage);
state->transitionTo(stage, *this);
doStates(stage, getLocalData().active, getLocalData().currentState);
} else {
@@ -1096,7 +1112,7 @@
/* TODO: get rid of the inputs parameter */
void Character::changeOwnState(Mugen::Stage & stage, int state, const std::vector<std::string> & inputs){
- getLocalData().characterData.who = NULL;
+ getLocalData().characterData.who = CharacterId(-1);
getLocalData().characterData.enabled = false;
changeState(stage, state);
}
@@ -2189,12 +2205,20 @@
}
void Character::bindTo(const Character * bound, int time, int facing, double offsetX, double offsetY){
- getLocalData().bind.bound = bound;
+ getLocalData().bind.bound = bound->getId();
getLocalData().bind.time = time;
getLocalData().bind.facing = facing;
getLocalData().bind.offsetX = offsetX;
getLocalData().bind.offsetY = offsetY;
}
+
+const CharacterId & Character::getId() const {
+ return getLocalData().id;
+}
+
+void Character::setId(const CharacterId & id){
+ getLocalData().id = id;
+}
bool Character::hasAnimation(int index) const {
return getAnimation(index) != NULL;
@@ -2795,8 +2819,8 @@
* the new state that was set from delayChangeState.
*/
if (getLocalData().stateTime == -1){
- if (getState(getLocalData().currentState) != NULL){
- PaintownUtil::ReferenceCount<State> state = getState(getLocalData().currentState);
+ PaintownUtil::ReferenceCount<State> state = getState(getLocalData().currentState, *stage);
+ if (state != NULL){
state->transitionTo(*stage, *this);
} else {
Global::debug(0) << "Unknown state " << getLocalData().currentState << endl;
@@ -2928,8 +2952,8 @@
}
void Character::testStates(Mugen::Stage & stage, const std::vector<std::string> & active, int stateNumber){
- if (getState(stateNumber) != NULL){
- PaintownUtil::ReferenceCount<State> state = getState(stateNumber);
+ if (getState(stateNumber, stage) != NULL){
+ PaintownUtil::ReferenceCount<State> state = getState(stateNumber, stage);
const vector<StateController*> & controllers = state->getControllers();
FullEnvironment environment(stage, *this, active);
for (vector<StateController*>::const_iterator it = controllers.begin(); it != controllers.end(); it++){
@@ -2982,20 +3006,20 @@
}
void Character::unbind(Character * who){
- if (getLocalData().bind.bound == who){
- getLocalData().bind.bound = NULL;
+ if (getLocalData().bind.bound == who->getId()){
+ getLocalData().bind.bound = CharacterId(-1);
getLocalData().bind.time = 0;
}
- if (getLocalData().characterData.who == who){
- getLocalData().characterData.who = NULL;
+ if (getLocalData().characterData.who == who->getId()){
+ getLocalData().characterData.who = CharacterId(-1);
getLocalData().characterData.enabled = false;
}
- for (map<int, vector<Character*> >::iterator it = getLocalData().targets.begin(); it != getLocalData().targets.end(); it++){
- vector<Character*> & objects = it->second;
- for (vector<Character*>::iterator it2 = objects.begin(); it2 != objects.end(); /**/){
- if (*it2 == who){
+ for (map<int, vector<CharacterId> >::iterator it = getLocalData().targets.begin(); it != getLocalData().targets.end(); it++){
+ vector<CharacterId> & objects = it->second;
+ for (vector<CharacterId>::iterator it2 = objects.begin(); it2 != objects.end(); /**/){
+ if (*it2 == who->getId()){
it2 = objects.erase(it2);
} else {
it2++;
@@ -3005,14 +3029,15 @@
}
void Character::doMovement(Stage & stage){
- if (getLocalData().bind.time > 0 && getLocalData().bind.bound != NULL){
+ if (getLocalData().bind.time > 0 && getLocalData().bind.bound != CharacterId(-1)){
getLocalData().bind.time -= 1;
- setX(getLocalData().bind.bound->getX() + getLocalData().bind.offsetX * (getLocalData().bind.bound->getFacing() == FacingLeft ? -1 : 1));
- setY(getLocalData().bind.bound->getY() + getLocalData().bind.offsetY);
+ const Character * bound = stage.getCharacter(getLocalData().bind.bound);
+ setX(bound->getX() + getLocalData().bind.offsetX * (bound->getFacing() == FacingLeft ? -1 : 1));
+ setY(bound->getY() + getLocalData().bind.offsetY);
switch (getLocalData().bind.facing){
- case -1: setFacing(getLocalData().bind.bound->getOppositeFacing()); break;
+ case -1: setFacing(bound->getOppositeFacing()); break;
case 0: maybeTurn(stage); break;
- case 1: setFacing(getLocalData().bind.bound->getFacing()); break;
+ case 1: setFacing(bound->getFacing()); break;
}
} else {
/* TODO: ensure that if shaketime > 0 that binding should still happen */
@@ -3060,26 +3085,26 @@
}
void Character::setTargetId(int id, Character * enemy){
- vector<Character*> & objects = getLocalData().targets[id];
+ vector<CharacterId> & objects = getLocalData().targets[id];
/* Don't add a duplicate target */
- for (vector<Character*>::iterator it = objects.begin(); it != objects.end(); it++){
- if (*it == enemy){
+ for (vector<CharacterId>::iterator it = objects.begin(); it != objects.end(); it++){
+ if (*it == enemy->getId()){
return;
}
}
- objects.push_back(enemy);
+ objects.push_back(enemy->getId());
}
-Character * Character::getTargetId(int id) const {
+CharacterId Character::getTargetId(int id) const {
if (getLocalData().targets.find(id) != getLocalData().targets.end()){
- const vector<Character*> & objects = getLocalData().targets.find(id)->second;
+ const vector<CharacterId> & objects = getLocalData().targets.find(id)->second;
if (objects.size() > 0){
/* FIXME: return a random target? */
return objects[PaintownUtil::rnd(objects.size())];
}
}
- return NULL;
+ return CharacterId(-1);
}
void Character::didHitGuarded(Character * enemy, Mugen::Stage & stage){
@@ -3088,14 +3113,14 @@
getLocalData().hitState.spritePriority = getHit().player1SpritePriority;
getLocalData().hitState.moveContact = 1;
addPower(getHit().getPower.guarded);
- getLocalData().characterData.who = NULL;
+ getLocalData().characterData.who = CharacterId(-1);
getLocalData().characterData.enabled = false;
disableHit();
}
void Character::didHit(Character * enemy, Mugen::Stage & stage){
- getLocalData().characterData.who = NULL;
+ getLocalData().characterData.who = CharacterId(-1);
getLocalData().characterData.enabled = false;
getLocalData().hitState.shakeTime = getHit().pause.player1;
getLocalData().hitState.spritePriority = getHit().player1SpritePriority;
@@ -3184,7 +3209,7 @@
}
void Character::wasHit(Mugen::Stage & stage, Character * enemy, const HitDefinition & hisHit){
- getLocalData().characterData.who = NULL;
+ getLocalData().characterData.who = CharacterId(-1);
getLocalData().characterData.enabled = false;
getLocalData().wasHitCounter += 1;
@@ -3273,8 +3298,8 @@
/* returns true if a state change occured */
bool Character::doStates(Mugen::Stage & stage, const vector<string> & active, int stateNumber){
int oldState = getCurrentState();
- if (getState(stateNumber) != NULL){
- PaintownUtil::ReferenceCount<State> state = getState(stateNumber);
+ if (getState(stateNumber, stage) != NULL){
+ PaintownUtil::ReferenceCount<State> state = getState(stateNumber, stage);
// Global::debug(0) << getDisplayName() << " evaluating state " << stateNumber << " states " << state->getControllers().size() << std::endl;
const vector<StateController*> & controllers = state->getControllers();
FullEnvironment environment(stage, *this, active);
@@ -4244,18 +4269,26 @@
void Character::setDrawOffset(double x, double y){
getLocalData().drawOffset.set(x, y);
}
-
-PaintownUtil::ReferenceCount<State> Character::getState(int id) const {
- if (getLocalData().characterData.enabled && getLocalData().characterData.who != NULL){
- return getLocalData().characterData.who->getState(id);
- }
+PaintownUtil::ReferenceCount<State> Character::getSelfState(int id) const {
if (getLocalData().states.find(id) != getLocalData().states.end()){
return getLocalData().states.find(id)->second;
}
return PaintownUtil::ReferenceCount<State>(NULL);
}
+PaintownUtil::ReferenceCount<State> Character::getState(int id, Stage & stage) const {
+ if (getLocalData().characterData.enabled &&
+ getLocalData().characterData.who != CharacterId(-1)){
+ Character * guy = stage.getCharacter(getLocalData().characterData.who);
+ if (guy != NULL){
+ return guy->getState(id, stage);
+ }
+ }
+
+ return getSelfState(id);
+}
+
void Character::setState(int id, PaintownUtil::ReferenceCount<State> what){
getLocalData().states[id] = what;
}
@@ -4297,7 +4330,7 @@
}
void Character::useCharacterData(const Character * who){
- getLocalData().characterData.who = who;
+ getLocalData().characterData.who = who->getId();
getLocalData().characterData.enabled = true;
}
@@ -4318,11 +4351,11 @@
return ok;
}
-std::map<int, vector<Character *> > & Character::getTargets(){
+std::map<int, vector<CharacterId> > & Character::getTargets(){
return getLocalData().targets;
}
-const std::map<int, vector<Character*> > & Character::getTargets() const {
+const std::map<int, vector<CharacterId> > & Character::getTargets() const {
return getLocalData().targets;
}
Modified: trunk/src/mugen/character.h
===================================================================
--- trunk/src/mugen/character.h 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/character.h 2012-12-31 01:10:32 UTC (rev 7710)
@@ -465,7 +465,14 @@
return getLocalData().currentState;
}
- virtual PaintownUtil::ReferenceCount<State> getState(int id) const;
+ /* Gets the state from this character regardless of what characterData holds */
+ virtual PaintownUtil::ReferenceCount<State> getSelfState(int id) const;
+
+ /* Like getState but potentially gets a state from another character if
+ * this one is borrowing their data.
+ */
+ virtual PaintownUtil::ReferenceCount<State> getState(int id, Stage & stage) const;
+
virtual void setState(int id, PaintownUtil::ReferenceCount<State> what);
virtual inline std::string getStateType() const {
@@ -810,8 +817,8 @@
*/
virtual void bindTo(const Character * bound, int time, int facing, double offsetX, double offsetY);
- std::map<int, std::vector<Character *> > & getTargets();
- const std::map<int, std::vector<Character*> > & getTargets() const;
+ std::map<int, std::vector<CharacterId> > & getTargets();
+ const std::map<int, std::vector<CharacterId> > & getTargets() const;
virtual inline int getHeight() const {
return getLocalData().height;
@@ -1084,7 +1091,7 @@
virtual void setTargetId(int id, Character * enemy);
/* get a target for a given id */
- virtual Character * getTargetId(int id) const;
+ virtual CharacterId getTargetId(int id) const;
virtual bool withinGuardDistance(const Mugen::Character * enemy) const;
@@ -1131,6 +1138,9 @@
virtual double getAirHitRecoverYAccel() const;
virtual void setAirHitRecoverYAccel(double yaccel);
+
+ const CharacterId & getId() const;
+ void setId(const CharacterId & id);
protected:
void initialize();
@@ -1196,6 +1206,8 @@
LocalData();
LocalData(const LocalData & copy);
+ CharacterId id;
+
/* Location is the directory passed in ctor
This is where the def is loaded and all the relevant files
are loaded from
@@ -1551,7 +1563,6 @@
*/
struct Bind{
Bind():
- bound(NULL),
time(0),
facing(0),
offsetX(0),
@@ -1566,7 +1577,7 @@
offsetY(you.offsetY){
}
- const Character * bound;
+ CharacterId bound;
int time;
int facing;
double offsetX;
@@ -1575,7 +1586,7 @@
Bind bind;
- std::map<int, std::vector<Character *> > targets;
+ std::map<int, std::vector<CharacterId> > targets;
int spritePriority;
@@ -1594,11 +1605,10 @@
struct CharacterData {
CharacterData():
- who(NULL),
enabled(false){
}
- const Character * who;
+ CharacterId who;
bool enabled;
} characterData;
Modified: trunk/src/mugen/common.h
===================================================================
--- trunk/src/mugen/common.h 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/common.h 2012-12-31 01:10:32 UTC (rev 7710)
@@ -17,6 +17,24 @@
FacingLeft, FacingRight
};
+/* Wrapper class for a character id (int) */
+class CharacterId{
+private:
+ int id;
+
+public:
+ CharacterId();
+ CharacterId(const CharacterId & copy);
+ explicit CharacterId(int value);
+ virtual ~CharacterId();
+ bool operator==(const CharacterId &) const;
+ bool operator!=(const CharacterId &) const;
+
+ /* Used to pass the raw integer value to mugen script */
+ int intValue() const;
+};
+
+
namespace AttackType{
extern std::string Normal;
extern std::string Special;
Modified: trunk/src/mugen/compiler.cpp
===================================================================
--- trunk/src/mugen/compiler.cpp 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/compiler.cpp 2012-12-31 01:10:32 UTC (rev 7710)
@@ -743,7 +743,7 @@
class ID: public Value{
public:
RuntimeValue evaluate(const Environment & environment) const {
- return RuntimeValue(environment.getCharacter().getObjectId());
+ return RuntimeValue(environment.getCharacter().getId().intValue());
}
virtual std::string toString() const {
@@ -1583,10 +1583,10 @@
class NumTarget: public Value {
public:
RuntimeValue evaluate(const Environment & environment) const {
- const map<int, vector<Character*> > & targets = environment.getCharacter().getTargets();
+ const map<int, vector<CharacterId> > & targets = environment.getCharacter().getTargets();
double count = 0;
- for (map<int, vector<Character* > >::const_iterator it = targets.begin(); it != targets.end(); it++){
- const vector<Character*> & objects = it->second;
+ for (map<int, vector<CharacterId > >::const_iterator it = targets.begin(); it != targets.end(); it++){
+ const vector<CharacterId> & objects = it->second;
count += objects.size();
}
return count;
@@ -2981,7 +2981,7 @@
RuntimeValue evaluate(const Environment & environment) const {
int id = (int) this->id->evaluate(environment).toNumber();
- return environment.getStage().findPlayerById(id) != NULL;
+ return environment.getStage().getCharacter(CharacterId(id)) != NULL;
}
Value * copy() const {
@@ -4399,10 +4399,10 @@
}
RuntimeValue evaluate(const Environment & environment) const {
- const map<int, vector<Character*> > & targets = environment.getCharacter().getTargets();
+ const map<int, vector<CharacterId> > & targets = environment.getCharacter().getTargets();
int index = this->index->evaluate(environment).toNumber();
if (targets.find(index) != targets.end()){
- const vector<Character*> & found = targets.find(index)->second;
+ const vector<CharacterId> & found = targets.find(index)->second;
return (int) found.size();
}
return 0;
Modified: trunk/src/mugen/helper.cpp
===================================================================
--- trunk/src/mugen/helper.cpp 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/helper.cpp 2012-12-31 01:10:32 UTC (rev 7710)
@@ -41,7 +41,7 @@
typedef PaintownUtil::ReferenceCount<State> RefState;
-RefState Helper::getState(int id) const {
+RefState Helper::getState(int id, Stage & stage) const {
/* states -3 and -2 are disabled for helpers */
if (id == -3 || id == -2){
return RefState(NULL);
@@ -53,7 +53,7 @@
}
map<int, RefState>::const_iterator findIt = proxyStates.find(id);
if (findIt == proxyStates.end() && owner != NULL){
- RefState dad = owner->getState(id);
+ RefState dad = owner->getSelfState(id);
if (dad != NULL){
/* this is why proxyStates has to be mutable */
proxyStates[id] = RefState(dad->deepCopy());
Modified: trunk/src/mugen/helper.h
===================================================================
--- trunk/src/mugen/helper.h 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/helper.h 2012-12-31 01:10:32 UTC (rev 7710)
@@ -27,7 +27,7 @@
using Character::getAnimation;
virtual PaintownUtil::ReferenceCount<Animation> getAnimation(int id) const;
using Character::getState;
- virtual PaintownUtil::ReferenceCount<State> getState(int id) const;
+ virtual PaintownUtil::ReferenceCount<State> getState(int id, Stage & stage) const;
void reParent(Character * parent);
Modified: trunk/src/mugen/object.h
===================================================================
--- trunk/src/mugen/object.h 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/object.h 2012-12-31 01:10:32 UTC (rev 7710)
@@ -70,8 +70,10 @@
virtual Facing getOppositeFacing() const;
virtual int getHeight() const = 0;
+ /*
virtual int getObjectId() const;
virtual void setObjectId(int id);
+ */
/*
virtual unsigned int getTicket() const;
@@ -121,7 +123,7 @@
unsigned int attack_ticket;
int alliance;
Facing facing;
- int objectId;
+ // int objectId;
unsigned int ticket;
};
Modified: trunk/src/mugen/stage.cpp
===================================================================
--- trunk/src/mugen/stage.cpp 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/stage.cpp 2012-12-31 01:10:32 UTC (rev 7710)
@@ -1805,7 +1805,7 @@
o->setY(p1starty);
o->setZ(currentZOffset());
o->setFacing(FacingRight);
- o->setObjectId(nextObjectId());
+ o->setId(nextId());
objects.push_back(o);
players.push_back(o);
@@ -1827,7 +1827,7 @@
o->setY(p2starty);
o->setZ(currentZOffset());
o->setFacing(FacingLeft);
- o->setObjectId(nextObjectId());
+ o->setId(nextId());
objects.push_back(o);
players.push_back(o);
@@ -1876,7 +1876,7 @@
}
void Mugen::Stage::addObject(Mugen::Character * o){
- o->setObjectId(nextObjectId());
+ o->setId(nextId());
addedObjects.push_back(o);
}
@@ -1887,22 +1887,24 @@
load();
}
-int Mugen::Stage::nextObjectId(){
+Mugen::CharacterId Mugen::Stage::nextId(){
int now = objectId;
objectId += 1;
- return now;
+ return CharacterId(now);
}
/* bleh.. */
+/*
Mugen::Character * Mugen::Stage::findObject(int id){
for (vector<Mugen::Character*>::iterator it = objects.begin(); it != objects.end(); it++){
Mugen::Character * object = *it;
- if (object->getObjectId() == id){
+ if (object->getd() == id){
return object;
}
}
return NULL;
}
+*/
// These should be the same, but we'll see, mugen has some funny parameters
int Mugen::Stage::getMaximumZ(){ return zoffset; }
@@ -2485,7 +2487,7 @@
}
}
} else {
- Mugen::Character * target = from->getTargetId(id);
+ Mugen::Character * target = getCharacter(from->getTargetId(id));
if (target != NULL){
targets.push_back(target);
}
@@ -2535,11 +2537,11 @@
}
}
}
-
-Mugen::Character * Mugen::Stage::findPlayerById(int id) const {
+
+Mugen::Character * Mugen::Stage::getCharacter(const CharacterId & id) const {
for (vector<Mugen::Character*>::const_iterator it = objects.begin(); it != objects.end(); it++){
Mugen::Character * object = *it;
- if (object->getObjectId() == id){
+ if (object->getId() == id){
return object;
}
}
Modified: trunk/src/mugen/stage.h
===================================================================
--- trunk/src/mugen/stage.h 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/stage.h 2012-12-31 01:10:32 UTC (rev 7710)
@@ -9,6 +9,7 @@
#include "exception.h"
#include "util.h"
#include "util/graphics/bitmap.h"
+#include "common.h"
namespace Graphics{
class Bitmap;
@@ -213,13 +214,15 @@
virtual void addObject(Character * o);
virtual bool finished() const;
virtual void reloadLevel();
- virtual Character * findObject(int id);
+ // virtual Character * findObject(int id);
virtual int getMaximumZ();
virtual int getMinimumZ();
static const std::string getStageName(const std::string &filename);
bool isaPlayer(Character * o) const;
+ virtual Character * getCharacter(const CharacterId & id) const;
+
virtual Character * getEnemy(const Character * who) const;
virtual std::vector<Character *> getTargets(int id, const Character * from) const;
@@ -253,8 +256,6 @@
virtual void addEffect(Effect * effect);
virtual void removeEffects(const Character * owner, int id);
- virtual Character * findPlayerById(int id) const;
-
virtual int countMyHelpers(const Character * owner) const;
virtual std::vector<Projectile*> findProjectile(int id, const Character * owner) const;
virtual std::vector<Effect*> findExplode(int id, const Character * owner) const;
@@ -374,7 +375,7 @@
bool doCollisionDetection(Object * obj1, Object * obj2);
bool doReversalDetection(Object * obj1, Object * obj2);
- int nextObjectId();
+ CharacterId nextId();
protected:
Modified: trunk/src/mugen/state-controller.cpp
===================================================================
--- trunk/src/mugen/state-controller.cpp 2012-12-30 22:39:02 UTC (rev 7709)
+++ trunk/src/mugen/state-controller.cpp 2012-12-31 01:10:32 UTC (rev 7710)
@@ -1118,20 +1118,20 @@
/* FIXME: targets should be a map of int to vector<Object*> in which case 'keep'
* would have an effect.
*/
- map<int, vector<Character*> > & targets = guy.getTargets();
- for (map<int, vector<Character*> >::iterator it = targets.begin(); it != targets.end(); /**/){
+ map<int, vector<CharacterId> > & targets = guy.getTargets();
+ for (map<int, vector<CharacterId> >::iterator it = targets.begin(); it != targets.end(); /**/){
if (it->first != id){
if (keep){
- vector<Character*> & objects = it->second;
+ vector<CharacterId> & objects = it->second;
if (objects.size() > 0){
/* Save a random object */
- Character * save = objects[PaintownUtil::rnd(objects.size())];
+ CharacterId save = objects[PaintownUtil::rnd(objects.size())];
objects.clear();
objects.push_back(save);
}
} else {
/* Otherwise remove all targets */
- map<int, vector<Character*> >::iterator kill = it;
+ map<int, vector<CharacterId> >::iterator kill = it;
it++;
targets.erase(kill);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|