aboutsummaryrefslogtreecommitdiff
path: root/internal/object/object.go
blob: 89f01a4758417852d5cf1dc892955229ab923db9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package object

import "thehouseoficarus/internal/behavior"

type UseInteraction struct {
	Item      string               `yaml:"item_id"`
	Condition *behavior.Condition  `yaml:"condition"`
	Message   string               `yaml:"message"`
	Action    *behavior.NodeAction `yaml:"action"`
}

type ObjectSteal struct {
	Table    string  `yaml:"table"`
	Level    int     `yaml:"level"`
	XP       int     `yaml:"xp"`
	Speed    float64 `yaml:"speed"`
	GuardMob string  `yaml:"guard_mob,omitempty"`
}

type ObjectDef struct {
	ID                string            `yaml:"id"`
	Name              string            `yaml:"name"`
	Aliases           []string          `yaml:"aliases"`
	Color             string            `yaml:"color"`
	Hidden            bool              `yaml:"hidden"`
	InRoomDescription string            `yaml:"inroom_description"`
	RemovalItem       string            `yaml:"removal_item"`
	Description       behavior.DescList `yaml:"description"`
	UseInteractions   []UseInteraction  `yaml:"use_interactions"`
	Steal             *ObjectSteal      `yaml:"steal,omitempty"`

	Gather   *behavior.GatherConfig `yaml:"gather,omitempty"`
	Talk     *behavior.TalkConfig   `yaml:"talk,omitempty"`
	Safespot *SafespotConfig        `yaml:"safespot,omitempty"`
	OnLook   *behavior.NodeAction   `yaml:"on_look,omitempty"`
}

type SafespotConfig struct {
	Tier          int             `yaml:"tier"`
	MaxBlockSize  string          `yaml:"max_block_size"`
	MaxOccupants  int             `yaml:"max_occupants"`
	UnsafeChance  float64         `yaml:"unsafe_chance"`
	DecayTicks    float64         `yaml:"decay_ticks"`
	DecayChance   float64         `yaml:"decay_chance"`
	RespawnOnHide bool            `yaml:"respawn_on_hide"`
	RespawnTicks  float64         `yaml:"respawn_ticks"`
	Levels        []SafespotLevel `yaml:"levels"`
}

type SafespotLevel struct {
	Message        string `yaml:"message"`
	DegradeMessage string `yaml:"degrade_message"`
}

func (d *ObjectDef) IsGatherable() bool { return d.Gather != nil }
func (d *ObjectDef) IsTalkable() bool   { return d.Talk != nil }
func (d *ObjectDef) IsSafespot() bool   { return d.Safespot != nil }
func (d *ObjectDef) IsInteractable() bool {
	return d.Gather != nil || d.Talk != nil || d.Safespot != nil
}

func (d *ObjectDef) BehaviorType() string {
	switch {
	case d.Gather != nil:
		return "gather"
	case d.Talk != nil:
		return "talk"
	case d.Safespot != nil:
		return "safespot"
	}
	return ""
}