func (exec interactExec) Push(L *lua.State, g *game.Game) { exec.BasicActionExec.Push(L, g) if L.IsNil(-1) { return } L.PushString("Toggle Door") L.PushBoolean(exec.Toggle_door) L.SetTable(-3) if exec.Toggle_door { L.PushString("Door") game.LuaPushDoor(L, g, exec.getDoor(g)) } else { L.PushString("Target") game.LuaPushEntity(L, g.EntityById(exec.Target)) } L.SetTable(-3) }
// Returns a list of all doors attached to the specified room. // Format // room = allDoorsOn(r) // // Input: // r - room - A room. // // Output: // doors - array[door] - List of all doors attached to the specified room. func AllDoorsOn(a *Ai) lua.GoFunction { return func(L *lua.State) int { if !game.LuaCheckParamsOk(L, "allDoorsOn", game.LuaRoom) { return 0 } room := game.LuaToRoom(L, a.ent.Game(), -1) if room == nil { game.LuaDoError(L, "Specified an invalid room.") return 0 } L.NewTable() for i := range room.Doors { L.PushInteger(i + 1) game.LuaPushDoor(L, a.ent.Game(), room.Doors[i]) L.SetTable(-3) } return 1 } }
// Returns a list of all doors between two rooms. // Format // doors = allDoorsBetween(r1, r2) // // Input: // r1 - room - A room. // r2 - room - Another room. // // Output: // doors - array[door] - List of all doors connecting r1 and r2. func AllDoorsBetween(a *Ai) lua.GoFunction { return func(L *lua.State) int { if !game.LuaCheckParamsOk(L, "allDoorsBetween", game.LuaRoom, game.LuaRoom) { return 0 } room1 := game.LuaToRoom(L, a.ent.Game(), -2) room2 := game.LuaToRoom(L, a.ent.Game(), -1) if room1 == nil || room2 == nil { game.LuaDoError(L, "AllDoorsBetween: Specified an invalid door.") return 0 } // TODO: Check for floors! // if f1 != f2 { // // Rooms on different floors can theoretically be connected in the // // future by a stairway, but right now that doesn't happen. // L.NewTable() // return 1 // } L.NewTable() count := 1 for _, door1 := range room1.Doors { for _, door2 := range room2.Doors { _, d := a.ent.Game().House.Floors[0].FindMatchingDoor(room1, door1) if d == door2 { L.PushInteger(count) count++ game.LuaPushDoor(L, a.ent.Game(), door1) L.SetTable(-3) } } } return 1 } }