diff options
Diffstat (limited to 'src/battle_menu.moon')
| -rw-r--r-- | src/battle_menu.moon | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/src/battle_menu.moon b/src/battle_menu.moon new file mode 100644 index 0000000..84b8aa9 --- /dev/null +++ b/src/battle_menu.moon @@ -0,0 +1,129 @@ +world = require "world" +main = require "main" +color = require "color" +ui = require "ui" +bp = require "broadphase" +pass = require "a_pass" +import Pass from pass +action = require "action" + +mod = ... + +pip_width = 24 + +mod.time_pips = am.group! +pip_x_start = ((main.pips/2)+1) * -pip_width +pip_sprites = {} +ms_per_pip = 1000 + +mod.ability_selector = am.group! +mod.playerturn_up = 0 + +mod.set_playerturn_up = (time) => + mod.playerturn_up = time + +mod.victory_g = am.group! +mod.victory_text = {} + +mod.action_phase = am.group! --group used to animate characters during battle, also holds dammage values +mod.victory_show = false +mod.loaded_ability = nil + +mod.load = () -> + pip_trans = am.translate(pip_x_start,240 - (pip_width/2)) + for i = 1,main.pips + pip_loc = am.translate(pip_width*i,0) + pip_trans\append(pip_loc^ am.sprite("data/pip_frame.png",color.white)) + light_sprite = am.sprite("data/pip_dark.png",color.white) + pip_loc\append(light_sprite) + table.insert(pip_sprites,light_sprite) + mod.time_pips\append(pip_trans) + ability_buttons = {} + ability_trans = am.group! + main.root("screen")\append(mod.victory_g) + for k,v in pairs({"V","I","C","T","O","R","Y"}) + n = am.scale(2)^am.translate((k-3.5)*20,0)^am.text(v,color.fg) + n\action(coroutine.create(() -> + while true + for k,v in pairs(mod.victory_text) + v.hidden = not mod.victory + coroutine.yield! + )) + n\action(am.series({ + am.delay(k*0.25), + am.loop(() -> am.series({ + am.tween(n("translate"),1,{y:30},am.ease.sine), + am.tween(n("translate"),1,{y:0},am.ease.sine) + })) + })) + table.insert(mod.victory_text,n) + mod.victory_g\append(n) + mod.ability_selector\append(ability_trans) + for i = 1,4 + trans_x = (-150 * (i-2))+32 + trans_y = 200 + --ui.create_button needs to be relative to global for hitboxes to work right + ability_slot_button = ui.create_any_button(ability_trans,3,3,trans_x,trans_y) + lpd = main.world.localplayer.data + print("lpd was:",lpd) + ability = lpd.abilities[i] or Pass + print("Ability was",ability.__name) + print("Sprite was",ability and ability.sprite) + ability_slot_icon = am.sprite(ability and ability.sprite or "data/no_action.png", color.white, "left","top")\tag("icon") + ability_slot_button.name = ability.__name + ability_slot_button.ability = ability + ability_slot_button.node\append(am.translate(trans_x + 16,trans_y - 16)^ ability_slot_icon) + table.insert(ability_buttons, ability_slot_button) + print("test") + main.root("screen")\append(mod.time_pips) + main.root("screen")\append(mod.ability_selector) + main.root("screen")\append(mod.action_phase) + mod.time_pips\action(coroutine.create(() -> + print("Pips in action:",pip_sprites) + while true + if not mod.victory + currtime = am.eval_js("new Date().getTime()") + elapsed_time = currtime - main.world.time_ref + npips = math.min(math.floor(elapsed_time/ms_per_pip),main.pips) + for i = 1,npips + pip_sprites[i].source = "data/pip_light.png" + for i = npips+2,main.pips + if i > 0 and i <= main.pips + pip_sprites[i].source = "data/pip_dark.png" + coroutine.yield! + )) + touch_indicator = am.group! + touch_cursor = am.sprite("data/cursor.png",vec4(1,1,1,1),"left","top") + touch_loc = am.translate(0,0)^ touch_cursor + touch_indicator\append(touch_loc) + mod.ability_selector\append(touch_indicator) + mod.ability_selector\action(coroutine.create(() -> + while true + if #main.win\active_touches! > 0 + touch = main.win\touch_position(1) + touch_cursor.color = vec4(1,1,1,1) + touch_loc.x = touch.x + touch_loc.y = touch.y + col_but = bp.check(touch.x, touch.y + 96) + if #col_but > 0 + touch_cursor.color = vec4(0.5,0.5,0.5,0.5) + if main.win\touch_began(1) + print("Checking ability buttons:",ability_buttons, "against col but:",col_but) + for _,button in ipairs(ability_buttons) + if button == col_but[1] + print("Found button") + action.set_action(button.name) + if mod.loaded_ability + mod.loaded_ability\unload! + button.ability\load! + mod.loaded_ability = ability + coroutine.yield! + )) + + +mod.unload = () -> + main.root("screen")\remove(mod.time_pips) + main.root("screen")\remove(mod.ability_selector) + main.root("screen")\remove(mod.action_phase) + +mod |
