This commit is contained in:
Aria 2025-03-21 22:23:30 +11:00
commit 9c94d113d3
Signed by untrusted user who does not match committer: aria
GPG key ID: 19AB7AA462B8AB3B
10260 changed files with 1237388 additions and 0 deletions

View file

@ -0,0 +1,90 @@
require "/scripts/vec2.lua"
function init()
self.aimAndDir = table.pack(activeItem.aimAngleAndDirection(-1, activeItem.ownerAimPosition()))
idle()
end
function uninit()
mcontroller.setRotation(0)
end
function update(dt, fireMode, shiftHeld)
if self.state == "idle" then
self.aimAndDir = table.pack(activeItem.aimAngleAndDirection(-1, activeItem.ownerAimPosition()))
activeItem.setArmAngle(self.aimAndDir[1])
activeItem.setFacingDirection(self.aimAndDir[2])
if fireMode == "primary" then
windup()
end
end
if self.state == "windup" then
self.stateTimer = math.max(0, self.stateTimer - dt)
if self.stateTimer == 0 then
flyout()
end
end
if self.state == "flyout" then
self.stateTimer = math.max(0, self.stateTimer - dt)
if (self.stateTimer > 0 or not mcontroller.isColliding()) and vec2.mag(mcontroller.velocity()) > 0.1 then
mcontroller.controlParameters({
gravityEnabled=false,
collisionPoly=config.getParameter("flyCollisionPoly"),
standingPoly=config.getParameter("flyCollisionPoly"),
crouchingPoly=config.getParameter("flyCollisionPoly")
})
mcontroller.controlModifiers({movementSuppressed=true})
mcontroller.controlApproachVelocity({0, 0}, config.getParameter("controlForce"))
self.rotation = self.rotation - config.getParameter("spinRate") * dt * self.aimAndDir[2]
mcontroller.setRotation(self.rotation)
else
flyback()
end
end
if self.state == "flyback" then
if world.magnitude(mcontroller.position(), self.returnPosition) > config.getParameter("snapDistance") then
mcontroller.controlParameters({gravityEnabled=false,collisionEnabled=false})
mcontroller.controlModifiers({movementSuppressed=true})
local toTargetVelocity = vec2.mul(vec2.norm(world.distance(self.returnPosition, mcontroller.position())), config.getParameter("flySpeed"))
mcontroller.controlApproachVelocity(toTargetVelocity, config.getParameter("controlForce"))
self.rotation = self.rotation - config.getParameter("spinRate") * dt * self.aimAndDir[2]
mcontroller.setRotation(self.rotation)
else
mcontroller.setVelocity({0, 0})
idle()
end
end
end
function idle()
self.state = "idle"
self.rotation = 0
mcontroller.setRotation(self.rotation)
activeItem.setTwoHandedGrip(false)
end
function windup()
self.state = "windup"
self.stateTimer = config.getParameter("windupTime")
activeItem.setArmAngle(self.aimAndDir[1] + 1.2)
end
function flyout()
self.state = "flyout"
self.stateTimer = config.getParameter("minFlyTime")
self.returnPosition = mcontroller.position()
local toTargetVelocity = vec2.rotate({config.getParameter("flySpeed"), 0}, self.aimAndDir[1])
toTargetVelocity[1] = toTargetVelocity[1] * self.aimAndDir[2]
mcontroller.setVelocity(toTargetVelocity)
activeItem.setTwoHandedGrip(true)
activeItem.setArmAngle(0)
end
function flyback()
self.state = "flyback"
activeItem.setTwoHandedGrip(true)
mcontroller.setVelocity(vec2.mul(mcontroller.velocity(), -1))
end