summaryrefslogtreecommitdiff
path: root/src/koopatlas/pathmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/koopatlas/pathmanager.cpp')
-rw-r--r--src/koopatlas/pathmanager.cpp41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index 923d08c..632edfa 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -10,39 +10,57 @@ void dWMPathManager_c::setup() {
pathLayer = dScKoopatlas_c::instance->mapData.pathLayer;
+ SpammyReport("setting up PathManager\n");
SaveBlock *save = GetSaveFile()->GetBlock(-1);
+ mustComplainToMapCreator = false;
+
// Figure out what path node to start at
if (dScKoopatlas_c::instance->settings & 0x10000000) {
// Start off from a "Change"
u8 changeID = dScKoopatlas_c::instance->settings & 0xFF;
+ SpammyReport("entering at Change ID %d\n", changeID);
+ SpammyReport("Path layer: %p\n", pathLayer);
+ SpammyReport("Node count: %d\n", pathLayer->nodeCount);
bool found = false;
for (int i = 0; i < pathLayer->nodeCount; i++) {
dKPNode_s *node = pathLayer->nodes[i];
+ SpammyReport("Checking node: %p\n", node);
if (node->type == dKPNode_s::CHANGE && node->thisID == changeID) {
found = true;
currentNode = node;
- startMovementTo(node->getAnyExit());
+ SpammyReport("a1 Node: %p\n", node);
+ dKPPath_s *exit = node->getAnyExit();
+ SpammyReport("a2 Exit: %p\n", exit);
+ startMovementTo(exit);
+ SpammyReport("a3\n");
+ break;
}
}
if (!found) {
OSReport("Couldn't find target node %d!\n", changeID);
+ currentNode = pathLayer->nodes[0];
+ mustComplainToMapCreator = true;
}
} else {
+ SpammyReport("saved path node: %d\n", save->current_path_node);
if (save->current_path_node >= pathLayer->nodeCount) {
+ SpammyReport("out of bounds (%d), using node 0\n", pathLayer->nodeCount);
currentNode = pathLayer->nodes[0];
} else {
currentNode = pathLayer->nodes[save->current_path_node];
+ SpammyReport("OK %p\n", currentNode);
}
}
// unlock all needed paths
+ SpammyReport("Unlocking paths\n");
for (int i = 0; i < pathLayer->pathCount; i++) {
dKPPath_s *path = pathLayer->paths[i];
@@ -55,6 +73,7 @@ void dWMPathManager_c::setup() {
path->isAvailable = true;
}
}
+ SpammyReport("done\n");
}
@@ -79,25 +98,37 @@ void dWMPathManager_c::execute() {
void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
+ SpammyReport("moving to path %p\n", path);
dWMHud_c::instance->hidePointBar();
+ SpammyReport("point bar hidden\n");
+ SpammyReport("a\n");
isMoving = true;
reverseThroughPath = (path->end == currentNode);
+ SpammyReport("b\n");
currentPath = path;
+ SpammyReport("c\n");
// calculate direction of the path
short deltaX = path->end->x - path->start->x;
short deltaY = path->end->y - path->start->y;
+ SpammyReport("d\n");
u16 direction = (u16)(atan2(deltaX, deltaY) / ((M_PI * 2) / 65536.0));
+ SpammyReport("e\n");
if (reverseThroughPath) {
+ SpammyReport("e2\n");
direction += 0x8000;
}
+ SpammyReport("f\n");
daWMPlayer_c *player = daWMPlayer_c::instance;
+ SpammyReport("g %p\n", player);
player->startAnimation(2, 2.0, 10.0, 0.0);
+ SpammyReport("h\n");
player->rot.y = direction;
+ SpammyReport("i\n");
}
void dWMPathManager_c::moveThroughPath() {
@@ -125,6 +156,8 @@ void dWMPathManager_c::moveThroughPath() {
player->pos.x = to->x;
player->pos.y = -to->y;
+ SpammyReport("reached path end (%p)\n", to);
+
if (to->type == dKPNode_s::CHANGE) {
// Go to another map
isMoving = false;
@@ -132,20 +165,26 @@ void dWMPathManager_c::moveThroughPath() {
SaveBlock *save = GetSaveFile()->GetBlock(-1);
save->current_world = dScKoopatlas_c::instance->getIndexForMapName(to->destMap);
+ SpammyReport("Change to map ID %d (%s), entrance ID %d\n", save->current_world, to->destMap, to->foreignID);
+
DoSceneChange(WORLD_MAP, 0x10000000 | to->foreignID, 0);
} else if (to->type != dKPNode_s::PASS_THROUGH) {
// Stop here
player->startAnimation(0, 1.2, 10.0, 0.0);
+ SpammyReport("stopping here\n");
+
isMoving = false;
SaveBlock *save = GetSaveFile()->GetBlock(-1);
save->current_path_node = pathLayer->findNodeID(to);
dWMHud_c::instance->showPointBar();
+ SpammyReport("Point bar shown\n");
} else {
startMovementTo(to->getOppositeExitTo(currentPath));
+ SpammyReport("passthrough node, continuing to next path\n");
}
}
}