add multiple racers

This commit is contained in:
fnicon 2026-03-23 02:23:59 +09:00
parent c84cf41222
commit 8957b4427c
3 changed files with 58 additions and 1 deletions

View File

@ -65,6 +65,8 @@ function world:load(entity, data)
self.checkpoints = {}
self.is_finish = false
self.show_pov = false
end
function get(s)
@ -199,7 +201,9 @@ function world:draw()
local or_x, or_y = self.data.orientation[1], self.data.orientation[2]
local vx, vy = self.data.orientation[1] * self.data.velocity[1], self.data.orientation[2] * self.data.velocity[1]
test.set_sphere(x, y, vx, vy)
if (self.show_pov) then
test.set_sphere(x, y, vx, vy)
end
end
local function draw_time_attack(x, y, r, g, b, to_debug)

View File

@ -37,6 +37,40 @@ return {
}
}
},
{
components = {
racer = require("love_src.src.new.world.race.components.racer"),
actor = require("love_src.src.new.world.race.components.actor"),
},
type = "racer",
name = "racer 2",
data = {
racer = {
pos = vm.vec2(44.64, 10.87),
orientation = vm.vec2(1.0, 0.0),
orientation_speed = 0.0,
min_orientation_speed = -1.0,
max_orientation_speed = 1.0,
velocity = vm.vec2(0.0, 0.0),
max_speed = 0.3,
min_speed = -0.3,
inertia = vm.vec2(0.0, 0.0),
accel = 0.1,
brake = 0.1,
grip = 0.1,
steer = 0.01,
mass = 0.1,
streamline = 0.1
},
actor = {
forward = 0.0,
steer = 0.0,
}
}
},
{
components = {
map = require"love_src.src.new.world.race.components.map"

View File

@ -1,5 +1,6 @@
local sfx = require"love_src.wrapper.lappy.new.source".obj
local vm = require"lib.vornmath"
local get_loop = require"love_src.src.system.animation".get_loop
local main_wrapper = require "love_src.wrapper.lappy.world"
---@class wrappers.Concord.world : lappy.world
@ -109,6 +110,8 @@ function world:setup()
local countdown
local checkpoints
self.world_state = {}
self.racers = {}
self.pov_index = 1
for _, d in pairs(self.entities_data) do
local e = {
type = d.type,
@ -128,6 +131,11 @@ function world:setup()
countdown = e
elseif e.type == "checkpoints" then
checkpoints = e
elseif e.type == "racer" then
table.insert(self.racers, e)
if (e.components.actor.name == "player") then
e.components.racer.show_pov = true
end
end
end
for _, e in ipairs(self.entities) do
@ -168,6 +176,8 @@ local phases = {
local phase = "intro"
local x_is_down = false
function world:update(dt)
for _, e in ipairs(self.entities) do
for t, c in pairs(e.components) do
@ -180,6 +190,15 @@ function world:update(dt)
phases[phase].is_played = true
end
end
if (love.keyboard.isDown("x") and not x_is_down) then
self.racers[self.pov_index].components.racer.show_pov = false
self.pov_index = get_loop(self.pov_index + 1, #self.racers)
self.racers[self.pov_index].components.racer.show_pov = true
x_is_down = true
elseif (not love.keyboard.isDown("x") and x_is_down == true) then
x_is_down = false
end
end
function world:draw()