package gamemanager
import "fmt"
// Room contains information about a room and its Exits.
type Room struct {
ID string `yaml:"room_id" json:"room_id" binding:"uuid"`
Name string `yaml:"room_name" json:"room_name"`
Description string `yaml:"room_description,omitempty" json:"room_description"`
Exits []Exit `yaml:"exits,omitempty" json:"exits"`
}
// Exit describes actions applied to GameState as part of leaving a Room.
type Exit struct {
ID string `yaml:"exit_id" json:"exit_id" binding:"uuid"`
Description string `yaml:"exit_description" json:"exit_description"`
Destination string `yaml:"destination_id" json:"destination_id" binding:"uuid"`
SetCondition string `yaml:"set_condition,omitempty" json:"set_condition"`
IfCondition string `yaml:"if_condition,omitempty" json:"if_condition"`
NotCondition string `yaml:"not_condition,omitempty" json:"not_condition"`
UnsetCondition string `yaml:"unset_condition,omitempty" json:"unset_condition"`
}
func (r Room) filterExits(gameState GameState) []Exit {
usableExits := []Exit{}
for _, e := range r.Exits {
if e.IfCondition != "" && !gameState.ConditionMet(e.IfCondition) {
fmt.Printf("Cant use exit %s due to not meeting condition\n", e.ID)
continue
}
if e.NotCondition != "" && gameState.ConditionMet(e.NotCondition) {
fmt.Printf("Can't use exit %s due to meeting condition\n", e.ID)
continue
}
usableExits = append(usableExits, e)
}
return usableExits
}