guns4d-cd2025/classes/Physics_system.lua
2024-12-19 20:35:56 -08:00

50 lines
1.5 KiB
Lua

local physics_system = leef.class.new_class:inherit({
objects = {}, --table of vectors,
object_pos = vector.new(),
center_of_mass = vector.new(),
object_weight = 1, --weight in kg
forcefields = {}
})
--forcefield def
--[[
{
midline_radius = 0, --midline of attraction/repulsion
deadzone_radius = 1,
border_radius = 0
pos = vec3(),
elastic_constant = 0 --F = e * d^(|e|/e)
}
]]
--calculate delta-velocity of a given forcefield
--@tparam int index of the forcefield
--@treturn deltaV of
local rpos = vector.new()
--not going to optimize this because AHHHHHHHHHH its a lot of vector math
function physics_system:update(dt)
end
function physics_system:calculate_dv(dt, i)
local pos =
local field = self.forcefields[i]
local borderR = field.border_radius
local deadzoneR = field.deadzone_radius
local midlineR = field.midline_radius
local fpos = field.pos
--rpos.x, rpos.y, rpos.z = pos.x-fpos.x,pos.y-fpos.y,pos.z-fpos.x
rpos = pos-fpos --relative pos
local midline_intersect = rpos:normalize()*midlineR --dir*r is the intersect with midline
local d=(midline_intersect-pos):length() --distance from midline
local e= field.elastic_constant
local f = e*d^(math.abs(e)/e) --force
--local a = f/self.object_weight --acceleration
return a*dt --change in velocity
end