Added weapon system. Animated laser.
This commit is contained in:
26
weapons/gun.go
Normal file
26
weapons/gun.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package weapons
|
||||
|
||||
import "mover/gamedata"
|
||||
|
||||
type Gun struct {
|
||||
active bool
|
||||
}
|
||||
|
||||
func NewGun() *Gun {
|
||||
g := &Gun{
|
||||
active: false,
|
||||
}
|
||||
return g
|
||||
}
|
||||
|
||||
func (g *Gun) IsActive() bool {
|
||||
return g.active
|
||||
}
|
||||
|
||||
func (g *Gun) SetActivity(active bool) {
|
||||
g.active = active
|
||||
}
|
||||
|
||||
func (g *Gun) GetWeaponType() gamedata.WeaponType {
|
||||
return gamedata.WeaponTypeGun
|
||||
}
|
||||
51
weapons/holster.go
Normal file
51
weapons/holster.go
Normal file
@@ -0,0 +1,51 @@
|
||||
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())
|
||||
return holster
|
||||
}
|
||||
|
||||
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
|
||||
for ok := false; !ok; {
|
||||
nextwp := (h.activewp + 1) % gamedata.WeaponTypeMax
|
||||
_, ok = h.guns[nextwp]
|
||||
if ok {
|
||||
h.activewp = nextwp
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
26
weapons/laser.go
Normal file
26
weapons/laser.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package weapons
|
||||
|
||||
import "mover/gamedata"
|
||||
|
||||
type Laser struct {
|
||||
active bool
|
||||
}
|
||||
|
||||
func NewLaser() *Laser {
|
||||
l := &Laser{
|
||||
active: false,
|
||||
}
|
||||
return l
|
||||
}
|
||||
|
||||
func (g *Laser) IsActive() bool {
|
||||
return g.active
|
||||
}
|
||||
|
||||
func (g *Laser) SetActivity(active bool) {
|
||||
g.active = active
|
||||
}
|
||||
|
||||
func (g *Laser) GetWeaponType() gamedata.WeaponType {
|
||||
return gamedata.WeaponTypeLaser
|
||||
}
|
||||
9
weapons/weapon.go
Normal file
9
weapons/weapon.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package weapons
|
||||
|
||||
import "mover/gamedata"
|
||||
|
||||
type Weapon interface {
|
||||
IsActive() bool
|
||||
SetActivity(bool)
|
||||
GetWeaponType() gamedata.WeaponType
|
||||
}
|
||||
Reference in New Issue
Block a user