diff --git a/game/love_src/src/new/world/main_menu/components/button.lua b/game/love_src/src/new/world/main_menu/components/button.lua index e5ddf53..86b10ec 100644 --- a/game/love_src/src/new/world/main_menu/components/button.lua +++ b/game/love_src/src/new/world/main_menu/components/button.lua @@ -23,12 +23,15 @@ local default = { label_color = {255/255, 255/255, 255/255}, bg_color = {0, 0, 0}, line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, func = default_func, label = "skip", } function world:load(entity, data) self.data = data or default + self.data.temp_color = self.data.bg_color + self.mouse = "not click" end -- x1 y1 -- (x1 + w1) y1 @@ -41,6 +44,46 @@ local function is_inside(x1,y1,w1,h1, x2,y2) y2 < y1+h1 end +local function transform(x, y, w, h, ox, oy,lox, loy, s) + x = x * s + y = y * s + ox = ox * s + oy = oy * s + lox = lox *s + loy = loy * s + w = w * s + h = h * s + x = x + ox + y = y + oy + + return x, y, w, h, ox, oy, lox, loy +end + +function world:update(dt) + local xm, ym = love.mouse.getPosition() + local x, y, w, h, ox, oy, lox, loy, s = self.data.pos[1], self.data.pos[2], + self.data.wh[1], self.data.wh[2], + self.data.origin[1], self.data.origin[2], + self.data.label_origin[1], self.data.label_origin[2], + self.data.scale + x, y, w, h, ox, oy, lox, loy = transform(x, y, w, h, ox, oy, lox, loy, s) + if (is_inside(x, y, w, h, xm, ym)) then + self.data.temp_color = self.data.highlight_color + if (love.mouse.isDown(1)) then + if (self.mouse == "not click") then + self.mouse = "click" + end + else + if (self.mouse == "click") then + self.mouse = "not click" + self.data.func() + end + end + else + self.data.temp_color = self.data.bg_color + end +end + local function draw_text(text, x, y, c) local font_ix = test.draw_font_start() test.draw_font_set_base_color(c[1], c[2], c[3]) @@ -83,9 +126,8 @@ local function draw_box(x, y, w, h, c) ) end -local function draw_button(text, x, y, w, h, ox, oy, lox, loy, ct, cl, cb) - x = x + ox - y = y + oy +local function draw_button(text, x, y, w, h, ox, oy, lox, loy, s, ct, cl, cb) + x, y, w, h, ox, oy, lox, loy = transform(x, y, w, h, ox, oy, lox, loy, s) test.draw_line_quad_start() draw_box(x, y, w, h, cb) draw_outline(x, y, w, h, cl) @@ -99,7 +141,8 @@ function world:ui_draw() self.data.pos[1], self.data.pos[2], self.data.wh[1], self.data.wh[2], self.data.origin[1], self.data.origin[2], self.data.label_origin[1], self.data.label_origin[2], - self.data.label_color, self.data.line_color, self.data.bg_color + self.data.scale, + self.data.label_color, self.data.line_color, self.data.temp_color ) end diff --git a/game/love_src/src/new/world/main_menu/data/main_menu.lua b/game/love_src/src/new/world/main_menu/data/main_menu.lua new file mode 100644 index 0000000..ea1ce94 --- /dev/null +++ b/game/love_src/src/new/world/main_menu/data/main_menu.lua @@ -0,0 +1,36 @@ +local vm = require"lib.vornmath" +local wm = require"world_map" + +local lw, lh = love.graphics.getDimensions() + +local function to_play() + load_world(wm["town"]) +end + +local wh = vm.vec2(120, 60) +local l_wh = vm.vec2(50, 25) + +return { + { + type = "button", + name = "button_to_play", + components = { + button = require"love_src.src.new.world.main_menu.components.button" + }, + data = { + button = { + pos = vm.vec2(lw/2, lh/2), + wh = wh, + scale = 1, + origin = vm.vec2(-wh[1]/2, -wh[2]/2), + label_origin = vm.vec2(l_wh[1]/2, l_wh[2]/2), + label_color = {255/255, 255/255, 255/255}, + bg_color = {0, 1, 0}, + line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, + func = to_play, + label = "Play", + } + }, + } +} diff --git a/game/love_src/src/new/world/main_menu/data/monastery.lua b/game/love_src/src/new/world/main_menu/data/monastery.lua new file mode 100644 index 0000000..9e4a72d --- /dev/null +++ b/game/love_src/src/new/world/main_menu/data/monastery.lua @@ -0,0 +1,36 @@ +local vm = require"lib.vornmath" +local wm = require"world_map" + +local lw, lh = love.graphics.getDimensions() + +local function to_track_choose() + load_world(wm["track_choose"]) +end + +local wh = vm.vec2(120, 60) +local l_wh = vm.vec2(50, 25) + +return { + { + type = "button", + name = "button_to_race", + components = { + button = require"love_src.src.new.world.main_menu.components.button" + }, + data = { + button = { + pos = vm.vec2(lw/2, lh/2), + wh = wh, + scale = 1, + origin = vm.vec2(-wh[1]/2, -wh[2]/2), + label_origin = vm.vec2(l_wh[1]/2, l_wh[2]/2), + label_color = {255/255, 255/255, 255/255}, + bg_color = {0, 1, 0}, + line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, + func = to_track_choose, + label = "Next Race", + } + }, + } +} diff --git a/game/love_src/src/new/world/main_menu/data/town.lua b/game/love_src/src/new/world/main_menu/data/town.lua new file mode 100644 index 0000000..a552e55 --- /dev/null +++ b/game/love_src/src/new/world/main_menu/data/town.lua @@ -0,0 +1,62 @@ +local vm = require"lib.vornmath" +local wm = require"world_map" + +local lw, lh = love.graphics.getDimensions() + +local function to_track_choose() + load_world(wm["track_choose"]) +end + +local function to_monastery() + load_world(wm["monastery"]) +end + +local wh = vm.vec2(120, 60) +local l_wh = vm.vec2(50, 25) + +return { + { + type = "button", + name = "button_to_track_choose", + components = { + button = require"love_src.src.new.world.main_menu.components.button" + }, + data = { + button = { + pos = vm.vec2(lw/2 + wh[1], lh/2), + wh = wh, + scale = 1, + origin = vm.vec2(-wh[1]/2, -wh[2]/2), + label_origin = vm.vec2(l_wh[1]/2, l_wh[2]/2), + label_color = {255/255, 255/255, 255/255}, + bg_color = {0, 1, 0}, + line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, + func = to_track_choose, + label = "Next Race", + } + }, + }, + { + type = "button", + name = "button_to_monastery", + components = { + button = require"love_src.src.new.world.main_menu.components.button" + }, + data = { + button = { + pos = vm.vec2(lw/2 - wh[1], lh/2), + wh = wh, + scale = 1, + origin = vm.vec2(-wh[1]/2, -wh[2]/2), + label_origin = vm.vec2(l_wh[1]/2, l_wh[2]/2), + label_color = {255/255, 255/255, 255/255}, + bg_color = {0, 1, 0}, + line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, + func = to_monastery, + label = "Monastery", + } + }, + } +} diff --git a/game/love_src/src/new/world/main_menu/data/track_choose.lua b/game/love_src/src/new/world/main_menu/data/track_choose.lua new file mode 100644 index 0000000..35bb9d6 --- /dev/null +++ b/game/love_src/src/new/world/main_menu/data/track_choose.lua @@ -0,0 +1,62 @@ +local vm = require"lib.vornmath" +local wm = require"world_map" + +local lw, lh = love.graphics.getDimensions() + +local function to_track_1() + load_world(wm["track_1"]) +end + +local function to_track_2() + load_world(wm["track_2"]) +end + +local wh = vm.vec2(120, 60) +local l_wh = vm.vec2(50, 25) + +return { + { + type = "button", + name = "button_to_track_1", + components = { + button = require"love_src.src.new.world.main_menu.components.button" + }, + data = { + button = { + pos = vm.vec2(lw/2 + wh[1], lh/2), + wh = wh, + scale = 1, + origin = vm.vec2(-wh[1]/2, -wh[2]/2), + label_origin = vm.vec2(l_wh[1]/2, l_wh[2]/2), + label_color = {255/255, 255/255, 255/255}, + bg_color = {0, 1, 0}, + line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, + func = to_track_1, + label = "Track 1", + } + }, + }, + { + type = "button", + name = "button_to_track_2", + components = { + button = require"love_src.src.new.world.main_menu.components.button" + }, + data = { + button = { + pos = vm.vec2(lw/2 - wh[1], lh/2), + wh = wh, + scale = 1, + origin = vm.vec2(-wh[1]/2, -wh[2]/2), + label_origin = vm.vec2(l_wh[1]/2, l_wh[2]/2), + label_color = {255/255, 255/255, 255/255}, + bg_color = {0, 1, 0}, + line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, + func = to_track_2, + label = "Track 2", + } + }, + } +} diff --git a/game/love_src/src/new/world/main_menu/init.lua b/game/love_src/src/new/world/main_menu/init.lua index 33e0220..ec1c920 100644 --- a/game/love_src/src/new/world/main_menu/init.lua +++ b/game/love_src/src/new/world/main_menu/init.lua @@ -42,6 +42,7 @@ local default_entities = { label_color = {255/255, 255/255, 255/255}, bg_color = {0, 1, 0}, line_color = {1, 0, 0}, + highlight_color = {0, 0, 1}, func = to_race, label = "play", } @@ -49,10 +50,7 @@ local default_entities = { } } -function world:load(data, entities_data) - self.data = data or default - self.entities_data = entities_data or default_entities - +function world:setup() for _, d in pairs(self.entities_data) do local e = { type = d.type, @@ -67,6 +65,13 @@ function world:load(data, entities_data) end end +function world:load(data, entities_data) + self.data = data + self.entities_data = entities_data + + self:setup() +end + function world:update(dt) for _, e in ipairs(self.entities) do for t, c in pairs(e.components) do diff --git a/game/love_src/src/new/world/race/init.lua b/game/love_src/src/new/world/race/init.lua index 66fa2fe..eb051e6 100644 --- a/game/love_src/src/new/world/race/init.lua +++ b/game/love_src/src/new/world/race/init.lua @@ -70,12 +70,7 @@ function world:new() self.entities = {} end -function world:load(data, entities_data) - self.data = data or default - self.is_loaded = true - - self.entities_data = entities_data or entities_default - +function world:setup() local map for _, d in pairs(self.entities_data) do local e = { @@ -101,7 +96,15 @@ function world:load(data, entities_data) end end end +end +function world:load(data, entities_data) + self.data = data or default + self.is_loaded = true + + self.entities_data = entities_data or entities_default + + self:setup() end function world:update(dt) diff --git a/game/main.lua b/game/main.lua index 8ff013c..369622b 100644 --- a/game/main.lua +++ b/game/main.lua @@ -190,26 +190,56 @@ end local wm = require("world_map") -world = { - ["main_menu"] = require("love_src.src.new.world.main_menu.init")(), - ["race"] = require("love_src.src.new.world.race.init")(), - -- ["top_down_race"] = require("love_src.src.world.top_down_race")(), - -- ["main_menu"] = require("love_src.src.world.main_menu")(), - -- ["1_intro"] = require("love_src.src.world.1_intro")(), - -- ["2_town_square"] = require("love_src.src.world.2_town_square")(), - -- ["race"] = require("love_src.src.world.race")(), - -- ["train"] = require("love_src.src.world.train")(), -}; +local world = {}; + +local world_data = { + ["main_menu"] = { + world = require("love_src.src.new.world.main_menu.init")(), + data = {}, + entities_data = require("love_src.src.new.world.main_menu.data.main_menu"), + }, + ["town"] = { + world = require("love_src.src.new.world.main_menu.init")(), + data = {}, + entities_data = require("love_src.src.new.world.main_menu.data.town"), + }, + ["monastery"] = { + world = require("love_src.src.new.world.main_menu.init")(), + data = {}, + entities_data = require("love_src.src.new.world.main_menu.data.monastery"), + }, + ["track_choose"] = { + world = require("love_src.src.new.world.main_menu.init")(), + data = {}, + entities_data = require("love_src.src.new.world.main_menu.data.track_choose"), + }, + ["track_1"] = { + world = require("love_src.src.new.world.race.init")(), + -- data = {}, + -- entities_data = require("love_src.src.new.world.main_menu.data.track_choose"), + }, + ["track_2"] = { + world = require("love_src.src.new.world.race.init")(), + -- data = {}, + -- entities_data = require("love_src.src.new.world.main_menu.data.track_choose"), + }, +} current = wm["main_menu"] function load_world(world_to_load) + print(current) current = world_to_load - world[current]:reload() + print(current) + local c_w = world_data[current] + world[current] = c_w.world + world[current]:load(c_w.data, c_w.entities_data) + -- world[current]:reload() end function love_load() - world[current]:load() + load_world(current) + -- world[current]:load() end function love_update(dt) diff --git a/game/world_map.lua b/game/world_map.lua index d5721d2..c52ff98 100644 --- a/game/world_map.lua +++ b/game/world_map.lua @@ -1,8 +1,13 @@ return { -- ["top_down_race"] = "top_down_race", ["main_menu"] = "main_menu", - ["1_intro"] = "1_intro", - ["2_town_square"] = "2_town_square", - ["race"] = "race", + ["town"] = "town", + ["monastery"] = "monastery", + ["track_choose"] = "track_choose", + ["track_1"] = "track_1", + ["track_2"] = "track_2", + -- ["1_intro"] = "1_intro", + -- ["2_town_square"] = "2_town_square", + -- ["race"] = "race", -- ["train"] = "train" }