Last active
January 12, 2017 10:07
-
-
Save nicloay/1086ce56435aa9aa2a3c65420f2486ea to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local BoardData = require("level.modules.board_data") | |
local ANIMATION_TIME = 1 | |
local ANIMATION_DISSAPEAR_TIME = 0.5 | |
local SHADE_ALPHA = 0.8 | |
local POINTER_DEALY = 1 | |
local POINTER_MOVE_TIME = 1 | |
local INITIAL_TIMEOUT_BEFORE_APPEAR = 1 | |
function init(self) | |
gui.set_render_order(90) | |
self.info_stripe_node = gui.get_node("info_stripe") | |
self.left_part_node = gui.get_node("left_part") | |
self.right_part_node = gui.get_node("right_part") | |
self.shade_node = gui.get_node("shade") | |
self.pointer_node = gui.get_node("pointer") | |
self.pointer_sprite = gui.get_node("pointer_sprite") | |
self.pointer_start_position = gui.get_position(gui.get_node("pointer_from")) | |
self.pointer_end_position = gui.get_position(gui.get_node("pointer_to")) | |
set_node_status(self, false) | |
self.config = json.decode(gui.get_text(gui.get_node("config"))) | |
self.show_pointer = false | |
self.pointer_counter = 0 | |
self.data_appeared = false | |
end | |
function set_node_status(self, status) | |
gui.set_enabled(self.shade_node, status) | |
gui.set_enabled(self.pointer_node, status) | |
gui.set_enabled(self.left_part_node, status) | |
gui.set_enabled(self.right_part_node, status) | |
gui.set_enabled(self.info_stripe_node, status) | |
end | |
function update(self, dt) | |
if self.data_appeared == false and BoardData.turn_number == self.config.turn_number then | |
self.initial_timer = (self.initial_timer or 0) + dt | |
if self.initial_timer > INITIAL_TIMEOUT_BEFORE_APPEAR then | |
self.data_appeared = true | |
move_captions(self) | |
end | |
end | |
if self.show_pointer then | |
if BoardData.selected_cell then | |
self.pointer_counter = 0 | |
else | |
self.pointer_counter = self.pointer_counter + dt | |
end | |
if self.pointer_counter > (POINTER_DEALY + POINTER_MOVE_TIME) then | |
move_pointer_and_hide(self) | |
self.pointer_counter = 0 | |
end | |
end | |
if self.data_appeared and BoardData.target_cell and not self.destroy_in_progress then | |
print("im here", self.config.turn_number) | |
self_destroy(self) | |
end | |
end | |
function self_destroy(self) | |
self.destroy_in_progress = true | |
self.show_pointer = false | |
animate_disappear(self, self.stripe_data) | |
animate_disappear(self, self.left_data) | |
animate_disappear(self, self.right_data) | |
local disable = function() | |
msg.post(msg.url(), "disable") | |
end | |
gui.animate(self.shade_node, "color", self.start_shade_color, gui.EASING_LINEAR, ANIMATION_DISSAPEAR_TIME, 0, disable) | |
end | |
function get_node_data(self, node) | |
local result = {} | |
result.node = node | |
result.original_position = gui.get_position(node) | |
result.start_position = vmath.vector3(result.original_position) | |
result.size = gui.get_size(node) | |
return result | |
end | |
function animate_appear(self, data, on_done) | |
gui.set_position(data.node, data.start_position) | |
gui.animate(data.node, "position", data.original_position, gui.EASING_OUTBACK, ANIMATION_TIME, 0, on_done) | |
end | |
function animate_disappear(self, data, on_done) | |
gui.animate(data.node, "position", data.start_position, gui.EASING_INBACK, ANIMATION_DISSAPEAR_TIME, 0, on_done) | |
end | |
function move_captions(self) | |
set_node_status(self, true) | |
gui.set_enabled(self.pointer_node, false) | |
self.stripe_data = get_node_data(self, self.info_stripe_node) | |
self.stripe_data.start_position.y = -self.stripe_data.size.y / 2 | |
animate_appear(self, self.stripe_data) | |
self.left_data = get_node_data(self, self.left_part_node) | |
self.left_data.start_position.x = -self.left_data.size.x / 2 | |
animate_appear(self, self.left_data) | |
self.right_data = get_node_data(self, self.right_part_node) | |
self.right_data.start_position.x = gui.get_width() + self.right_data.size.x / 2 | |
animate_appear(self, self.right_data) | |
show_shade(self) | |
end | |
function show_shade(self) | |
self.original_shade_color = gui.get_color(self.shade_node) | |
self.start_shade_color = vmath.vector4(self.original_shade_color) | |
self.start_shade_color.w = 0 | |
gui.set_color(self.shade_node, self.start_shade_color) | |
gui.animate(self.shade_node, "color", self.original_shade_color, gui.EASING_LINEAR, ANIMATION_TIME / 2, ANIMATION_TIME / 2, function() self.show_pointer = true end ) | |
end | |
function move_pointer_and_hide(self) | |
gui.set_enabled(self.pointer_node, true) | |
gui.set_position(self.pointer_node, self.pointer_start_position) | |
gui.set_color(self.pointer_sprite, vmath.vector4(1,1,1,0)) | |
gui.animate(self.pointer_node, "position", self.pointer_end_position, gui.EASING_LINEAR, POINTER_MOVE_TIME, 0, show_pointer_with_delay) | |
gui.animate(self.pointer_sprite, "color", vmath.vector4(1), gui.EASING_INOUTCUBIC, POINTER_MOVE_TIME, 0, nil, gui.PLAYBACK_ONCE_PINGPONG ) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment