extract asteroids ctor
This commit is contained in:
parent
21c432f583
commit
b2b70ee910
2 changed files with 38 additions and 9 deletions
32
asteroids/actors.lua
Normal file
32
asteroids/actors.lua
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
local phys = require("phys")
|
||||||
|
local inspect = require("inspect")
|
||||||
|
|
||||||
|
local actors = {}
|
||||||
|
|
||||||
|
function actors.buildActors(game)
|
||||||
|
local asteroids = {}
|
||||||
|
local asteroids_mt = { __index = asteroids }
|
||||||
|
|
||||||
|
function asteroids.new(asteroid)
|
||||||
|
local stage = game.asteroids.stages[asteroid.stage or #game.asteroids.stages]
|
||||||
|
local instance = {
|
||||||
|
angle = math.random() * phys.tau,
|
||||||
|
speed = stage.speed,
|
||||||
|
facing = math.random() * phys.tau,
|
||||||
|
spin = (math.random() - 0.5),
|
||||||
|
radius = stage.radius,
|
||||||
|
sprite = stage.sprite,
|
||||||
|
}
|
||||||
|
for k, v in pairs(asteroid) do
|
||||||
|
instance[k] = v
|
||||||
|
end
|
||||||
|
setmetatable(instance, asteroids_mt)
|
||||||
|
return instance
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
asteroids = asteroids,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return actors
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
local love = require("love")
|
local love = require("love")
|
||||||
local phys = require("phys")
|
local phys = require("phys")
|
||||||
local inspect = require("inspect")
|
local inspect = require("inspect")
|
||||||
|
local actors = require("actors")
|
||||||
|
|
||||||
local function initGame()
|
local function initGame()
|
||||||
return {
|
return {
|
||||||
|
|
@ -38,6 +39,8 @@ end
|
||||||
local game = initGame()
|
local game = initGame()
|
||||||
|
|
||||||
local function initState()
|
local function initState()
|
||||||
|
---@diagnostic disable-next-line: redefined-local
|
||||||
|
local actors = actors.buildActors(game)
|
||||||
local asteroids = {
|
local asteroids = {
|
||||||
{
|
{
|
||||||
x = 100,
|
x = 100,
|
||||||
|
|
@ -52,15 +55,8 @@ local function initState()
|
||||||
y = game.height - 100,
|
y = game.height - 100,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, asteroid in ipairs(asteroids) do
|
for i, template in ipairs(asteroids) do
|
||||||
asteroid.angle = love.math.random() * phys.tau
|
asteroids[i] = actors.asteroids.new(template)
|
||||||
asteroid.stage = #game.asteroids.stages
|
|
||||||
local stage = game.asteroids.stages[asteroid.stage]
|
|
||||||
asteroid.speed = stage.speed
|
|
||||||
asteroid.facing = math.random() * phys.tau
|
|
||||||
asteroid.spin = 0.1 + math.random() * 0.1
|
|
||||||
asteroid.radius = stage.radius
|
|
||||||
asteroid.sprite = stage.sprite
|
|
||||||
end
|
end
|
||||||
local joystick = nil
|
local joystick = nil
|
||||||
if love.joystick.getJoystickCount() == 1 then
|
if love.joystick.getJoystickCount() == 1 then
|
||||||
|
|
@ -68,6 +64,7 @@ local function initState()
|
||||||
end
|
end
|
||||||
return {
|
return {
|
||||||
debug = true,
|
debug = true,
|
||||||
|
actors = actors,
|
||||||
ship = {
|
ship = {
|
||||||
x = game.width / 2,
|
x = game.width / 2,
|
||||||
y = game.height / 2,
|
y = game.height / 2,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue