last_light/game/rpg/rpg_entity.go

90 lines
1.7 KiB
Go

package rpg
type RPGEntity interface {
BaseStat(stat Stat) int
SetBaseStat(stat Stat, value int)
CollectModifiersForStat(stat Stat) []StatModifier
AddStatModifier(modifier StatModifier)
RemoveStatModifier(id StatModifierId)
CurrentHealth() int
Heal(health int)
Damage(damage int)
}
type BasicRPGEntity struct {
stats map[Stat]int
statModifiers map[Stat][]StatModifier
currentHealth int
}
func CreateBasicRPGEntity(baseStats map[Stat]int, statModifiers map[Stat][]StatModifier) *BasicRPGEntity {
return &BasicRPGEntity{
stats: baseStats,
statModifiers: statModifiers,
currentHealth: 0,
}
}
func (brpg *BasicRPGEntity) BaseStat(stat Stat) int {
return brpg.stats[stat]
}
func (brpg *BasicRPGEntity) SetBaseStat(stat Stat, value int) {
brpg.stats[stat] = value
}
func (brpg *BasicRPGEntity) CollectModifiersForStat(stat Stat) []StatModifier {
modifiers := brpg.statModifiers[stat]
if modifiers == nil {
return []StatModifier{}
}
return modifiers
}
func (brpg *BasicRPGEntity) AddStatModifier(modifier StatModifier) {
existing := brpg.statModifiers[modifier.Stat]
if existing == nil {
existing = make([]StatModifier, 0)
}
existing = append(existing, modifier)
brpg.statModifiers[modifier.Stat] = existing
}
func (brpg *BasicRPGEntity) RemoveStatModifier(id StatModifierId) {
// TODO
}
func (brpg *BasicRPGEntity) CurrentHealth() int {
return brpg.currentHealth
}
func (brpg *BasicRPGEntity) Heal(health int) {
maxHealth := BaseMaxHealth(brpg)
if brpg.currentHealth+health > maxHealth {
brpg.currentHealth = maxHealth
return
}
brpg.currentHealth += health
}
func (brpg *BasicRPGEntity) Damage(damage int) {
if brpg.currentHealth-damage < 0 {
brpg.currentHealth = 0
return
}
brpg.currentHealth -= damage
}