2024-05-21 23:08:51 +03:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2024-05-30 23:39:54 +03:00
|
|
|
func CreateBasicRPGEntity(baseStats map[Stat]int, statModifiers map[Stat][]StatModifier) *BasicRPGEntity {
|
2024-05-21 23:08:51 +03:00
|
|
|
return &BasicRPGEntity{
|
2024-05-30 23:39:54 +03:00
|
|
|
stats: baseStats,
|
|
|
|
statModifiers: statModifiers,
|
2024-05-21 23:08:51 +03:00
|
|
|
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) {
|
2024-05-30 23:39:54 +03:00
|
|
|
// TODO
|
2024-05-21 23:08:51 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|