Documentation
¶
Index ¶
- Constants
- func RenderCombatTile(screen *ebiten.Image, imageCache *util.ImageCache, ...)
- func RenderCombatUnit(screen *ebiten.Image, use *ebiten.Image, options ebiten.DrawImageOptions, ...)
- type Army
- func (army *Army) AddEnchantment(enchantment data.CombatEnchantment) bool
- func (army *Army) AddUnit(unit CombatUnit)
- func (army *Army) GetPower() int
- func (army *Army) HasEnchantment(enchantment data.CombatEnchantment) bool
- func (army *Army) IsAI() bool
- func (army *Army) LayoutUnits(team Team)
- func (army *Army) RemoveEnchantment(enchamtent data.CombatEnchantment)
- func (army *Army) RemoveUnit(remove *ArmyUnit)
- type ArmyUnit
- func (unit *ArmyUnit) AddEnchantment(enchantment data.UnitEnchantment)
- func (unit *ArmyUnit) ApplyAreaDamage(attackStrength int, damageType units.Damage, wallDefense int) int
- func (unit *ArmyUnit) ApplyDamage(damage int, damageType units.Damage, armorPiercing bool, wallDefense int) int
- func (unit *ArmyUnit) CanCast() bool
- func (unit *ArmyUnit) CanFollowPath(path pathfinding.Path) bool
- func (unit *ArmyUnit) CanTraverseWall() bool
- func (unit *ArmyUnit) CauseFear() int
- func (unit *ArmyUnit) ComputeDefense(damage units.Damage, armorPiercing bool, wallDefense int) int
- func (unit *ArmyUnit) ComputeMeleeDamage(fearFigure int) (int, bool)
- func (unit *ArmyUnit) ComputeRangeDamage(tileDistance int) int
- func (unit *ArmyUnit) Figures() int
- func (unit *ArmyUnit) GetAbilityValue(ability data.AbilityType) float32
- func (unit *ArmyUnit) GetDefense() int
- func (unit *ArmyUnit) GetEnchantments() []data.UnitEnchantment
- func (unit *ArmyUnit) GetMeleeAttackPower() int
- func (unit *ArmyUnit) GetMovementSpeed() int
- func (unit *ArmyUnit) GetPower() int
- func (unit *ArmyUnit) GetRangedAttackPower() int
- func (unit *ArmyUnit) GetRealm() data.MagicType
- func (unit *ArmyUnit) GetResistance() int
- func (unit *ArmyUnit) GetResistances(enchantments ...data.UnitEnchantment) int
- func (unit *ArmyUnit) GetToHitMelee() int
- func (unit *ArmyUnit) GetWeaponBonus() data.WeaponBonus
- func (unit *ArmyUnit) HasAbility(ability data.AbilityType) bool
- func (unit *ArmyUnit) HasEnchantment(enchantment data.UnitEnchantment) bool
- func (unit *ArmyUnit) Heal(amount int)
- func (unit *ArmyUnit) InitializeSpells(allSpells spellbook.Spells, player *playerlib.Player)
- func (unit *ArmyUnit) ResetTurnData()
- func (unit *ArmyUnit) TakeDamage(damage int)
- func (unit *ArmyUnit) ToDefend() int
- type CardinalDirection
- type CombatDrawFunc
- type CombatEndScreen
- type CombatEndScreenResult
- type CombatEndScreenState
- type CombatEvent
- type CombatEventCastEnchantment
- type CombatEventCreateLightningBolt
- type CombatEventMessage
- type CombatEventNextUnit
- type CombatEventSelectTile
- type CombatEventSelectUnit
- type CombatLandscape
- type CombatLogEvent
- type CombatModel
- func (model *CombatModel) AddEnchantment(player *playerlib.Player, enchantment data.CombatEnchantment) bool
- func (model *CombatModel) AddLogEvent(text string)
- func (model *CombatModel) AddProjectile(projectile *Projectile)
- func (model *CombatModel) ApplyImmolationDamage(defender *ArmyUnit, immolationDamage int)
- func (model *CombatModel) ApplyMeleeDamage(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (model *CombatModel) ApplyWallOfFireDamage(defender *ArmyUnit)
- func (model *CombatModel) CanMoveTo(unit *ArmyUnit, x int, y int) bool
- func (model *CombatModel) CheckDispel(spell spellbook.Spell, caster *playerlib.Player) bool
- func (model *CombatModel) ChooseNextUnit(team Team) *ArmyUnit
- func (model *CombatModel) ComputeWallDefense(attacker *ArmyUnit, defender *ArmyUnit) int
- func (model *CombatModel) ContainsWallTower(x int, y int) bool
- func (model *CombatModel) CreateEarthToMud(centerX int, centerY int)
- func (model *CombatModel) DoneTurn()
- func (model *CombatModel) FindEmptyTile() (int, int, error)
- func (model *CombatModel) FindPath(unit *ArmyUnit, x int, y int) (pathfinding.Path, bool)
- func (model *CombatModel) FinishTurn(team Team)
- func (model *CombatModel) GetArmy(unit *ArmyUnit) *Army
- func (model *CombatModel) GetArmyForPlayer(player *playerlib.Player) *Army
- func (model *CombatModel) GetCityGateCoordinates() (int, int)
- func (model *CombatModel) GetObserver() CombatObserver
- func (model *CombatModel) GetOppositeArmyForPlayer(player *playerlib.Player) *Army
- func (model *CombatModel) GetOtherArmy(unit *ArmyUnit) *Army
- func (model *CombatModel) GetUnit(x int, y int) *ArmyUnit
- func (model *CombatModel) Initialize(allSpells spellbook.Spells)
- func (model *CombatModel) InsideAnyWall(x int, y int) bool
- func (model *CombatModel) InsideCityWall(x int, y int) bool
- func (model *CombatModel) InsideTown(x int, y int) bool
- func (model *CombatModel) InsideWallOfDarkness(x int, y int) bool
- func (model *CombatModel) InsideWallOfFire(x int, y int) bool
- func (model *CombatModel) IsAIControlled(unit *ArmyUnit) bool
- func (model *CombatModel) IsCityWallGate(x int, y int) bool
- func (model *CombatModel) IsEnchantmentActive(enchantment data.CombatEnchantment, team Team) bool
- func (model *CombatModel) IsTeamAlive(team Team) bool
- func (model *CombatModel) NextTurn()
- func (model *CombatModel) NextUnit()
- func (model *CombatModel) RemoveUnit(unit *ArmyUnit)
- func (model *CombatModel) UpdateProjectiles(counter uint64) bool
- type CombatObserver
- type CombatObservers
- func (observer *CombatObservers) AddObserver(add CombatObserver)
- func (observer *CombatObservers) CauseFear(attacker *ArmyUnit, defender *ArmyUnit, fear int)
- func (observer *CombatObservers) DeathGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) DeathTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) DestructionAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) DispelEvilTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) DoomGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) FireBreathAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) ImmolationAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) LifeStealTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) LightningBreathAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) MeleeAttack(attacker *ArmyUnit, defender *ArmyUnit, damageRoll int)
- func (observer *CombatObservers) PoisonTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) RemoveObserver(remove CombatObserver)
- func (observer *CombatObservers) StoneGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) StoningTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) ThrowAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
- func (observer *CombatObservers) UnitKilled(unit *ArmyUnit)
- func (observer *CombatObservers) WallOfFire(defender *ArmyUnit, damage int)
- type CombatScreen
- func (combat *CombatScreen) CastEnchantment(player *playerlib.Player, enchantment data.CombatEnchantment, ...)
- func (combat *CombatScreen) CreateAirElemental(player *playerlib.Player, x int, y int)
- func (combat *CombatScreen) CreateBanishProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateCracksCallProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateDeathSpellProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateDemon(player *playerlib.Player, x int, y int)
- func (combat *CombatScreen) CreateDisintegrateProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateDispelEvilProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateDispelMagicProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateDisruptProjectile(x int, y int)
- func (combat *CombatScreen) CreateDoomBoltProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateEarthElemental(player *playerlib.Player, x int, y int)
- func (combat *CombatScreen) CreateFireBoltProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateFireElemental(player *playerlib.Player, x int, y int)
- func (combat *CombatScreen) CreateFireballProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateFlameStrikeProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateHealingProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateHolyWordProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateIceBoltProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateLifeDrainProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateLightningBoltProjectile(target *ArmyUnit, strength int)
- func (combat *CombatScreen) CreateMagicVortex(x int, y int)
- func (combat *CombatScreen) CreatePhantomBeast(player *playerlib.Player, x int, y int)
- func (combat *CombatScreen) CreatePhantomWarriors(player *playerlib.Player, x int, y int)
- func (combat *CombatScreen) CreatePsionicBlastProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateRecallHeroProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateResistElementsProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateStarFiresProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateSummoningCircle(x int, y int)
- func (combat *CombatScreen) CreateWarpLightningProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateWarpWoodProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateWebProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateWordOfDeathProjectile(target *ArmyUnit)
- func (combat *CombatScreen) CreateWordOfRecallProjectile(target *ArmyUnit)
- func (combat *CombatScreen) DoAllUnitsSpell(player *playerlib.Player, spell spellbook.Spell, targetKind Targeting, ...)
- func (combat *CombatScreen) DoSummoningSpell(player *playerlib.Player, spell spellbook.Spell, onTarget func(int, int))
- func (combat *CombatScreen) DoTargetTileSpell(player *playerlib.Player, spell spellbook.Spell, onTarget func(int, int))
- func (combat *CombatScreen) DoTargetUnitSpell(player *playerlib.Player, spell spellbook.Spell, targetKind Targeting, ...)
- func (combat *CombatScreen) Draw(screen *ebiten.Image)
- func (combat *CombatScreen) DrawHealthBar(screen *ebiten.Image, x int, y int, unit *ArmyUnit)
- func (combat *CombatScreen) DrawHighlightedTile(screen *ebiten.Image, x int, y int, matrix *ebiten.GeoM, minColor color.RGBA, ...)
- func (combat *CombatScreen) DrawWall(screen *ebiten.Image, x int, y int, ...)
- func (combat *CombatScreen) GetCameraMatrix() ebiten.GeoM
- func (combat *CombatScreen) InvokeSpell(player *playerlib.Player, spell spellbook.Spell, castedCallback func())
- func (combat *CombatScreen) MakeUI(player *playerlib.Player) *uilib.UI
- func (combat *CombatScreen) NormalDraw(screen *ebiten.Image)
- func (combat *CombatScreen) ProcessEvents(yield coroutine.YieldFunc)
- func (combat *CombatScreen) ScreenToTile(x float64, y float64) (float64, float64)
- func (combat *CombatScreen) ShowUnitInfo(screen *ebiten.Image, unit *ArmyUnit)
- func (combat *CombatScreen) TileIsEmpty(x int, y int) bool
- func (combat *CombatScreen) Update(yield coroutine.YieldFunc) CombatState
- func (combat *CombatScreen) UpdateAnimations()
- func (combat *CombatScreen) UpdateMouseState()
- type CombatState
- type CombatUnit
- type DarknessSide
- type FireSide
- type MouseState
- type OtherUnit
- type Projectile
- type ProjectileEffect
- type Targeting
- type Team
- type Tile
- type TileAlignment
- type TileDraw
- type TileTop
- type UnitPosition
- type WallKind
- type ZoneType
Constants ¶
const (
LightningBoltSound int = 19
)
const TownCenterX = 11
const TownCenterY = 10
Variables ¶
This section is empty.
Functions ¶
func RenderCombatTile ¶
func RenderCombatTile(screen *ebiten.Image, imageCache *util.ImageCache, options ebiten.DrawImageOptions)
func RenderCombatUnit ¶
func RenderCombatUnit(screen *ebiten.Image, use *ebiten.Image, options ebiten.DrawImageOptions, count int, enchantment data.UnitEnchantment, timeCounter uint64, imageCache *util.ImageCache)
Types ¶
type Army ¶
type Army struct { Player *playerlib.Player ManaPool int // when counter magic is cast, this field tracks how much 'counter magic' strength is available to dispel CounterMagic int Units []*ArmyUnit Auto bool Fled bool Enchantments []data.CombatEnchantment }
func (*Army) AddEnchantment ¶
func (army *Army) AddEnchantment(enchantment data.CombatEnchantment) bool
func (*Army) AddUnit ¶
func (army *Army) AddUnit(unit CombatUnit)
must call LayoutUnits() some time after invoking AddUnit() to ensure * the units are laid out correctly
func (*Army) HasEnchantment ¶
func (army *Army) HasEnchantment(enchantment data.CombatEnchantment) bool
func (*Army) LayoutUnits ¶
func (*Army) RemoveEnchantment ¶
func (army *Army) RemoveEnchantment(enchamtent data.CombatEnchantment)
func (*Army) RemoveUnit ¶
type ArmyUnit ¶
type ArmyUnit struct { Unit CombatUnit Facing units.Facing Moving bool X int Y int // Health int MovesLeft fraction.Fraction Spells spellbook.Spells SpellCharges map[spellbook.Spell]int CastingSkill float32 Casted bool Model *CombatModel Team Team RangedAttacks int Attacking bool Defending bool MovementTick uint64 MoveX float64 MoveY float64 CurrentPath pathfinding.Path LastTurn int // enchantments applied to the unit during combat, usually by a spell Enchantments []data.UnitEnchantment // ugly to need this, but this caches paths computed for the unit Paths map[image.Point]pathfinding.Path }
func (*ArmyUnit) AddEnchantment ¶
func (unit *ArmyUnit) AddEnchantment(enchantment data.UnitEnchantment)
func (*ArmyUnit) ApplyAreaDamage ¶
func (unit *ArmyUnit) ApplyAreaDamage(attackStrength int, damageType units.Damage, wallDefense int) int
apply damage to each individual figure such that each figure gets to individually block damage. this could potentially allow a damage of 5 to destroy a unit with 4 figures of 1HP each
func (*ArmyUnit) ApplyDamage ¶
func (unit *ArmyUnit) ApplyDamage(damage int, damageType units.Damage, armorPiercing bool, wallDefense int) int
apply damage to lead figure, and if it dies then keep applying remaining damage to the next figure
func (*ArmyUnit) CanFollowPath ¶
func (unit *ArmyUnit) CanFollowPath(path pathfinding.Path) bool
func (*ArmyUnit) CanTraverseWall ¶
true if this unit can move through a tile with a wall tile
func (*ArmyUnit) ComputeDefense ¶
func (*ArmyUnit) ComputeMeleeDamage ¶
func (*ArmyUnit) ComputeRangeDamage ¶
given the distance to the target in tiles, return the amount of range damage done
func (*ArmyUnit) GetAbilityValue ¶
func (unit *ArmyUnit) GetAbilityValue(ability data.AbilityType) float32
func (*ArmyUnit) GetDefense ¶
func (*ArmyUnit) GetEnchantments ¶
func (unit *ArmyUnit) GetEnchantments() []data.UnitEnchantment
func (*ArmyUnit) GetMeleeAttackPower ¶
func (*ArmyUnit) GetMovementSpeed ¶
func (*ArmyUnit) GetRangedAttackPower ¶
func (*ArmyUnit) GetResistance ¶
func (*ArmyUnit) GetResistances ¶
func (unit *ArmyUnit) GetResistances(enchantments ...data.UnitEnchantment) int
func (*ArmyUnit) GetToHitMelee ¶
func (*ArmyUnit) GetWeaponBonus ¶
func (unit *ArmyUnit) GetWeaponBonus() data.WeaponBonus
func (*ArmyUnit) HasAbility ¶
func (unit *ArmyUnit) HasAbility(ability data.AbilityType) bool
func (*ArmyUnit) HasEnchantment ¶
func (unit *ArmyUnit) HasEnchantment(enchantment data.UnitEnchantment) bool
func (*ArmyUnit) InitializeSpells ¶
func (*ArmyUnit) ResetTurnData ¶
func (unit *ArmyUnit) ResetTurnData()
func (*ArmyUnit) TakeDamage ¶
type CardinalDirection ¶
type CardinalDirection int
const ( DirectionNorth CardinalDirection = iota DirectionEast DirectionSouth DirectionWest )
type CombatDrawFunc ¶
type CombatDrawFunc func(*ebiten.Image)
type CombatEndScreen ¶
type CombatEndScreen struct { CombatScreen *CombatScreen Result CombatEndScreenResult UnitsLost int Fame int // when fighting in a city, citizens and buildings may be lost PopulationLost int BuildingsLost int Cache *lbx.LbxCache ImageCache util.ImageCache UI *uilib.UI State CombatEndScreenState }
func MakeCombatEndScreen ¶
func MakeCombatEndScreen(cache *lbx.LbxCache, combat *CombatScreen, result CombatEndScreenResult, unitsLost int, fame int, populationLost int, buildingsLost int) *CombatEndScreen
func (*CombatEndScreen) Draw ¶
func (end *CombatEndScreen) Draw(screen *ebiten.Image)
func (*CombatEndScreen) MakeUI ¶
func (end *CombatEndScreen) MakeUI() *uilib.UI
func (*CombatEndScreen) Update ¶
func (end *CombatEndScreen) Update() CombatEndScreenState
type CombatEndScreenResult ¶
type CombatEndScreenResult int
const ( CombatEndScreenResultWin CombatEndScreenResult = iota CombatEndScreenResultLoose CombatEndScreenResultRetreat )
type CombatEndScreenState ¶
type CombatEndScreenState int
const ( CombatEndScreenRunning CombatEndScreenState = iota CombatEndScreenDone )
type CombatEvent ¶
type CombatEvent interface { }
type CombatEventCastEnchantment ¶
type CombatEventCastEnchantment struct { Enchantment data.CombatEnchantment Caster *playerlib.Player }
type CombatEventCreateLightningBolt ¶
FIXME: kind of ugly to need a specific event like this for one projectile type
type CombatEventMessage ¶
type CombatEventMessage struct {
Message string
}
type CombatEventNextUnit ¶
type CombatEventNextUnit struct { }
type CombatEventSelectTile ¶
type CombatEventSelectUnit ¶
type CombatLandscape ¶
type CombatLandscape int
const ( CombatLandscapeGrass CombatLandscape = iota CombatLandscapeWater CombatLandscapeDesert CombatLandscapeMountain CombatLandscapeTundra )
type CombatModel ¶
type CombatModel struct { SelectedUnit *ArmyUnit DefendingArmy *Army AttackingArmy *Army Tiles [][]Tile // when the user hovers over a unit, that unit should be shown in a little info box at the upper right HighlightedUnit *ArmyUnit OtherUnits []*OtherUnit Projectiles []*Projectile Events chan CombatEvent TurnAttacker int TurnDefender int // track how many units were killed on each side, so experience // can be given out after combat ends DefeatedDefenders int DefeatedAttackers int // track how many units were killed when fleeing, so the number // can be reported after combands ends DiedWhileFleeing int Turn Team CurrentTurn int Log []CombatLogEvent Observer CombatObservers // cached location of city wall gate CityWallGate image.Point // incremented for each unit that is inside the town area (when fighting in a town) CollateralDamage int }
func MakeCombatModel ¶
func MakeCombatModel(cache *lbx.LbxCache, defendingArmy *Army, attackingArmy *Army, landscape CombatLandscape, plane data.Plane, zone ZoneType, events chan CombatEvent) *CombatModel
func (*CombatModel) AddEnchantment ¶
func (model *CombatModel) AddEnchantment(player *playerlib.Player, enchantment data.CombatEnchantment) bool
func (*CombatModel) AddLogEvent ¶
func (model *CombatModel) AddLogEvent(text string)
func (*CombatModel) AddProjectile ¶
func (model *CombatModel) AddProjectile(projectile *Projectile)
func (*CombatModel) ApplyImmolationDamage ¶
func (model *CombatModel) ApplyImmolationDamage(defender *ArmyUnit, immolationDamage int)
func (*CombatModel) ApplyMeleeDamage ¶
func (model *CombatModel) ApplyMeleeDamage(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatModel) ApplyWallOfFireDamage ¶
func (model *CombatModel) ApplyWallOfFireDamage(defender *ArmyUnit)
func (*CombatModel) CanMoveTo ¶
func (model *CombatModel) CanMoveTo(unit *ArmyUnit, x int, y int) bool
func (*CombatModel) CheckDispel ¶
returns true if the spell should be dispelled (due to counter magic, magic nodes, etc)
func (*CombatModel) ChooseNextUnit ¶
func (model *CombatModel) ChooseNextUnit(team Team) *ArmyUnit
choose a unit from the given team such that * the unit's LastTurn is less than the current turn
func (*CombatModel) ComputeWallDefense ¶
func (model *CombatModel) ComputeWallDefense(attacker *ArmyUnit, defender *ArmyUnit) int
if defender is in city wall but attacker is outside, then defense is
1 if defender is not adjacent a wall 3 if defender is adjacent to a wall
func (*CombatModel) ContainsWallTower ¶
func (model *CombatModel) ContainsWallTower(x int, y int) bool
a wall tower is a wall with two sides
func (*CombatModel) CreateEarthToMud ¶
func (model *CombatModel) CreateEarthToMud(centerX int, centerY int)
makes a 5x5 square of tiles have mud on them
func (*CombatModel) DoneTurn ¶
func (model *CombatModel) DoneTurn()
func (*CombatModel) FindEmptyTile ¶
func (model *CombatModel) FindEmptyTile() (int, int, error)
func (*CombatModel) FindPath ¶
func (model *CombatModel) FindPath(unit *ArmyUnit, x int, y int) (pathfinding.Path, bool)
return a valid path that the given unit can take to reach tile position x, y * this caches the path such that the next call to FindPath() will return the same path without computing it
func (*CombatModel) FinishTurn ¶
func (model *CombatModel) FinishTurn(team Team)
one side finished its turn
func (*CombatModel) GetArmy ¶
func (model *CombatModel) GetArmy(unit *ArmyUnit) *Army
func (*CombatModel) GetArmyForPlayer ¶
func (model *CombatModel) GetArmyForPlayer(player *playerlib.Player) *Army
func (*CombatModel) GetCityGateCoordinates ¶
func (model *CombatModel) GetCityGateCoordinates() (int, int)
func (*CombatModel) GetObserver ¶
func (model *CombatModel) GetObserver() CombatObserver
func (*CombatModel) GetOppositeArmyForPlayer ¶
func (model *CombatModel) GetOppositeArmyForPlayer(player *playerlib.Player) *Army
func (*CombatModel) GetOtherArmy ¶
func (model *CombatModel) GetOtherArmy(unit *ArmyUnit) *Army
func (*CombatModel) Initialize ¶
func (model *CombatModel) Initialize(allSpells spellbook.Spells)
func (*CombatModel) InsideAnyWall ¶
func (model *CombatModel) InsideAnyWall(x int, y int) bool
func (*CombatModel) InsideCityWall ¶
func (model *CombatModel) InsideCityWall(x int, y int) bool
func (*CombatModel) InsideTown ¶
func (model *CombatModel) InsideTown(x int, y int) bool
func (*CombatModel) InsideWallOfDarkness ¶
func (model *CombatModel) InsideWallOfDarkness(x int, y int) bool
func (*CombatModel) InsideWallOfFire ¶
func (model *CombatModel) InsideWallOfFire(x int, y int) bool
return true if x,y is within the bounds of the enclosed wall of fire space
func (*CombatModel) IsAIControlled ¶
func (model *CombatModel) IsAIControlled(unit *ArmyUnit) bool
func (*CombatModel) IsCityWallGate ¶
func (model *CombatModel) IsCityWallGate(x int, y int) bool
func (*CombatModel) IsEnchantmentActive ¶
func (model *CombatModel) IsEnchantmentActive(enchantment data.CombatEnchantment, team Team) bool
func (*CombatModel) IsTeamAlive ¶
func (model *CombatModel) IsTeamAlive(team Team) bool
func (*CombatModel) NextTurn ¶
func (model *CombatModel) NextTurn()
func (*CombatModel) NextUnit ¶
func (model *CombatModel) NextUnit()
func (*CombatModel) RemoveUnit ¶
func (model *CombatModel) RemoveUnit(unit *ArmyUnit)
func (*CombatModel) UpdateProjectiles ¶
func (model *CombatModel) UpdateProjectiles(counter uint64) bool
type CombatObserver ¶
type CombatObserver interface { ThrowAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) PoisonTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) LifeStealTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) StoningTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) DispelEvilTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) DeathTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) DestructionAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) StoneGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) DeathGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) DoomGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) FireBreathAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) LightningBreathAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) ImmolationAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int) MeleeAttack(attacker *ArmyUnit, defender *ArmyUnit, damageRoll int) CauseFear(attacker *ArmyUnit, defender *ArmyUnit, fear int) WallOfFire(defender *ArmyUnit, damage int) UnitKilled(unit *ArmyUnit) }
type CombatObservers ¶
type CombatObservers struct {
Observers []CombatObserver
}
func (*CombatObservers) AddObserver ¶
func (observer *CombatObservers) AddObserver(add CombatObserver)
func (*CombatObservers) CauseFear ¶
func (observer *CombatObservers) CauseFear(attacker *ArmyUnit, defender *ArmyUnit, fear int)
func (*CombatObservers) DeathGazeAttack ¶
func (observer *CombatObservers) DeathGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) DeathTouchAttack ¶
func (observer *CombatObservers) DeathTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) DestructionAttack ¶
func (observer *CombatObservers) DestructionAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) DispelEvilTouchAttack ¶
func (observer *CombatObservers) DispelEvilTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) DoomGazeAttack ¶
func (observer *CombatObservers) DoomGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) FireBreathAttack ¶
func (observer *CombatObservers) FireBreathAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) ImmolationAttack ¶
func (observer *CombatObservers) ImmolationAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) LifeStealTouchAttack ¶
func (observer *CombatObservers) LifeStealTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) LightningBreathAttack ¶
func (observer *CombatObservers) LightningBreathAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) MeleeAttack ¶
func (observer *CombatObservers) MeleeAttack(attacker *ArmyUnit, defender *ArmyUnit, damageRoll int)
func (*CombatObservers) PoisonTouchAttack ¶
func (observer *CombatObservers) PoisonTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) RemoveObserver ¶
func (observer *CombatObservers) RemoveObserver(remove CombatObserver)
func (*CombatObservers) StoneGazeAttack ¶
func (observer *CombatObservers) StoneGazeAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) StoningTouchAttack ¶
func (observer *CombatObservers) StoningTouchAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) ThrowAttack ¶
func (observer *CombatObservers) ThrowAttack(attacker *ArmyUnit, defender *ArmyUnit, damage int)
func (*CombatObservers) UnitKilled ¶
func (observer *CombatObservers) UnitKilled(unit *ArmyUnit)
func (*CombatObservers) WallOfFire ¶
func (observer *CombatObservers) WallOfFire(defender *ArmyUnit, damage int)
type CombatScreen ¶
type CombatScreen struct { Events chan CombatEvent Drawer CombatDrawFunc ImageCache util.ImageCache Cache *lbx.LbxCache Mouse *mouse.MouseData AttackingWizardFont *font.Font DefendingWizardFont *font.Font EnchantmentFont *font.Font WhitePixel *ebiten.Image UI *uilib.UI DebugFont *font.Font HudFont *font.Font InfoFont *font.Font WhiteFont *font.Font DrawRoad bool // order to draw tiles in such that they are drawn from the top of the screen to the bottom (painter's order) TopDownOrder []image.Point Coordinates ebiten.GeoM // ScreenToTile ebiten.GeoM MouseState MouseState CameraScale float64 Counter uint64 MouseTileX int MouseTileY int // if true then the player should select a tile to cast a spell on /* SelectTile func(int, int) */ DoSelectTile bool // if true then the player should select a unit to cast a spell on DoSelectUnit bool Model *CombatModel }
func MakeCombatScreen ¶
func MakeCombatScreen(cache *lbx.LbxCache, defendingArmy *Army, attackingArmy *Army, player *playerlib.Player, landscape CombatLandscape, plane data.Plane, zone ZoneType) *CombatScreen
player is always the human player
func (*CombatScreen) CastEnchantment ¶
func (combat *CombatScreen) CastEnchantment(player *playerlib.Player, enchantment data.CombatEnchantment, castedCallback func())
func (*CombatScreen) CreateAirElemental ¶
func (combat *CombatScreen) CreateAirElemental(player *playerlib.Player, x int, y int)
func (*CombatScreen) CreateBanishProjectile ¶
func (combat *CombatScreen) CreateBanishProjectile(target *ArmyUnit)
func (*CombatScreen) CreateCracksCallProjectile ¶
func (combat *CombatScreen) CreateCracksCallProjectile(target *ArmyUnit)
func (*CombatScreen) CreateDeathSpellProjectile ¶
func (combat *CombatScreen) CreateDeathSpellProjectile(target *ArmyUnit)
func (*CombatScreen) CreateDemon ¶
func (combat *CombatScreen) CreateDemon(player *playerlib.Player, x int, y int)
func (*CombatScreen) CreateDisintegrateProjectile ¶
func (combat *CombatScreen) CreateDisintegrateProjectile(target *ArmyUnit)
func (*CombatScreen) CreateDispelEvilProjectile ¶
func (combat *CombatScreen) CreateDispelEvilProjectile(target *ArmyUnit)
func (*CombatScreen) CreateDispelMagicProjectile ¶
func (combat *CombatScreen) CreateDispelMagicProjectile(target *ArmyUnit)
func (*CombatScreen) CreateDisruptProjectile ¶
func (combat *CombatScreen) CreateDisruptProjectile(x int, y int)
func (*CombatScreen) CreateDoomBoltProjectile ¶
func (combat *CombatScreen) CreateDoomBoltProjectile(target *ArmyUnit)
func (*CombatScreen) CreateEarthElemental ¶
func (combat *CombatScreen) CreateEarthElemental(player *playerlib.Player, x int, y int)
func (*CombatScreen) CreateFireBoltProjectile ¶
func (combat *CombatScreen) CreateFireBoltProjectile(target *ArmyUnit)
func (*CombatScreen) CreateFireElemental ¶
func (combat *CombatScreen) CreateFireElemental(player *playerlib.Player, x int, y int)
func (*CombatScreen) CreateFireballProjectile ¶
func (combat *CombatScreen) CreateFireballProjectile(target *ArmyUnit)
func (*CombatScreen) CreateFlameStrikeProjectile ¶
func (combat *CombatScreen) CreateFlameStrikeProjectile(target *ArmyUnit)
func (*CombatScreen) CreateHealingProjectile ¶
func (combat *CombatScreen) CreateHealingProjectile(target *ArmyUnit)
func (*CombatScreen) CreateHolyWordProjectile ¶
func (combat *CombatScreen) CreateHolyWordProjectile(target *ArmyUnit)
func (*CombatScreen) CreateIceBoltProjectile ¶
func (combat *CombatScreen) CreateIceBoltProjectile(target *ArmyUnit)
func (*CombatScreen) CreateLifeDrainProjectile ¶
func (combat *CombatScreen) CreateLifeDrainProjectile(target *ArmyUnit)
func (*CombatScreen) CreateLightningBoltProjectile ¶
func (combat *CombatScreen) CreateLightningBoltProjectile(target *ArmyUnit, strength int)
func (*CombatScreen) CreateMagicVortex ¶
func (combat *CombatScreen) CreateMagicVortex(x int, y int)
func (*CombatScreen) CreatePhantomBeast ¶
func (combat *CombatScreen) CreatePhantomBeast(player *playerlib.Player, x int, y int)
func (*CombatScreen) CreatePhantomWarriors ¶
func (combat *CombatScreen) CreatePhantomWarriors(player *playerlib.Player, x int, y int)
func (*CombatScreen) CreatePsionicBlastProjectile ¶
func (combat *CombatScreen) CreatePsionicBlastProjectile(target *ArmyUnit)
func (*CombatScreen) CreateRecallHeroProjectile ¶
func (combat *CombatScreen) CreateRecallHeroProjectile(target *ArmyUnit)
func (*CombatScreen) CreateResistElementsProjectile ¶
func (combat *CombatScreen) CreateResistElementsProjectile(target *ArmyUnit)
func (*CombatScreen) CreateStarFiresProjectile ¶
func (combat *CombatScreen) CreateStarFiresProjectile(target *ArmyUnit)
func (*CombatScreen) CreateSummoningCircle ¶
func (combat *CombatScreen) CreateSummoningCircle(x int, y int)
func (*CombatScreen) CreateWarpLightningProjectile ¶
func (combat *CombatScreen) CreateWarpLightningProjectile(target *ArmyUnit)
func (*CombatScreen) CreateWarpWoodProjectile ¶
func (combat *CombatScreen) CreateWarpWoodProjectile(target *ArmyUnit)
func (*CombatScreen) CreateWebProjectile ¶
func (combat *CombatScreen) CreateWebProjectile(target *ArmyUnit)
func (*CombatScreen) CreateWordOfDeathProjectile ¶
func (combat *CombatScreen) CreateWordOfDeathProjectile(target *ArmyUnit)
func (*CombatScreen) CreateWordOfRecallProjectile ¶
func (combat *CombatScreen) CreateWordOfRecallProjectile(target *ArmyUnit)
func (*CombatScreen) DoAllUnitsSpell ¶
func (combat *CombatScreen) DoAllUnitsSpell(player *playerlib.Player, spell spellbook.Spell, targetKind Targeting, onTarget func(*ArmyUnit), canTarget func(*ArmyUnit) bool)
create projectiles on all units immediately, no targeting required
func (*CombatScreen) DoSummoningSpell ¶
func (*CombatScreen) DoTargetTileSpell ¶
func (combat *CombatScreen) DoTargetTileSpell(player *playerlib.Player, spell spellbook.Spell, onTarget func(int, int))
FIXME: take in a canTarget function to check if the tile is legal
func (*CombatScreen) DoTargetUnitSpell ¶
func (combat *CombatScreen) DoTargetUnitSpell(player *playerlib.Player, spell spellbook.Spell, targetKind Targeting, onTarget func(*ArmyUnit), canTarget func(*ArmyUnit) bool)
let the user select a target, then cast the spell on that target
func (*CombatScreen) Draw ¶
func (combat *CombatScreen) Draw(screen *ebiten.Image)
func (*CombatScreen) DrawHealthBar ¶
func (combat *CombatScreen) DrawHealthBar(screen *ebiten.Image, x int, y int, unit *ArmyUnit)
draw a horizontal bar that represents the health of the unit mostly green if healthy (>66% health) yellow if between 33% to 66% health otherwise red
func (*CombatScreen) DrawHighlightedTile ¶
func (*CombatScreen) GetCameraMatrix ¶
func (combat *CombatScreen) GetCameraMatrix() ebiten.GeoM
func (*CombatScreen) InvokeSpell ¶
func (combat *CombatScreen) InvokeSpell(player *playerlib.Player, spell spellbook.Spell, castedCallback func())
func (*CombatScreen) MakeUI ¶
func (combat *CombatScreen) MakeUI(player *playerlib.Player) *uilib.UI
func (*CombatScreen) NormalDraw ¶
func (combat *CombatScreen) NormalDraw(screen *ebiten.Image)
func (*CombatScreen) ProcessEvents ¶
func (combat *CombatScreen) ProcessEvents(yield coroutine.YieldFunc)
func (*CombatScreen) ScreenToTile ¶
func (combat *CombatScreen) ScreenToTile(x float64, y float64) (float64, float64)
func (*CombatScreen) ShowUnitInfo ¶
func (combat *CombatScreen) ShowUnitInfo(screen *ebiten.Image, unit *ArmyUnit)
func (*CombatScreen) TileIsEmpty ¶
func (combat *CombatScreen) TileIsEmpty(x int, y int) bool
func (*CombatScreen) Update ¶
func (combat *CombatScreen) Update(yield coroutine.YieldFunc) CombatState
func (*CombatScreen) UpdateAnimations ¶
func (combat *CombatScreen) UpdateAnimations()
func (*CombatScreen) UpdateMouseState ¶
func (combat *CombatScreen) UpdateMouseState()
type CombatState ¶
type CombatState int
const ( CombatStateRunning CombatState = iota CombatStateAttackerWin CombatStateDefenderWin CombatStateAttackerFlee CombatStateDefenderFlee CombatStateNoCombat )
func DoStrategicCombat ¶
func DoStrategicCombat(attackingArmy *Army, defendingArmy *Army) (CombatState, int, int)
predicts the outcome of a battle just by comparing the relative power level of each army
func (CombatState) String ¶
func (state CombatState) String() string
type CombatUnit ¶
type CombatUnit interface { HasAbility(data.AbilityType) bool HasItemAbility(data.ItemAbility) bool GetAbilityValue(data.AbilityType) float32 GetDefense() int GetResistance() int AdjustHealth(int) GetAbilities() []data.Ability GetBanner() data.BannerType GetRangedAttackDamageType() units.Damage GetRangedAttackPower() int GetMeleeAttackPower() int GetMaxHealth() int GetHitPoints() int GetWeaponBonus() data.WeaponBonus GetEnchantments() []data.UnitEnchantment HasEnchantment(data.UnitEnchantment) bool GetCount() int GetHealth() int GetToHitMelee() int GetKnownSpells() []string GetRangedAttacks() int GetCombatLbxFile() string GetCombatIndex(units.Facing) int GetCombatRangeIndex(units.Facing) int GetMovementSound() units.MovementSound GetRangeAttackSound() units.RangeAttackSound GetAttackSound() units.AttackSound GetName() string GetMovementSpeed() int CanTouchAttack(units.Damage) bool IsFlying() bool IsHero() bool IsUndead() bool GetRace() data.Race GetRealm() data.MagicType GetSpellChargeSpells() map[spellbook.Spell]int }
type DarknessSide ¶
type DarknessSide int
const ( DarknessSideSouth DarknessSide = iota DarknessSideEast DarknessSideNorth DarknessSideWest )
type MouseState ¶
type MouseState int
const ( CombatClickHud MouseState = iota CombatMoveOk CombatMeleeAttackOk CombatRangeAttackOk CombatNotOk CombatCast )
type OtherUnit ¶
represents a unit that is not part of the army, for things like magic vortex, for things like magic vortex
type Projectile ¶
type ProjectileEffect ¶
type ProjectileEffect func(*ArmyUnit)
type Tile ¶
type Tile struct { // a unit standing on this tile, if any Unit *ArmyUnit Lbx string // index of grass/floor Index int // tree/rock on top, or -1 if nothing ExtraObject TileTop Mud bool // whether to show fire on this tile Fire *set.Set[FireSide] // whether to show wall of darkness on this tile Darkness *set.Set[DarknessSide] Wall *set.Set[WallKind] // true if this tile is inside the wall of fire/darkness InsideTown bool InsideFire bool InsideDarkness bool InsideWall bool }
type TileAlignment ¶
type TileAlignment int
const ( TileAlignMiddle TileAlignment = iota TileAlignBottom )
type TileDraw ¶
type TileDraw func(*ebiten.Image, *util.ImageCache, *ebiten.DrawImageOptions, uint64)
type UnitPosition ¶
type UnitPosition int
const ( UnitPositionMiddle UnitPosition = iota UnitPositionUnder )