type Enemy = {
artboard: Artboard<Data.Enemy>,
position: Vec2D,
}
export type MyGame = {
-- This is the component that we will dynamically add to our scene
-- See: https://rive.app/docs/scripting/script-inputs
enemy: Input<Artboard<Data.Enemy>>,
enemies: { Enemy },
}
function createEnemy(self: MyGame)
-- Create an instance of the artboard
local enemy = self.enemy:instance()
-- Keep track of all enemies in self.enemies
local entry: Enemy = {
artboard = enemy,
position = Vec2D.xy(0, 0),
}
table.insert(self.enemies, entry)
end
function init(self: MyGame)
createEnemy(self)
return true
end
function advance(self: MyGame, seconds: number)
-- Advance the artboard of each enemy
for _, enemy in self.enemies do
enemy.artboard:advance(seconds)
end
return true
end
function draw(self: MyGame, renderer: Renderer)
-- draw each enemy
for _, enemy in self.enemies do
renderer:save()
enemy.artboard:draw(renderer)
renderer:restore()
end
end
return function(): Node<MyGame>
return {
init = init,
advance = advance,
draw = draw,
enemy = late(),
enemies = {},
}
end