The Skung Cave commit
This commit is contained in:
@ -2,7 +2,7 @@ import JolkEngine
|
||||
|
||||
protocol Actor
|
||||
{
|
||||
func update(deltaTime: Float, world: Collision)
|
||||
mutating func update(deltaTime: Float, world: Collision)
|
||||
|
||||
var position: Vec3f { get }
|
||||
var transform: Mat4f { get }
|
||||
|
@ -4,22 +4,23 @@ import OpenGL.GL
|
||||
import JolkEngine
|
||||
|
||||
|
||||
class Colin: Actor
|
||||
struct Colin: Actor
|
||||
{
|
||||
var position: Vec3f { _pos }
|
||||
|
||||
mutating func setPosition(_ new: Vec3f) { _pos = new }
|
||||
|
||||
var transform: Mat4f
|
||||
{
|
||||
//.rotate(yaw: angle.x, pitch: angle.y, roll: sin(time)) *
|
||||
//.scale(Vec3f(1.0 + 0.25 * cos(time), 1.0 + 0.25 * sin(time), 1.0)) *
|
||||
.rotate(yawPitch: angle) * .translate(-position - Vec3f(0, 1, 0))
|
||||
}
|
||||
|
||||
|
||||
var angle: Vec2f { return Vec2f(ofsAngle.x + _angle, ofsAngle.y) }
|
||||
mutating func setAngle(_ new: Vec2f) { _angle = new.x; ofsAngle = .init(0.0, new.y) }
|
||||
var fov: Float { return _fov }
|
||||
|
||||
private var time: Float = 0.0
|
||||
//private var jumpVel: Float = 0.0
|
||||
private var velocity: Vec3f = .zero
|
||||
private var _pos: Vec3f = .zero
|
||||
private var _pos2D: Vec2f { get { Vec2f(_pos.x, _pos.z) } set(new) { _pos.x = new.x; _pos.z = new.y } }
|
||||
@ -27,13 +28,11 @@ class Colin: Actor
|
||||
private var ofsAngle: Vec2f = .zero
|
||||
private var _fov: Float = 60.0
|
||||
|
||||
private var nutted = false
|
||||
private var colinMode = false
|
||||
private var backPressed = false
|
||||
|
||||
private let colinWidth: Float = 0.2
|
||||
|
||||
private func move2D(new: Vec2f, edges: [Collision.Edge])
|
||||
private mutating func move2D(new: Vec2f, edges: [Collision.Edge])
|
||||
{
|
||||
let velocity = new - _pos2D
|
||||
var lastPos = _pos2D
|
||||
@ -79,7 +78,7 @@ class Colin: Actor
|
||||
}
|
||||
}
|
||||
|
||||
private func response3D(plainPos o: Vec3f, plainNorm n: Vec3f)
|
||||
private mutating func response3D(plainPos o: Vec3f, plainNorm n: Vec3f)
|
||||
{
|
||||
let height: Float = 1.12
|
||||
//let diff = _pos - lastPos
|
||||
@ -97,7 +96,7 @@ class Colin: Actor
|
||||
}
|
||||
}
|
||||
|
||||
private func move3D(_ deltaTime: Float, world: Collision)
|
||||
private mutating func move3D(_ deltaTime: Float, world: Collision)
|
||||
{
|
||||
var lastPos = _pos
|
||||
_pos += velocity * deltaTime
|
||||
@ -169,91 +168,73 @@ class Colin: Actor
|
||||
}
|
||||
}
|
||||
|
||||
func update(deltaTime: Float, world: Collision)
|
||||
mutating func update(deltaTime: Float, world: Collision)
|
||||
{
|
||||
time += deltaTime
|
||||
|
||||
let axisRescale = 1.0 / Float(INT16_MAX)
|
||||
let getAxis = { (axis: SDL_GameControllerAxis) in
|
||||
Float(SDL_GameControllerGetAxis(sdlPad, axis)) * axisRescale }
|
||||
let getButton = { (btn: SDL_GameControllerButton) in
|
||||
SDL_GameControllerGetButton(sdlPad, btn) == SDL_PRESSED }
|
||||
let pad = GamePad.current?.state
|
||||
|
||||
let stick = Vec2f(
|
||||
getAxis(SDL_CONTROLLER_AXIS_LEFTX),
|
||||
getAxis(SDL_CONTROLLER_AXIS_LEFTY))
|
||||
.cardinalDeadzone(min: 0.1, max: 1)
|
||||
let stick = pad?.leftStick.cardinalDeadzone(min: 0.1, max: 1)
|
||||
|
||||
let turnSpeed = Float.pi * 2 * 0.1
|
||||
if Input.instance.keyDown(.left)
|
||||
let turnSpeed = Float.pi * 2 * 0.2
|
||||
if Input.instance.keyboard.keyDown(.left)
|
||||
{
|
||||
_angle -= turnSpeed * deltaTime
|
||||
}
|
||||
if Input.instance.keyDown(.right)
|
||||
if Input.instance.keyboard.keyDown(.right)
|
||||
{
|
||||
_angle += turnSpeed * deltaTime
|
||||
}
|
||||
if stick != .zero
|
||||
if let stick = stick
|
||||
{
|
||||
_angle += stick.x * 2.0 * turnSpeed * deltaTime
|
||||
}
|
||||
|
||||
var moveVec: Vec2f = .zero
|
||||
|
||||
let speed: Float = 2
|
||||
let speed: Float = 4
|
||||
let forward = Vec2f(sin(self._angle), -cos(self._angle))
|
||||
if Input.instance.keyDown(.up)
|
||||
if Input.instance.keyboard.keyDown(.up)
|
||||
{
|
||||
moveVec += forward * speed
|
||||
}
|
||||
if Input.instance.keyDown(.down)
|
||||
if Input.instance.keyboard.keyDown(.down)
|
||||
{
|
||||
moveVec -= forward * speed
|
||||
}
|
||||
if stick != .zero
|
||||
if let stick = stick
|
||||
{
|
||||
moveVec -= forward * stick.y * speed
|
||||
}
|
||||
|
||||
if Input.instance.keyDown(.c)
|
||||
if Input.instance.keyboard.keyDown(.c)
|
||||
{
|
||||
colinMode = !colinMode
|
||||
}
|
||||
|
||||
let lookCone = Float.pi / 2.0
|
||||
let dst = Vec2f(
|
||||
getAxis(SDL_CONTROLLER_AXIS_RIGHTX),
|
||||
getAxis(SDL_CONTROLLER_AXIS_RIGHTY))
|
||||
.radialDeadzone(min: 0.1, max: 1) * lookCone
|
||||
ofsAngle = ofsAngle.lerp(dst, 16 * deltaTime)
|
||||
let dst = pad?.rightStick.radialDeadzone(min: 0.1, max: 1) ?? .zero
|
||||
ofsAngle = ofsAngle.lerp(dst * lookCone, 16 * deltaTime)
|
||||
|
||||
let targetFov = Float.lerp(60, 20, getAxis(SDL_CONTROLLER_AXIS_TRIGGERRIGHT))
|
||||
let targetFov = Float.lerp(60, 20, pad?.axis(.rightTrigger) ?? .zero)
|
||||
_fov = Float.lerp(_fov, targetFov, 20 * deltaTime)
|
||||
|
||||
let right = Vec2f(cos(self._angle), sin(self._angle))
|
||||
if getButton(SDL_CONTROLLER_BUTTON_LEFTSHOULDER)
|
||||
if let pad = pad
|
||||
{
|
||||
moveVec -= right * speed
|
||||
}
|
||||
if getButton(SDL_CONTROLLER_BUTTON_RIGHTSHOULDER)
|
||||
{
|
||||
moveVec += right * speed
|
||||
let right = Vec2f(cos(self._angle), sin(self._angle))
|
||||
if pad.down(.leftBumper) { moveVec -= right * speed }
|
||||
if pad.down(.rightBumper) { moveVec += right * speed }
|
||||
if pad.pressed(.select) { colinMode = !colinMode }
|
||||
}
|
||||
|
||||
let back = getButton(SDL_CONTROLLER_BUTTON_BACK)
|
||||
if !backPressed && back { colinMode = !colinMode }
|
||||
backPressed = back
|
||||
|
||||
if getButton(SDL_CONTROLLER_BUTTON_A) || Input.instance.keyDown(.n)
|
||||
if pad?.pressed(.south) ?? false || Input.instance.keyboard.keyDown(.n)
|
||||
{
|
||||
// play nut.wav
|
||||
nutted = true
|
||||
}
|
||||
else { nutted = false }
|
||||
|
||||
//move2D(new: _pos2D + velocity, edges: edges)
|
||||
|
||||
if Input.instance.keyDown(.z) || getButton(SDL_CONTROLLER_BUTTON_B) { velocity.y = 2.0 }
|
||||
if Input.instance.keyboard.keyDown(.z) || pad?.down(.east) ?? false { velocity.y = 2.0 }
|
||||
//_pos.y += jumpVel * deltaTime
|
||||
//if _pos.y > 0.0 { jumpVel -= 5.4 * deltaTime }
|
||||
velocity.y -= 5.4 * deltaTime
|
||||
|
@ -3,7 +3,7 @@ import simd
|
||||
import JolkEngine
|
||||
|
||||
|
||||
class JolkCube: Actor
|
||||
struct JolkCube: Actor
|
||||
{
|
||||
private var _pos: Vec3f
|
||||
private var theta: Float = 0.0
|
||||
@ -15,7 +15,7 @@ class JolkCube: Actor
|
||||
|
||||
var position: Vec3f { _pos }
|
||||
|
||||
func update(deltaTime: Float, world: Collision)
|
||||
mutating func update(deltaTime: Float, world: Collision)
|
||||
{
|
||||
theta += 15 * deltaTime
|
||||
_pos.y = 1 + sin(theta * 0.25) * 0.25
|
||||
|
Reference in New Issue
Block a user