summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/koopatlas/pathmanager.cpp35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index c35ee4a..5acac0c 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -30,6 +30,14 @@ void ResetAllCompletionCandidates() {
CanFinishEverything = false;
}
+int getPressedDir(int buttons) {
+ if (buttons & WPAD_LEFT) return 0;
+ else if (buttons & WPAD_RIGHT) return 1;
+ else if (buttons & WPAD_UP) return 2;
+ else if (buttons & WPAD_DOWN) return 3;
+ return -1;
+}
+
void dWMPathManager_c::setup() {
dScKoopatlas_c *wm = dScKoopatlas_c::instance;
@@ -971,11 +979,7 @@ void dWMPathManager_c::execute() {
int nowPressed = Remocon_GetPressed(GetActiveRemocon());
// Left, right, up, down
- int pressedDir = -1;
- if (nowPressed & WPAD_LEFT) pressedDir = 0;
- else if (nowPressed & WPAD_RIGHT) pressedDir = 1;
- else if (nowPressed & WPAD_UP) pressedDir = 2;
- else if (nowPressed & WPAD_DOWN) pressedDir = 3;
+ int pressedDir = getPressedDir(nowPressed);
if (isMoving) {
moveThroughPath(pressedDir);
@@ -1435,7 +1439,7 @@ void dWMPathManager_c::moveThroughPath(int pressedDir) {
} else if (reallyStop) {
// Stop here
- player->startAnimation(wait_select, 1.2, 10.0, 0.0);
+ bool movingAgain = false;
player->hasEffect = false;
player->hasSound = false;
@@ -1448,6 +1452,25 @@ void dWMPathManager_c::moveThroughPath(int pressedDir) {
save->current_path_node = pathLayer->findNodeID(to);
if (!calledEnteredNode && dWMHud_c::instance)
dWMHud_c::instance->enteredNode();
+
+ // Should we continue here? (Requested by Jason)
+ int held = Remocon_GetButtons(GetActiveRemocon());
+ int pressedDir = getPressedDir(held);
+ if (pressedDir >= 0) {
+ // Use an exit if possible
+ if (canUseExit(currentNode->exits[pressedDir])) {
+ startMovementTo(currentNode->exits[pressedDir]);
+ movingAgain = true;
+ } else {
+ // TODO: maybe remove this? got to see how it looks
+ static u16 directions[] = {-0x4000,0x4000,-0x7FFF,0};
+ daWMPlayer_c::instance->setTargetRotY(directions[pressedDir]);
+ }
+ }
+
+ if (!movingAgain)
+ player->startAnimation(wait_select, 1.2, 10.0, 0.0);
+
} else {
startMovementTo(to->getOppositeAvailableExitTo(currentPath));
SpammyReport("passthrough node, continuing to next path\n");