mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 10:34:06 +09:00
That's it for the today, thanks for coding and have a nice day
This commit is contained in:
@@ -719,7 +719,8 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// snap to closest tile
|
// PUSH THE HITBOX INTO THE AIR for a pixel so IT WON'T BE COLLIDING
|
||||||
|
//
|
||||||
// naturally, binarySearch gives you a point like 7584.99999999 (barely not colliding) or
|
// naturally, binarySearch gives you a point like 7584.99999999 (barely not colliding) or
|
||||||
// 7585.000000000 (colliding as fuck), BUT what we want is 7584.00000000 .
|
// 7585.000000000 (colliding as fuck), BUT what we want is 7584.00000000 .
|
||||||
// [Procedure]
|
// [Procedure]
|
||||||
@@ -729,14 +730,34 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
|
|||||||
// 3.1. there's two main cases: "main axis" being X; "main axis" being Y
|
// 3.1. there's two main cases: "main axis" being X; "main axis" being Y
|
||||||
// 3.2. edge cases: (TBA)
|
// 3.2. edge cases: (TBA)
|
||||||
|
|
||||||
// test: assume hitting bottom
|
|
||||||
val vectorSum = externalForce + controllerMoveDelta
|
val vectorSum = externalForce + controllerMoveDelta
|
||||||
|
// --> Y-Axis
|
||||||
if (vectorSum.y > 0.0 && isTouchingSide(simulationHitbox, COLLIDING_BOTTOM)) {
|
if (vectorSum.y > 0.0 && isTouchingSide(simulationHitbox, COLLIDING_BOTTOM)) {
|
||||||
val displacementMainAxis = -1.0
|
val displacementMainAxis = -1.0
|
||||||
val displacementSecondAxis = displacementMainAxis * externalForce.x / externalForce.y
|
val displacementSecondAxis = displacementMainAxis * externalForce.x / externalForce.y
|
||||||
simulationHitbox.translate(displacementSecondAxis, displacementMainAxis)
|
simulationHitbox.translate(displacementSecondAxis, displacementMainAxis)
|
||||||
debug2("dx: $displacementSecondAxis, dy: $displacementMainAxis")
|
debug2("dx: $displacementSecondAxis, dy: $displacementMainAxis")
|
||||||
}
|
}
|
||||||
|
else if (vectorSum.y < 0.0 && isTouchingSide(simulationHitbox, COLLIDING_TOP)) {
|
||||||
|
val displacementMainAxis = 1.0
|
||||||
|
val displacementSecondAxis = displacementMainAxis * externalForce.x / externalForce.y
|
||||||
|
simulationHitbox.translate(displacementSecondAxis, displacementMainAxis)
|
||||||
|
debug2("dx: $displacementSecondAxis, dy: $displacementMainAxis")
|
||||||
|
}
|
||||||
|
// --> X-Axis
|
||||||
|
if (vectorSum.x > 0.0 && isTouchingSide(simulationHitbox, COLLIDING_RIGHT)) {
|
||||||
|
val displacementMainAxis = -1.0
|
||||||
|
val displacementSecondAxis = displacementMainAxis * externalForce.y / externalForce.x
|
||||||
|
simulationHitbox.translate(displacementMainAxis, displacementSecondAxis)
|
||||||
|
debug2("dx: $displacementMainAxis, dy: $displacementSecondAxis")
|
||||||
|
}
|
||||||
|
else if (vectorSum.x < 0.0 && isTouchingSide(simulationHitbox, COLLIDING_LEFT)) {
|
||||||
|
val displacementMainAxis = 1.0
|
||||||
|
val displacementSecondAxis = displacementMainAxis * externalForce.y / externalForce.x
|
||||||
|
simulationHitbox.translate(displacementMainAxis, displacementSecondAxis)
|
||||||
|
debug2("dx: $displacementMainAxis, dy: $displacementSecondAxis")
|
||||||
|
}
|
||||||
|
// FIXME self-driven wall embed-ment is still a thing; block X movement when controllerMoveDelta hits the wall
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -866,11 +887,11 @@ open class ActorWithPhysics(renderOrder: RenderOrder, val immobileBody: Boolean
|
|||||||
/*
|
/*
|
||||||
The structure:
|
The structure:
|
||||||
|
|
||||||
###### // TOP
|
####### // TOP
|
||||||
| |
|
= CASIO =
|
||||||
| |
|
= sat =
|
||||||
| |
|
= 10:08 =
|
||||||
###### // BOTTOM
|
####### // BOTTOM
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// detectors are inside of the bounding box
|
// detectors are inside of the bounding box
|
||||||
|
|||||||
Reference in New Issue
Block a user