clean up inventory, add pickup and destroy
This commit is contained in:
parent
b49afd9ffb
commit
afc589380b
@ -4,7 +4,7 @@ name = "teaConverter"
|
||||
displayName = "Tea Pulper"
|
||||
source = "tea"
|
||||
output = "brick"
|
||||
rate = 5
|
||||
rate = 4
|
||||
icon = "m"
|
||||
[[converter.costs]]
|
||||
name = "tea"
|
||||
@ -18,3 +18,6 @@ source = ""
|
||||
output = "tea"
|
||||
rate = 0
|
||||
icon = "w"
|
||||
[[converter.costs]]
|
||||
name = "brick"
|
||||
value = 3
|
||||
|
@ -110,6 +110,10 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
}
|
||||
}
|
||||
return newMenuModel(res, placeMenu), nil
|
||||
case ",":
|
||||
m.s.Input("pickup")
|
||||
case "x":
|
||||
m.s.Input("destroy")
|
||||
case "c":
|
||||
var res []sim.ItemEntry
|
||||
for k := range m.s.Player.Craftables {
|
||||
|
@ -48,10 +48,10 @@ func newConverter(k itemType, o *Player) *Converter {
|
||||
//Tick one iteration
|
||||
func (c *Converter) Tick() {
|
||||
if c.source == 0 {
|
||||
c.owner.Resources[c.output] = c.owner.Resources[c.output] + 1
|
||||
c.owner.AddItem(c.output, 1)
|
||||
} else if c.owner.Resources[c.source] > c.Rate {
|
||||
c.owner.Resources[c.source] = c.owner.Resources[c.source] - c.Rate
|
||||
c.owner.Resources[c.output] = c.owner.Resources[c.output] + 1
|
||||
c.owner.DelItem(c.source, c.Rate)
|
||||
c.owner.AddItem(c.output, 1)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,6 @@ import (
|
||||
//Player is a player controlled mob
|
||||
type Player struct {
|
||||
Resources map[itemType]int
|
||||
Inventory map[itemType]int
|
||||
Craftables map[itemType]struct{}
|
||||
Techs map[TechID]Tech
|
||||
CurrentTile *Tile
|
||||
@ -22,6 +21,37 @@ func NewPlayer() *Player {
|
||||
return &Player{Resources: make(map[itemType]int), Techs: make(map[TechID]Tech), Craftables: make(map[itemType]struct{})}
|
||||
}
|
||||
|
||||
//AddItemByName adds the given amount of the item using the item name
|
||||
func (p *Player) AddItemByName(name string, value int) {
|
||||
obj := lookupByName(name)
|
||||
if obj.Type() != emptyObject {
|
||||
p.AddItem(obj.ID(), value)
|
||||
}
|
||||
}
|
||||
|
||||
//AddItem adds the given amount of the item
|
||||
func (p *Player) AddItem(i itemType, value int) {
|
||||
if v, ok := p.Resources[i]; ok {
|
||||
p.Resources[i] = v + value
|
||||
} else {
|
||||
p.Resources[i] = value
|
||||
}
|
||||
}
|
||||
|
||||
//DelItem removes the given ammount of the item
|
||||
func (p *Player) DelItem(i itemType, value int) {
|
||||
if v, ok := p.Resources[i]; ok {
|
||||
p.Resources[i] = v - value
|
||||
}
|
||||
}
|
||||
|
||||
//DelItemByName removes the given ammount of the item using the item name
|
||||
func (p *Player) DelItemByName(name string, value int) {
|
||||
obj := lookupByName(name)
|
||||
if obj.Type() != emptyObject {
|
||||
p.DelItem(obj.ID(), value)
|
||||
}
|
||||
}
|
||||
func (p *Player) String() string {
|
||||
var res string
|
||||
res += "Resources: \n"
|
||||
|
@ -38,6 +38,11 @@ func (p *Pod) Place(item item, x, y int) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
//Delete removes an item from a tile
|
||||
func (p *Pod) Delete(x, y int) {
|
||||
p.Tiles[x][y].Building = nil
|
||||
}
|
||||
|
||||
//MovePlayer swaps player tiles
|
||||
func (p *Pod) MovePlayer(x, y, s, t int) *Tile {
|
||||
if oob(x) || oob(y) || oob(s) || oob(t) {
|
||||
|
@ -35,8 +35,8 @@ func NewSimulator() *Simulator {
|
||||
panic("Loaded items but nothing in global items table")
|
||||
}
|
||||
pod.Place(newResource(lookupByName("tea").ID()), 4, 4)
|
||||
player.Resources[itemType(1)] = 30
|
||||
player.Resources[itemType(3)] = 5
|
||||
player.AddItem(itemType(1), 30)
|
||||
player.AddItem(itemType(3), 5)
|
||||
pod.Tiles[0][0].User = player
|
||||
player.Announce("Game started")
|
||||
return &Simulator{pod, player, 0, 0, 0, make(chan bool)}
|
||||
@ -63,11 +63,18 @@ func (s *Simulator) Input(cmd string) {
|
||||
build := cur.Building.(*Resource)
|
||||
prod := build.Get()
|
||||
if prod.Kind != 0 && prod.Value > 0 {
|
||||
s.Player.Resources[prod.Kind] = s.Player.Resources[prod.Kind] + prod.Value
|
||||
s.Player.AddItem(prod.Kind, prod.Value)
|
||||
s.Player.Announce(fmt.Sprintf("Gathered %v %v", prod.Value, GlobalItems[prod.Kind].Describe()))
|
||||
}
|
||||
}
|
||||
}
|
||||
case "pickup":
|
||||
if cur.Building != nil {
|
||||
s.Player.AddItem(cur.Building.ID(), 1)
|
||||
s.Place.Delete(s.Px, s.Py)
|
||||
}
|
||||
case "destroy":
|
||||
s.Place.Delete(s.Px, s.Py)
|
||||
case "place":
|
||||
if len(cmdS) < 2 {
|
||||
return
|
||||
@ -84,14 +91,14 @@ func (s *Simulator) Input(cmd string) {
|
||||
obj2 := obj.(Converter)
|
||||
res := s.Place.Place(newConverter(obj2.ID(), s.Player), s.Px, s.Py)
|
||||
if res {
|
||||
s.Player.Resources[obj2.ID()] = s.Player.Resources[obj2.ID()] - 1
|
||||
s.Player.DelItem(obj2.ID(), 1)
|
||||
}
|
||||
case resourceObject:
|
||||
obj2 := obj.(Resource)
|
||||
if obj2.Buildable {
|
||||
res := s.Place.Place(newResource(obj2.ID()), s.Px, s.Py)
|
||||
if res {
|
||||
s.Player.Resources[obj2.ID()] = s.Player.Resources[obj2.ID()] - 1
|
||||
s.Player.DelItem(obj2.ID(), 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -115,9 +122,9 @@ func (s *Simulator) Input(cmd string) {
|
||||
}
|
||||
if i == len(obj2.Costs) {
|
||||
for _, v := range obj2.Costs {
|
||||
s.Player.Resources[lookupByName(v.Name).ID()] = s.Player.Resources[lookupByName(v.Name).ID()] - v.Value
|
||||
s.Player.DelItemByName(v.Name, v.Value)
|
||||
}
|
||||
s.Player.Resources[lookupByName(obj2.String()).ID()] = s.Player.Resources[lookupByName(obj2.String()).ID()] + 1
|
||||
s.Player.AddItemByName(obj2.String(), 1)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user