/* * Newer Super Mario Bros. Wii * World Maps * * Wish me luck. That's all I'm saying. --Treeki * Started: 03/06/2010; 11:52pm */ // TODO: add Save Error state #ifndef __NEWER_WORLDMAP_H #define __NEWER_WORLDMAP_H #define WM_DEBUGGING //#define WM_SPAMMY_DEBUGGING #include #include #include #include #include "fileload.h" #include "levelinfo.h" #include "worldmapdata.h" #include "wmresourcemng.h" #include "wm_map.h" enum WMDirection { LEFT, RIGHT, UP, DOWN }; #ifdef WM_DEBUGGING #define MapReport OSReport #else inline void MapReport(const char *str, ...) { } #endif #ifdef WM_SPAMMY_DEBUGGING #define SpammyReport OSReport #else inline void SpammyReport(const char *str, ...) { } #endif void NewerMapDrawFunc(); // Replacing some process IDs #define WM_HUD WM_ANTLION #define WM_PATH_MANAGER WM_ANTLION_MNG class dWMHud_c : public dBase_c { public: dWMHud_c(); int onCreate(); int onDelete(); int onExecute(); int onDraw(); bool layoutLoaded; m2d::EmbedLayout_c layout; void updateText(); void showPointBar(); void hidePointBar(); void setPointName(); static dWMHud_c *build(); static dWMHud_c *instance; private: bool isPointBarShown; }; #define EVENT_COUNT 512 class dWMPathManager_c : public dBase_c { public: dWMPathManager_c(); int onCreate(); int onDelete(); int onExecute(); int onDraw(); dWMPathData_c pathData; /* Paths */ struct pathFadeInfo { char *materialName; u16 currentAlpha; u16 framesRemaining; int delta; }; mDynArray_c fadingPaths; void setInitialPathVisibility(); /* Event Data - 512 events should be more than enough for everyone */ mDynArray_c newlyActivatedEvents; bool events[EVENT_COUNT]; void computeEvents(); /* Movement Data/Methods */ bool isMoving; WMPathPoint *currentPoint; WMPathPoint *nextPoint; WMPathDef *currentPath; WMPathSegment *currentSegment; int currentSegmentID; bool reverseThroughPath; // direction we are going through the path void startMovementTo(WMDirection direction); void moveToSegment(int id); void moveThroughPath(); bool canUseEntrance(WMPathEntrance &entrance); /* Other Methods */ void setup(); void activatePoint(); /* Process Housekeeping */ static dWMPathManager_c *build(); static dWMPathManager_c *instance; }; class dWorldCamera_c : public dBase_c { public: int onCreate(); int onDelete(); int onExecute(); int onDraw(); Point3d camPos; Vec camRotate; float camDist; float targetDist; float camY; float targetY; static dWorldCamera_c *build(); static dWorldCamera_c *instance; }; class daWMPlayer_c : public dActor_c { public: dPlayerModelHandler_c *modelHandler; int onCreate(); int onDelete(); int onExecute(); int onDraw(); int current_param; int currentAnim; float currentFrame; float currentUnk; float currentUpdateRate; void startAnimation(int id, float frame, float unk, float updateRate); static daWMPlayer_c *build(); static daWMPlayer_c *instance; }; // WORLD MAP CLASS LAYOUT class dScNewerWorldMap_c : public dScene_c { public: dScNewerWorldMap_c(); FunctionChain initChain; int state; void *csMenu; void *selectCursor; void *numPeopleChange; void *yesNoWindow; void *continueObj; void *stockItem; void *stockItemShadow; void *easyPairing; File levelInfoFile; LevelInfo levelInfo; dWMResourceMng_c resMng; daWMPlayer_c *player; dWMMap_c *map; dWMHud_c *hud; dWMPathManager_c *pathManager; void startLevel(LevelInfo::Entry *entry); bool canDoStuff(); int onCreate(); int onDelete(); int onExecute(); static dScNewerWorldMap_c *build(); static dScNewerWorldMap_c *instance; }; #endif