41 lines
796 B
Go
41 lines
796 B
Go
package items
|
|
|
|
import (
|
|
"fmt"
|
|
"lab.zaar.be/thefish/alchemyst-go/engine/ecs"
|
|
)
|
|
var (
|
|
ErrorInvTooHeavy = fmt.Errorf("too heavy")
|
|
ErrorInvTooBulky = fmt.Errorf("too bulky")
|
|
)
|
|
type Backpack struct {
|
|
MaxNumber int
|
|
MaxBulk int
|
|
MaxMass int
|
|
items []ecs.Entity
|
|
}
|
|
|
|
func (b Backpack) Type() string {
|
|
return ecs.BackpackComponent
|
|
}
|
|
|
|
func (b *Backpack) HasFreeSpace(Bulk, Mass int) error {
|
|
totalBulk, totalMass := 0, 0
|
|
for i, _ := range b.items {
|
|
tmp := Controller.GetComponent(b.items[i], Carried{}.Type()).(Carried)
|
|
carried := tmp
|
|
totalBulk += carried.Bulk
|
|
totalMass += carried.Mass
|
|
}
|
|
if totalMass >= b.MaxMass {
|
|
return ErrorInvTooHeavy
|
|
}
|
|
if totalBulk >= b.MaxBulk {
|
|
return ErrorInvTooBulky
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (b *Backpack) GetItems() []ecs.Entity {
|
|
return b.items
|
|
} |