aboutsummaryrefslogtreecommitdiff
path: root/src/battle_menu.moon
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_menu.moon')
-rw-r--r--src/battle_menu.moon129
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