mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Refactoring
This commit is contained in:
parent
666d7a4f45
commit
36cdb2968b
@ -439,11 +439,15 @@ CInfoBoxPopup::CInfoBoxPopup(Point position, const CGGarrison * garr):
|
||||
|
||||
CIntObject * CRClickPopup::createInfoWin(Point position, const CGObjectInstance * specific) //specific=0 => draws info about selected town/hero
|
||||
{
|
||||
if(!specific)
|
||||
if(nullptr == specific)
|
||||
specific = adventureInt->selection;
|
||||
|
||||
assert(specific);
|
||||
|
||||
|
||||
if(nullptr == specific)
|
||||
{
|
||||
logGlobal->error("createInfoWin: no object to describe");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
switch(specific->ID)
|
||||
{
|
||||
case Obj::HERO:
|
||||
|
@ -525,6 +525,11 @@
|
||||
"icon": "zvs/Lib1.res/E_RETAIL1"
|
||||
}
|
||||
},
|
||||
|
||||
"VISIONS":
|
||||
{
|
||||
"hidden": true
|
||||
},
|
||||
"WATER_IMMUNITY":
|
||||
{
|
||||
"graphics":
|
||||
|
@ -17,7 +17,7 @@
|
||||
},
|
||||
"scuttleBoat" : {
|
||||
"index" : 1,
|
||||
"targetType": "LOCATION",
|
||||
"targetType": "NO_TARGET",
|
||||
|
||||
"sounds": {
|
||||
"cast": "SCUTBOAT"
|
||||
@ -40,7 +40,30 @@
|
||||
},
|
||||
"levels" : {
|
||||
"base":{
|
||||
"range" : "X"
|
||||
"range" : "0",
|
||||
"effects" : {
|
||||
"visionsMonsters" : {
|
||||
"type" : "VISIONS",
|
||||
"subtype" : 0,
|
||||
"duration" : "ONE_DAY",
|
||||
"val" : 1,
|
||||
"valueType" : "INDEPENDENT_MAX"
|
||||
}
|
||||
}
|
||||
},
|
||||
"advanced":{
|
||||
"effects" : {
|
||||
"visionsMonsters" : {
|
||||
"val" : 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"expert":{
|
||||
"effects" : {
|
||||
"visionsMonsters" : {
|
||||
"val" : 3
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"flags" : {
|
||||
@ -104,7 +127,29 @@
|
||||
},
|
||||
"levels" : {
|
||||
"base":{
|
||||
"range" : "X"
|
||||
"range" : "0",
|
||||
"effects" : {
|
||||
"fly" : {
|
||||
"type" : "FLYING_MOVEMENT",
|
||||
"subtype" : 2,
|
||||
"duration" : "ONE_DAY",
|
||||
"val" : 0 //in fact unused
|
||||
}
|
||||
}
|
||||
},
|
||||
"advanced":{
|
||||
"effects" : {
|
||||
"fly" : {
|
||||
"subtype" : 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"expert":{
|
||||
"effects" : {
|
||||
"fly" : {
|
||||
"subtype" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"flags" : {
|
||||
@ -120,7 +165,29 @@
|
||||
},
|
||||
"levels" : {
|
||||
"base":{
|
||||
"range" : "X"
|
||||
"range" : "0",
|
||||
"effects" : {
|
||||
"waterWalk" : {
|
||||
"type" : "WATER_WALKING",
|
||||
"subtype" : 2,
|
||||
"duration" : "ONE_DAY",
|
||||
"val" : 0 //in fact unused
|
||||
}
|
||||
}
|
||||
},
|
||||
"advanced":{
|
||||
"effects" : {
|
||||
"waterWalk" : {
|
||||
"subtype" : 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"expert":{
|
||||
"effects" : {
|
||||
"waterWalk" : {
|
||||
"subtype" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"flags" : {
|
||||
|
@ -19,37 +19,6 @@
|
||||
#include "../CGameState.h"
|
||||
#include "../CGameInfoCallback.h"
|
||||
|
||||
|
||||
///AdventureBonusingMechanics
|
||||
bool AdventureBonusingMechanics::applyAdventureEffects(const SpellCastEnvironment * env, AdventureSpellCastParameters & parameters) const
|
||||
{
|
||||
const int schoolLevel = parameters.caster->getSpellSchoolLevel(owner);
|
||||
const int subtype = spellLevelToSubtype(schoolLevel);
|
||||
|
||||
GiveBonus gb;
|
||||
gb.id = parameters.caster->id.getNum();
|
||||
gb.bonus = Bonus(Bonus::ONE_DAY, bonusTypeID, Bonus::SPELL_EFFECT, 0, owner->id, subtype);
|
||||
env->sendAndApply(&gb);
|
||||
return true;
|
||||
}
|
||||
|
||||
int FlyMechanics::spellLevelToSubtype(const int schoolLevel) const
|
||||
{
|
||||
return schoolLevel >= 2 ? 1 : 2; //adv or expert
|
||||
}
|
||||
|
||||
int VisionsMechanics::spellLevelToSubtype(const int schoolLevel) const
|
||||
{
|
||||
//0,1 schoolLevel => 0 subtype
|
||||
//2 schoolLevel => 1 subtype
|
||||
//3 schoolLevel => 2 subtype
|
||||
int result = schoolLevel - 1;
|
||||
vstd::amin(result, 0);
|
||||
vstd::amax(result, 2);
|
||||
return result; //adv or expert
|
||||
}
|
||||
|
||||
|
||||
///SummonBoatMechanics
|
||||
bool SummonBoatMechanics::applyAdventureEffects(const SpellCastEnvironment * env, AdventureSpellCastParameters & parameters) const
|
||||
{
|
||||
|
@ -13,37 +13,6 @@
|
||||
#include "CDefaultSpellMechanics.h"
|
||||
|
||||
|
||||
//todo: make configurable
|
||||
class AdventureBonusingMechanics: public DefaultSpellMechanics
|
||||
{
|
||||
public:
|
||||
AdventureBonusingMechanics(CSpell * s, Bonus::BonusType _bonusTypeID): DefaultSpellMechanics(s), bonusTypeID(_bonusTypeID){};
|
||||
protected:
|
||||
bool applyAdventureEffects(const SpellCastEnvironment * env, AdventureSpellCastParameters & parameters) const override;
|
||||
|
||||
virtual int spellLevelToSubtype(const int schoolLevel) const = 0;
|
||||
private:
|
||||
Bonus::BonusType bonusTypeID;
|
||||
};
|
||||
|
||||
//FLY & WATER_WALK
|
||||
class FlyMechanics: public AdventureBonusingMechanics
|
||||
{
|
||||
public:
|
||||
FlyMechanics(CSpell * s, Bonus::BonusType _bonusTypeID): AdventureBonusingMechanics(s, _bonusTypeID){};
|
||||
protected:
|
||||
int spellLevelToSubtype(const int schoolLevel) const override;
|
||||
};
|
||||
|
||||
//VISIONS & DISGUISE
|
||||
class VisionsMechanics: public AdventureBonusingMechanics
|
||||
{
|
||||
public:
|
||||
VisionsMechanics(CSpell * s, Bonus::BonusType _bonusTypeID): AdventureBonusingMechanics(s, _bonusTypeID){};
|
||||
protected:
|
||||
int spellLevelToSubtype(const int schoolLevel) const override;
|
||||
};
|
||||
|
||||
class SummonBoatMechanics: public DefaultSpellMechanics
|
||||
{
|
||||
public:
|
||||
|
@ -191,9 +191,30 @@ bool DefaultSpellMechanics::adventureCast(const SpellCastEnvironment * env, Adve
|
||||
|
||||
bool DefaultSpellMechanics::applyAdventureEffects(const SpellCastEnvironment * env, AdventureSpellCastParameters & parameters) const
|
||||
{
|
||||
//There is no generic algorithm of adventure cast
|
||||
env->complain("Unimplemented adventure spell");
|
||||
return false;
|
||||
if(owner->hasEffects())
|
||||
{
|
||||
const int schoolLevel = parameters.caster->getSpellSchoolLevel(owner);
|
||||
|
||||
std::vector<Bonus> bonuses;
|
||||
|
||||
owner->getEffects(bonuses, schoolLevel);
|
||||
|
||||
for(Bonus b : bonuses)
|
||||
{
|
||||
GiveBonus gb;
|
||||
gb.id = parameters.caster->id.getNum();
|
||||
gb.bonus = b;
|
||||
env->sendAndApply(&gb);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//There is no generic algorithm of adventure cast
|
||||
env->complain("Unimplemented adventure spell");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -358,8 +358,6 @@ const std::string& CSpell::getCastSound() const
|
||||
return castSound;
|
||||
}
|
||||
|
||||
|
||||
|
||||
si32 CSpell::getCost(const int skillLevel) const
|
||||
{
|
||||
return getLevelInfo(skillLevel).cost;
|
||||
|
@ -69,19 +69,16 @@ ISpellMechanics * ISpellMechanics::createMechanics(CSpell * s)
|
||||
case SpellID::DIMENSION_DOOR:
|
||||
return new DimensionDoorMechanics(s);
|
||||
case SpellID::FLY:
|
||||
return new FlyMechanics(s, Bonus::FLYING_MOVEMENT); //temporary
|
||||
case SpellID::WATER_WALK:
|
||||
return new FlyMechanics(s, Bonus::WATER_WALKING); //temporary
|
||||
case SpellID::VISIONS:
|
||||
case SpellID::DISGUISE:
|
||||
return new DefaultSpellMechanics(s); //implemented using bonus system
|
||||
case SpellID::TOWN_PORTAL:
|
||||
return new TownPortalMechanics(s);
|
||||
case SpellID::VIEW_EARTH:
|
||||
return new ViewEarthMechanics(s);
|
||||
case SpellID::VIEW_AIR:
|
||||
return new ViewAirMechanics(s);
|
||||
case SpellID::VISIONS:
|
||||
return new VisionsMechanics(s, Bonus::VISIONS); //temporary
|
||||
case SpellID::DISGUISE:
|
||||
return new VisionsMechanics(s, Bonus::DISGUISED); //temporary
|
||||
default:
|
||||
if(s->isRisingSpell())
|
||||
return new SpecialRisingSpellMechanics(s);
|
||||
|
Loading…
Reference in New Issue
Block a user