Files
survive/weapons/holster.go

60 lines
1.1 KiB
Go
Raw Permalink Normal View History

2024-11-21 16:26:25 -05:00
package weapons
import "mover/gamedata"
type Holster struct {
activewp gamedata.WeaponType
guns map[gamedata.WeaponType]Weapon
}
func NewHolster() *Holster {
holster := &Holster{
guns: make(map[gamedata.WeaponType]Weapon),
activewp: gamedata.WeaponTypeGun,
}
holster.AddWeapon(NewGun())
//holster.AddWeapon(NewLaser())
2024-11-21 16:26:25 -05:00
return holster
}
2024-11-21 16:35:36 -05:00
func (h *Holster) SetActiveWeapon(wt gamedata.WeaponType) {
_, ok := h.guns[wt]
if ok {
h.activewp = wt
}
}
2024-11-21 16:26:25 -05:00
func (h *Holster) GetActiveWeapon() Weapon {
return h.guns[h.activewp]
}
func (h *Holster) GetActiveWeaponType() gamedata.WeaponType {
return h.guns[h.activewp].GetWeaponType()
}
func (h *Holster) AddWeapon(w Weapon) {
_, ok := h.guns[w.GetWeaponType()]
if !ok {
h.guns[w.GetWeaponType()] = w
}
}
func (h *Holster) CycleWeapon() {
//no weapons, nothing to do
if len(h.guns) == 0 {
return
}
//keep searching until we find the next weapon that exists
var nextwp gamedata.WeaponType = h.activewp
2024-11-21 16:26:25 -05:00
for ok := false; !ok; {
nextwp = (nextwp + 1) % gamedata.WeaponTypeMax
2024-11-21 16:26:25 -05:00
_, ok = h.guns[nextwp]
if ok {
h.activewp = nextwp
}
}
}