mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
Fix portal being placed outside of surfaces
This commit is contained in:
parent
45e0ba4176
commit
a42f8d154c
|
@ -247,7 +247,7 @@ static void gameProc(void* arg) {
|
|||
|
||||
savefileLoad();
|
||||
|
||||
levelLoadWithCallbacks(INTRO_MENU);
|
||||
levelLoadWithCallbacks(1);
|
||||
gCurrentTestSubject = 0;
|
||||
cutsceneRunnerReset();
|
||||
controllersInit();
|
||||
|
|
|
@ -272,7 +272,8 @@ int portalSurfaceAdjustPosition(struct PortalSurface* surface, struct Transform*
|
|||
|
||||
for (iteration = 0; iteration < MAX_POS_ADJUST_ITERATIONS; ++iteration) {
|
||||
int minOverlap = PORTAL_SURFACE_OVERLAP;
|
||||
struct Vector2s16 minOverlapOffset;
|
||||
int minIsOutside = 0;
|
||||
struct Vector2s16 minOverlapOffset = {{{0, 0}}};
|
||||
|
||||
struct Vector2s16 portalMin;
|
||||
portalMin.x = output->x - halfSize.x;
|
||||
|
@ -310,40 +311,49 @@ int portalSurfaceAdjustPosition(struct PortalSurface* surface, struct Transform*
|
|||
vector2s16Sub(&b, &a, &edgeDir);
|
||||
|
||||
struct Vector2s16 offset;
|
||||
int distance = edgeDir.y >= 0 ? portalMax.x - edgeMin.x : PORTAL_SURFACE_OVERLAP;
|
||||
int distance = portalMax.x - edgeMin.x;
|
||||
int isOutside = edgeDir.y < 0;
|
||||
offset.x = -distance;
|
||||
offset.y = 0;
|
||||
|
||||
int distanceCheck = edgeMax.x - portalMin.x;
|
||||
|
||||
if (distanceCheck < distance && edgeDir.y <= 0) {
|
||||
if (distanceCheck < distance) {
|
||||
distance = distanceCheck;
|
||||
offset.x = distance;
|
||||
offset.y = 0;
|
||||
isOutside = edgeDir.y > 0;
|
||||
}
|
||||
|
||||
distanceCheck = portalMax.y - edgeMin.y;
|
||||
|
||||
if (distanceCheck < distance && edgeDir.x <= 0) {
|
||||
if (distanceCheck < distance) {
|
||||
distance = distanceCheck;
|
||||
offset.x = 0;
|
||||
offset.y = -distance;
|
||||
isOutside = edgeDir.x > 0;
|
||||
}
|
||||
|
||||
distanceCheck = edgeMax.y - portalMin.y;
|
||||
|
||||
if (distanceCheck < distance && edgeDir.x >= 0) {
|
||||
if (distanceCheck < distance) {
|
||||
distance = distanceCheck;
|
||||
offset.x = 0;
|
||||
offset.y = distance;
|
||||
isOutside = edgeDir.x < 0;
|
||||
}
|
||||
|
||||
if (distance < minOverlap) {
|
||||
minOverlap = distance;
|
||||
minIsOutside = isOutside;
|
||||
minOverlapOffset = offset;
|
||||
}
|
||||
}
|
||||
|
||||
if (minIsOutside) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (minOverlap == PORTAL_SURFACE_OVERLAP) {
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue