编辑器中武将状态

给出让可进入部队的武将;

给出让可城市在职的武将;

给出让可城市在野的武将;

……

具体到关卡,为给出以上情况下更简洁提示,引入了武将状态。像已是进入部队的武将,给出在职时就不该可选了。

enum {STATE_UNKNOWN, STATE_SERVICE, STATE_WANDER, STATE_ARMY, STATE_RESERVE};
STATE_UNKNOWN: 一开始处于的状态,未分配。
STATE_SERVICE: 在城市在职;
STATE_WANDER: 在城市在野;
STATE_ARMY: 处在部队中;
STATE_RESERVE: 保留武将。这些武将一开始时不出现在关卡,但在过程中可能会出现,像到第N回合时会加入战场。

 

tstate,封装的除了状态还有城市编号

struct tstate {
	......
	int state;
	int city;
};

state:以上的状态变量。

city:城市。有效值用的是hero.dat出现的城市编号。-1指示无效值。

 

在一关卡,同一武将可处在多个势力

任一时刻,一个武将不应该同时出现在两个势力,但编辑器要关注的是整个关卡过程,第N回合武将归属势力a,第M回合该武将可能归属到势力b。因为这个多势力,武将状态需要支持同时在多个势力。

class hero_state 
{
	bool allocated(int side, bool exclude_reserve = false) const;
	......
	std::map<int, tstate> states_;
};

states_表示一个武将状态,first就是势力编号(基于0始)。

武将只有在被“使用”后才会现在states_,即如果该武将不被使用,那states_是空。

allocated用于判断具体一武将是否处于“使用”状态,返回true指示已“使用”。side参数是势力编号,当是有效编号时判断指定势力是否“使用”该武将,参数值是HEROS_INVALID_SIDE时则只要有势力“使用”了该武将就返回true。

exclude_reserve:是否要排除保留。值是ture时,处于保留状态的不认为是“使用”中。

 

不可分配武将不需要状态

武将分为可分配和不可分配。不可分配指的是在关卡不能设置的武将,在编号上是hero.dat中的0到49,像文官,士兵、建筑物、平民。可分配武将包括城市(编号50--99)、历史武将(编号>=100)。

artificals_、persons_
class tscenario: public tscenario_
{
	......
	std::map<int, hero_state> artificals_;
	std::map<int, hero_state> persons_;
}

它们存储可分配武将,类型都是std::map<int, hero_state>,first指的是武将编号,seond是该武将所处状态。artificals_存储城市,persons_存储历史武将。

 

全部评论: 0

    写评论: