Compare commits
2 Commits
c431a06bf8
...
94a33e6e40
| Author | SHA1 | Date | |
|---|---|---|---|
| 94a33e6e40 | |||
| 7fa148d329 |
119
mranderson.lua
119
mranderson.lua
@@ -48,6 +48,8 @@ local GAME_STATE_INTRO = 1
|
|||||||
local GAME_STATE_MENU = 2
|
local GAME_STATE_MENU = 2
|
||||||
local GAME_STATE_GAME = 3
|
local GAME_STATE_GAME = 3
|
||||||
local GAME_STATE_DIALOG = 4
|
local GAME_STATE_DIALOG = 4
|
||||||
|
local GAME_STATE_INVENTORY = 5
|
||||||
|
local GAME_STATE_INVENTORY_ACTION = 6
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Modules
|
-- Modules
|
||||||
@@ -58,6 +60,7 @@ local Menu = {}
|
|||||||
local Game = {}
|
local Game = {}
|
||||||
local UI = {}
|
local UI = {}
|
||||||
local Input = {}
|
local Input = {}
|
||||||
|
local Inventory = {}
|
||||||
local NpcActions = {}
|
local NpcActions = {}
|
||||||
local ItemActions = {}
|
local ItemActions = {}
|
||||||
local MenuActions = {}
|
local MenuActions = {}
|
||||||
@@ -67,6 +70,7 @@ local MenuActions = {}
|
|||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
local State = {
|
local State = {
|
||||||
game_state = GAME_STATE_SPLASH,
|
game_state = GAME_STATE_SPLASH,
|
||||||
|
inventory = {},
|
||||||
intro = {
|
intro = {
|
||||||
y = Config.screen.height,
|
y = Config.screen.height,
|
||||||
speed = 0.5,
|
speed = 0.5,
|
||||||
@@ -93,6 +97,7 @@ local State = {
|
|||||||
},
|
},
|
||||||
menu_items = {},
|
menu_items = {},
|
||||||
selected_menu_item = 1,
|
selected_menu_item = 1,
|
||||||
|
selected_inventory_item = 1,
|
||||||
dialog_menu_items = {},
|
dialog_menu_items = {},
|
||||||
selected_dialog_menu_item = 1,
|
selected_dialog_menu_item = 1,
|
||||||
active_entity = nil,
|
active_entity = nil,
|
||||||
@@ -144,6 +149,49 @@ local State = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
-- Inventory Module
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function Inventory.draw()
|
||||||
|
cls(Config.colors.dark_grey)
|
||||||
|
UI.draw_top_bar("Inventory")
|
||||||
|
|
||||||
|
if #State.inventory == 0 then
|
||||||
|
print("Inventory is empty.", 70, 70, Config.colors.light_grey)
|
||||||
|
else
|
||||||
|
for i, item in ipairs(State.inventory) do
|
||||||
|
local color = Config.colors.light_grey
|
||||||
|
if i == State.selected_inventory_item then
|
||||||
|
color = Config.colors.green
|
||||||
|
print(">", 60, 20 + i * 10, color)
|
||||||
|
end
|
||||||
|
print(item.name, 70, 20 + i * 10, color)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inventory.update()
|
||||||
|
State.selected_inventory_item = UI.update_menu(State.inventory, State.selected_inventory_item)
|
||||||
|
|
||||||
|
if Input.action() and #State.inventory > 0 then
|
||||||
|
local selected_item = State.inventory[State.selected_inventory_item]
|
||||||
|
State.active_entity = selected_item
|
||||||
|
State.dialog_text = selected_item.name
|
||||||
|
State.game_state = GAME_STATE_INVENTORY_ACTION
|
||||||
|
State.dialog_menu_items = {
|
||||||
|
{label = "Use", action = ItemActions.use},
|
||||||
|
{label = "Drop", action = ItemActions.drop},
|
||||||
|
{label = "Look at", action = ItemActions.look_at},
|
||||||
|
{label = "Goodbye", action = ItemActions.inventory_goodbye}
|
||||||
|
}
|
||||||
|
State.selected_dialog_menu_item = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if Input.back() then
|
||||||
|
State.game_state = GAME_STATE_GAME
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Menu Actions
|
-- Menu Actions
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
@@ -180,13 +228,57 @@ end
|
|||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Item Actions
|
-- Item Actions
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
function ItemActions.use() end
|
function ItemActions.use()
|
||||||
function ItemActions.look_at() end
|
print("Used item: " .. State.active_entity.name)
|
||||||
function ItemActions.take_away() end
|
State.game_state = GAME_STATE_INVENTORY
|
||||||
|
end
|
||||||
|
function ItemActions.look_at()
|
||||||
|
print("Looked at item: " .. State.active_entity.name)
|
||||||
|
State.game_state = GAME_STATE_INVENTORY
|
||||||
|
end
|
||||||
|
function ItemActions.put_away()
|
||||||
|
-- Add item to inventory
|
||||||
|
table.insert(State.inventory, State.active_entity)
|
||||||
|
|
||||||
|
-- Remove item from screen
|
||||||
|
local currentScreenData = State.screens[State.current_screen]
|
||||||
|
for i, item in ipairs(currentScreenData.items) do
|
||||||
|
if item == State.active_entity then
|
||||||
|
table.remove(currentScreenData.items, i)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Go back to game
|
||||||
|
State.game_state = GAME_STATE_GAME
|
||||||
|
end
|
||||||
function ItemActions.goodbye()
|
function ItemActions.goodbye()
|
||||||
State.game_state = GAME_STATE_GAME
|
State.game_state = GAME_STATE_GAME
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ItemActions.inventory_goodbye()
|
||||||
|
State.game_state = GAME_STATE_INVENTORY
|
||||||
|
end
|
||||||
|
|
||||||
|
function ItemActions.drop()
|
||||||
|
-- Remove item from inventory
|
||||||
|
for i, item in ipairs(State.inventory) do
|
||||||
|
if item == State.active_entity then
|
||||||
|
table.remove(State.inventory, i)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add item to screen
|
||||||
|
local currentScreenData = State.screens[State.current_screen]
|
||||||
|
State.active_entity.x = State.player.x
|
||||||
|
State.active_entity.y = State.player.y
|
||||||
|
table.insert(currentScreenData.items, State.active_entity)
|
||||||
|
|
||||||
|
-- Go back to inventory
|
||||||
|
State.game_state = GAME_STATE_INVENTORY
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Input Module
|
-- Input Module
|
||||||
@@ -412,8 +504,7 @@ function Game.update()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if interaction_found then return end
|
if not interaction_found then
|
||||||
|
|
||||||
-- Item interaction
|
-- Item interaction
|
||||||
for _, item in ipairs(currentScreenData.items) do
|
for _, item in ipairs(currentScreenData.items) do
|
||||||
if math.abs(State.player.x - item.x) < 8 and math.abs(State.player.y - item.y) < 8 then
|
if math.abs(State.player.x - item.x) < 8 and math.abs(State.player.y - item.y) < 8 then
|
||||||
@@ -423,14 +514,21 @@ function Game.update()
|
|||||||
State.dialog_menu_items = {
|
State.dialog_menu_items = {
|
||||||
{label = "Use", action = ItemActions.use},
|
{label = "Use", action = ItemActions.use},
|
||||||
{label = "Look at", action = ItemActions.look_at},
|
{label = "Look at", action = ItemActions.look_at},
|
||||||
{label = "Take away", action = ItemActions.take_away},
|
{label = "Put away", action = ItemActions.put_away},
|
||||||
{label = "Goodbye", action = ItemActions.goodbye}
|
{label = "Goodbye", action = ItemActions.goodbye}
|
||||||
}
|
}
|
||||||
State.selected_dialog_menu_item = 1
|
State.selected_dialog_menu_item = 1
|
||||||
|
interaction_found = true
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- If no interaction happened, open inventory
|
||||||
|
if not interaction_found then
|
||||||
|
State.game_state = GAME_STATE_INVENTORY
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Game.update_dialog()
|
function Game.update_dialog()
|
||||||
@@ -473,6 +571,15 @@ local STATE_HANDLERS = {
|
|||||||
UI.draw_dialog()
|
UI.draw_dialog()
|
||||||
Game.update_dialog()
|
Game.update_dialog()
|
||||||
end,
|
end,
|
||||||
|
[GAME_STATE_INVENTORY] = function()
|
||||||
|
Inventory.update()
|
||||||
|
Inventory.draw()
|
||||||
|
end,
|
||||||
|
[GAME_STATE_INVENTORY_ACTION] = function()
|
||||||
|
Inventory.draw() -- Draw inventory behind dialog
|
||||||
|
UI.draw_dialog()
|
||||||
|
Game.update_dialog()
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
function TIC()
|
function TIC()
|
||||||
|
|||||||
Reference in New Issue
Block a user