Initial Commit - 1.0.0k
This commit is contained in:
164
card_character.lua
Normal file
164
card_character.lua
Normal file
@@ -0,0 +1,164 @@
|
||||
--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
|
||||
Reference in New Issue
Block a user