feat(game): 玩法接线——实体AI/夜间刷僵尸/受伤重生、掉落物拾取、熔炉烧炼产出、服务器与客户端 Mod 加载、客户端单机存档
This commit is contained in:
@@ -67,10 +67,10 @@ func NewFurnace(x, y, z int32) *Entity { return New(KindFurnace, x, y, z) }
|
||||
func NewChest(x, y, z int32) *Entity { return New(KindChest, x, y, z) }
|
||||
|
||||
// Tick 熔炉烧炼(每 tick;箱子无逻辑)。
|
||||
// 返回 true 表示产出完成了一个物品(调用方取出放入输出槽)。
|
||||
func (e *Entity) Tick() bool {
|
||||
// 产出时返回 (输入物品名, true)——输入名在消耗前捕获,供调用方查熔炼配方。
|
||||
func (e *Entity) Tick() (string, bool) {
|
||||
if e.Kind != KindFurnace {
|
||||
return false
|
||||
return "", false
|
||||
}
|
||||
// 燃料耗尽则尝试补充
|
||||
if e.BurnTicks <= 0 {
|
||||
@@ -92,15 +92,16 @@ func (e *Entity) Tick() bool {
|
||||
e.CookTicks++
|
||||
if e.CookTicks >= CookTime {
|
||||
e.CookTicks = 0
|
||||
// 消耗一个输入(产出由调用方放入输出槽,物品与背包.md §6)
|
||||
// 消耗前捕获输入名(产出配方查询用,物品与背包.md §6)
|
||||
inputName := e.Slots[SlotInput].Name
|
||||
e.Slots[SlotInput].Count--
|
||||
if e.Slots[SlotInput].Count == 0 {
|
||||
e.Slots[SlotInput] = item.Stack{}
|
||||
}
|
||||
return true
|
||||
return inputName, true
|
||||
}
|
||||
}
|
||||
return false
|
||||
return "", false
|
||||
}
|
||||
|
||||
// CanInsert 槽位插入规则(容器版:与背包规则表一致,物品与背包.md §3)。
|
||||
|
||||
@@ -31,7 +31,7 @@ func TestFurnaceSmelt(t *testing.T) {
|
||||
// 烧炼 2 炉
|
||||
produced := 0
|
||||
for i := 0; i < 2000; i++ {
|
||||
if f.Tick() {
|
||||
if _, ok := f.Tick(); ok {
|
||||
produced++
|
||||
}
|
||||
}
|
||||
@@ -52,7 +52,7 @@ func TestFurnaceFuelExhaust(t *testing.T) {
|
||||
// 一块煤 1600 tick,最多产出 8 个(1600/200)
|
||||
produced := 0
|
||||
for i := 0; i < 4000; i++ {
|
||||
if f.Tick() {
|
||||
if _, ok := f.Tick(); ok {
|
||||
produced++
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user