165 lines
5.2 KiB
Lua
165 lines
5.2 KiB
Lua
--class
|
|
Card_Character = Moveable:extend()
|
|
|
|
--class methods
|
|
function Card_Character:init(args)
|
|
Moveable.init(self,args.x or 1, args.y or 1, args.w or G.CARD_W*1.1, args.h or G.CARD_H*1.1)
|
|
|
|
self.states.collide.can = false
|
|
|
|
self.children = {}
|
|
self.config = {args = args}
|
|
self.children.card = Card(self.T.x, self.T.y, G.CARD_W, G.CARD_H, G.P_CARDS.empty, args.center or G.P_CENTERS.j_joker, {bypass_discovery_center = true})
|
|
self.children.card.states.visible = false
|
|
self.children.card:start_materialize({G.C.BLUE, G.C.WHITE, G.C.RED})
|
|
self.children.card:set_alignment{
|
|
major = self, type = 'cm', offset = {x=0, y=0}
|
|
}
|
|
self.children.card.jimbo = self
|
|
self.children.card.states.collide.can = true
|
|
self.children.card.states.focus.can = false
|
|
self.children.card.states.hover.can = true
|
|
self.children.card.states.drag.can = false
|
|
self.children.card.hover = Node.hover
|
|
|
|
self.children.particles = Particles(0, 0, 0,0, {
|
|
timer = 0.03,
|
|
scale = 0.3,
|
|
speed = 1.2,
|
|
lifespan = 2,
|
|
attach = self,
|
|
colours = {G.C.RED, G.C.BLUE, G.C.ORANGE},
|
|
fill = true
|
|
})
|
|
self.children.particles.static_rotation = true
|
|
self.children.particles:set_role{
|
|
role_type = 'Minor',
|
|
xy_bond = 'Weak',
|
|
r_bond = 'Strong',
|
|
major = self,
|
|
}
|
|
|
|
if getmetatable(self) == Card_Character then
|
|
table.insert(G.I.CARD, self)
|
|
end
|
|
end
|
|
|
|
function Card_Character:move(dt)
|
|
Moveable.move(self, dt)
|
|
end
|
|
|
|
function Card_Character:hard_set_VT()
|
|
self:align_to_major()
|
|
Moveable.hard_set_VT(self)
|
|
self:align()
|
|
self.children.card:hard_set_VT()
|
|
end
|
|
|
|
function Card_Character:align()
|
|
if self.children.card then
|
|
self.children.card.T.x = self.T.x + (self.T.w - self.children.card.T.w)/2
|
|
self.children.card.T.y = self.T.y + (self.T.h - self.children.card.T.h)/2
|
|
end
|
|
end
|
|
|
|
function Card_Character:add_button(button, func, colour, update_func, snap_to, yoff)
|
|
if self.children.button then self.children.button:remove() end
|
|
self.config.button_align = {align="bm", offset = {x=0,y=yoff or 0.3},major = self, parent = self}
|
|
self.children.button = UIBox{
|
|
definition = create_UIBox_character_button({button = button, func = func, colour = colour, update_func = update_func, maxw = 3}),
|
|
config = self.config.button_align
|
|
}
|
|
if snap_to then G.CONTROLLER:snap_to{node = self.children.button} end
|
|
end
|
|
|
|
function Card_Character:add_speech_bubble(text_key, align, loc_vars)
|
|
if self.children.speech_bubble then self.children.speech_bubble:remove() end
|
|
self.config.speech_bubble_align = {align=align or 'bm', offset = {x=0,y=0},parent = self}
|
|
self.children.speech_bubble =
|
|
UIBox{
|
|
definition = G.UIDEF.speech_bubble(text_key, loc_vars),
|
|
config = self.config.speech_bubble_align
|
|
}
|
|
self.children.speech_bubble:set_role{
|
|
role_type = 'Minor',
|
|
xy_bond = 'Weak',
|
|
r_bond = 'Strong',
|
|
major = self,
|
|
}
|
|
self.children.speech_bubble.states.visible = false
|
|
end
|
|
|
|
function Card_Character:remove_button()
|
|
if self.children.button then self.children.button:remove(); self.children.button = nil end
|
|
end
|
|
|
|
function Card_Character:remove_speech_bubble()
|
|
if self.children.speech_bubble then self.children.speech_bubble:remove(); self.children.speech_bubble = nil end
|
|
end
|
|
|
|
function Card_Character:say_stuff(n, not_first)
|
|
self.talking = true
|
|
if not not_first then
|
|
G.E_MANAGER:add_event(Event({
|
|
trigger = 'after',
|
|
delay = 0.1,
|
|
func = function()
|
|
if self.children.speech_bubble then self.children.speech_bubble.states.visible = true end
|
|
self:say_stuff(n, true)
|
|
return true
|
|
end
|
|
}))
|
|
else
|
|
if n <= 0 then self.talking = false; return end
|
|
local new_said = math.random(1, 11)
|
|
while new_said == self.last_said do
|
|
new_said = math.random(1, 11)
|
|
end
|
|
self.last_said = new_said
|
|
play_sound('voice'..math.random(1, 11), G.SPEEDFACTOR*(math.random()*0.2+1), 0.5)
|
|
self.children.card:juice_up()
|
|
G.E_MANAGER:add_event(Event({
|
|
trigger = 'after',
|
|
blockable = false, blocking = false,
|
|
delay = 0.13,
|
|
func = function()
|
|
self:say_stuff(n-1, true)
|
|
return true
|
|
end
|
|
}), 'tutorial')
|
|
end
|
|
end
|
|
|
|
function Card_Character:draw(dt)
|
|
if self.highlight then
|
|
self.children.highlight:draw()
|
|
self.highlight:draw()
|
|
if self.highlight.draw_children then self.highlight:draw_children() end
|
|
end
|
|
if self.children.particles then
|
|
self.children.particles:draw()
|
|
end
|
|
if self.children.speech_bubble then
|
|
self.children.speech_bubble:draw()
|
|
end
|
|
if self.children.button and not self.talking then
|
|
self.children.button:draw()
|
|
end
|
|
if self.children.card then
|
|
self.children.card:draw()
|
|
end
|
|
add_to_drawhash(self)
|
|
self:draw_boundingrect()
|
|
end
|
|
|
|
function Card_Character:remove()
|
|
G.jimboed = nil
|
|
remove_all(self.children)
|
|
for k, v in pairs(G.I.CARD) do
|
|
if v == self then
|
|
table.remove(G.I.CARD, k)
|
|
end
|
|
end
|
|
Moveable.remove(self)
|
|
end
|