#include "Game/Camera/Camera.hpp" #include "Game/Camera/CameraAnim.hpp" #include "Game/Camera/CameraBehind.hpp" #include "Game/Camera/CameraBlackHole.hpp" #include "Game/Camera/CameraCharmedFix.hpp" #include "Game/Camera/CameraCharmedTripodBoss.hpp" #include "Game/Camera/CameraCharmedVecReg.hpp" #include "Game/Camera/CameraCharmedVecRegTower.hpp" #include "Game/Camera/CameraCubePlanet.hpp" #include "Game/Camera/CameraDPD.hpp" #include "Game/Camera/CameraDead.hpp" #include "Game/Camera/CameraFix.hpp" #include "Game/Camera/CameraFixedPoint.hpp" #include "Game/Camera/CameraFixedThere.hpp" #include "Game/Camera/CameraFollow.hpp" #include "Game/Camera/CameraFooFighter.hpp" #include "Game/Camera/CameraFooFighterPlanet.hpp" #include "Game/Camera/CameraFrontAndBack.hpp" #include "Game/Camera/CameraGround.hpp" #include "Game/Camera/CameraHolder.hpp" #include "Game/Camera/CameraInnerCylinder.hpp" #include "Game/Camera/CameraInwardSphere.hpp" #include "Game/Camera/CameraInwardTower.hpp" #include "Game/Camera/CameraMedianPlanet.hpp" #include "Game/Camera/CameraMedianTower.hpp" #include "Game/Camera/CameraMtxRegParallel.hpp" #include "Game/Camera/CameraObjParallel.hpp" #include "Game/Camera/CameraParallel.hpp" #include "Game/Camera/CameraRaceFollow.hpp" #include "Game/Camera/CameraRailDemo.hpp" #include "Game/Camera/CameraRailFollow.hpp" #include "Game/Camera/CameraRailWatch.hpp" #include "Game/Camera/CameraSlide.hpp" #include "Game/Camera/CameraSpiral.hpp" #include "Game/Camera/CameraSubjective.hpp" #include "Game/Camera/CameraTalk.hpp" #include "Game/Camera/CameraTower.hpp" #include "Game/Camera/CameraTowerPos.hpp" #include "Game/Camera/CameraTripodBoss.hpp" #include "Game/Camera/CameraTripodBossJoint.hpp" #include "Game/Camera/CameraTripodPlanet.hpp" #include "Game/Camera/CameraTrundle.hpp" #include "Game/Camera/CameraTwistedPassage.hpp" #include "Game/Camera/CameraWaterFollow.hpp" #include "Game/Camera/CameraWaterPlanet.hpp" #include "Game/Camera/CameraWaterPlanetBoss.hpp" #include "Game/Camera/CameraWonderPlanet.hpp" #include struct CameraTableEntry { const char *mName; // 0x0 const char *mJapaneseDescription; // 0x4 Camera* (*mCreateFunction)(void); // 0x8 u8 _C; u8 _D[3]; }; namespace { const char *gDefaultCameraName = "CAM_TYPE_XZ_PARA"; template Camera *createCamera(); template<> Camera *createCamera() { return new CameraParallel("平行カメラ"); } template<> Camera *createCamera() { return new CameraTower("塔カメラ"); } template<> Camera *createCamera() { return new CameraFollow("フォローカメラ"); } template<> Camera *createCamera() { return new CameraWonderPlanet("ワンダープラネットカメラ"); } template<> Camera *createCamera() { return new CameraFix("完全固定カメラ"); } template<> Camera *createCamera() { return new CameraFixedPoint("定点カメラ"); } template<> Camera *createCamera() { return new CameraBehind("後方カメラ"); } template<> Camera *createCamera() { return new CameraInwardTower("塔内部カメラ"); } template<> Camera *createCamera() { return new CameraFixedThere("その場定点カメラ"); } template<> Camera *createCamera() { return new CameraTripodBoss("三脚ボスカメラ"); } template<> Camera *createCamera() { return new CameraTowerPos("塔カメラ(サブターゲット付き)"); } template<> Camera *createCamera() { return new CameraTripodPlanet("三脚惑星カメラ"); } template<> Camera *createCamera() { return new CameraDead("通常死亡カメラ"); } template<> Camera *createCamera() { return new CameraInwardSphere("球内部カメラ"); } template<> Camera *createCamera() { return new CameraRailDemo("レールデモカメラ"); } template<> Camera *createCamera() { return new CameraRailFollow("レールフォローカメラ"); } template<> Camera *createCamera() { return new CameraTripodBossJoint("三脚ボス関節カメラ"); } template<> Camera *createCamera() { return new CameraCharmedTripodBoss("三脚ボスジョイント注視カメラ"); } template<> Camera *createCamera() { return new CameraObjParallel("オブジェ並行カメラ"); } template<> Camera *createCamera() { return new CameraCharmedFix("サンボカメラ"); } template<> Camera *createCamera() { return new CameraGround("地面カメラ"); } template<> Camera *createCamera() { return new CameraTrundle("トランドルカメラ"); } template<> Camera *createCamera() { return new CameraCubePlanet("キューブ惑星カメラ"); } template<> Camera *createCamera() { return new CameraInnerCylinder("CameraInnerCylinder"); } template<> Camera *createCamera() { return new CameraSpiral("螺旋カメラ(デモ用)"); } template<> Camera *createCamera() { return new CameraTalk("会話カメラ"); } template<> Camera *createCamera() { return new CameraMtxRegParallel("マトリクスレジスタ並行カメラ"); } template<> Camera *createCamera() { return new CameraCharmedVecReg("ベクトルレジスタ注目カメラ"); } template<> Camera *createCamera() { return new CameraMedianPlanet("中点注目プラネットカメラ"); } template<> Camera *createCamera() { return new CameraTwistedPassage("ねじれ回廊カメラ"); } template<> Camera *createCamera() { return new CameraMedianTower("中点塔カメラ"); } template<> Camera *createCamera() { return new CameraCharmedVecRegTower("CameraCharmedVecRegTower"); } template<> Camera *createCamera() { return new CameraFrontAndBack("表裏カメラ"); } template<> Camera *createCamera() { return new CameraRaceFollow("CameraRaceFollow"); } template<> Camera *createCamera() { return new CameraSlide("スライドカメラ"); } template<> Camera *createCamera() { return new CameraFooFighter("フーファイター"); } template<> Camera *createCamera() { return new CameraFooFighterPlanet("フーファイタープラネットカメラ"); } template<> Camera *createCamera() { return new CameraBlackHole("ブラックホールカメラ"); } template<> Camera *createCamera() { return new CameraAnim("アニメーションカメラ"); } template<> Camera *createCamera() { return new CameraDPD("DPD操作カメラ"); } template<> Camera *createCamera() { return new CameraWaterFollow("水中フォロー"); } template<> Camera *createCamera() { return new CameraWaterPlanet("水中プラネット"); } template<> Camera *createCamera() { return new CameraWaterPlanetBoss("水中プラネットボス"); } template<> Camera *createCamera() { return new CameraRailWatch("レール注目カメラ"); } template<> Camera *createCamera() { return new CameraSubjective("主観カメラ"); } #define NR_CAMERA_TYPES 45 CameraTableEntry gCameraTable[NR_CAMERA_TYPES] = { { "CAM_TYPE_XZ_PARA", "並行", createCamera, 1 }, { "CAM_TYPE_TOWER", "塔", createCamera, 1 }, { "CAM_TYPE_FOLLOW", "フォロー", createCamera, 1 }, { "CAM_TYPE_WONDER_PLANET", "プラネット", createCamera, 1 }, { "CAM_TYPE_POINT_FIX", "完全固定", createCamera, 1 }, { "CAM_TYPE_EYEPOS_FIX", "定点", createCamera, 1 }, { "CAM_TYPE_SLIDER", "スライダー", createCamera, 1 }, { "CAM_TYPE_INWARD_TOWER", "塔内部", createCamera, 1 }, { "CAM_TYPE_EYEPOS_FIX_THER", "その場定点", createCamera, 1 }, { "CAM_TYPE_TRIPOD_BOSS", "三脚ボス", createCamera, 1 }, { "CAM_TYPE_TOWER_POS", "塔(サブターゲット付き)", createCamera, 1 }, { "CAM_TYPE_TRIPOD_PLANET", "三脚惑星", createCamera, 1 }, { "CAM_TYPE_DEAD", "通常死亡", createCamera, 1 }, { "CAM_TYPE_INWARD_SPHERE", "球内部", createCamera, 1 }, { "CAM_TYPE_RAIL_DEMO", "レールデモ", createCamera, 1 }, { "CAM_TYPE_RAIL_FOLLOW", "レールフォロー", createCamera, 1 }, { "CAM_TYPE_TRIPOD_BOSS_JOINT", "三脚ボスジョイント", createCamera, 1 }, { "CAM_TYPE_CHARMED_TRIPOD_BOSS", "三脚ボスジョイント注視", createCamera, 1 }, { "CAM_TYPE_OBJ_PARALLEL", "オブジェ並行", createCamera, 1 }, { "CAM_TYPE_CHARMED_FIX", "サンボ", createCamera, 1 }, { "CAM_TYPE_GROUND", "地面", createCamera, 1 }, { "CAM_TYPE_TRUNDLE", "トランドル", createCamera, 1 }, { "CAM_TYPE_CUBE_PLANET", "キューブ惑星", createCamera, 1 }, { "CAM_TYPE_INNER_CYLINDER", "円筒内部", createCamera, 1 }, { "CAM_TYPE_SPIRAL_DEMO", "螺旋デモ", createCamera, 1 }, { "CAM_TYPE_TALK", "会話", createCamera, 1 }, { "CAM_TYPE_MTXREG_PARALLEL", "マトリクスレジスタ並行", createCamera, 1 }, { "CAM_TYPE_CHARMED_VECREG", "ベクトルレジスタ注目", createCamera, 1 }, { "CAM_TYPE_MEDIAN_PLANET", "中点注目プラネット", createCamera, 1 }, { "CAM_TYPE_TWISTED_PASSAGE", "ねじれ回廊", createCamera, 1 }, { "CAM_TYPE_MEDIAN_TOWER", "中点塔カメラ", createCamera, 1 }, { "CAM_TYPE_CHARMED_VECREG_TOWER", "VecReg角度補正塔カメラ", createCamera, 1 }, { "CAM_TYPE_FRONT_AND_BACK", "表裏カメラ", createCamera, 1 }, { "CAM_TYPE_RACE_FOLLOW", "レース用フォロー", createCamera, 1 }, { "CAM_TYPE_2D_SLIDE", "2Dスライド", createCamera, 1 }, { "CAM_TYPE_FOO_FIGHTER", "フーファイター", createCamera, 1 }, { "CAM_TYPE_FOO_FIGHTER_PLANET", "フーファイタープラネット", createCamera, 1 }, { "CAM_TYPE_BLACK_HOLE", "ブラックホール", createCamera, 0 }, { "CAM_TYPE_ANIM", "アニメ", createCamera, 0 }, { "CAM_TYPE_DPD", "DPD", createCamera, 1 }, { "CAM_TYPE_WATER_FOLLOW", "水中フォロー", createCamera, 1 }, { "CAM_TYPE_WATER_PLANET", "水中プラネット", createCamera, 1 }, { "CAM_TYPE_WATER_PLANET_BOSS", "水中プラネットボス", createCamera, 1 }, { "CAM_TYPE_RAIL_WATCH", "レール注目", createCamera, 1 }, { "CAM_TYPE_SUBJECTIVE", "主観", createCamera, 1 } }; } CameraHolder::CameraHolder(const char *pName) : NameObj(pName) { createCameras(); mDefaultCameraIndex = getIndexOf(gDefaultCameraName); mDefaultTranslator = mTranslators[mDefaultCameraIndex]; } CameraHolder::~CameraHolder() { } CamTranslatorBase *CameraHolder::getTranslator(long index) { return mTranslators[index]; } s32 CameraHolder::getIndexOf(const char *pName) const { for (s32 i = 0; i < NR_CAMERA_TYPES; i++) { if (strcmp(pName, gCameraTable[i].mName) == 0) { return i; } } return -1; } Camera *CameraHolder::getDefaultCamera() { return mCameras[mDefaultCameraIndex]; } s32 CameraHolder::getIndexOfDefault() const { return mDefaultCameraIndex; } s32 CameraHolder::getIndexOf(Camera *pCamera) const { for (s32 i = 0; i < NR_CAMERA_TYPES; i++) { if (mCameras[i] == pCamera) { return i; } } return -1; } void CameraHolder::createCameras() { mCameras = new Camera *[NR_CAMERA_TYPES]; mTranslators = new CamTranslatorBase *[NR_CAMERA_TYPES]; for (s32 i = 0; i < NR_CAMERA_TYPES; i++) { mCameras[i] = gCameraTable[i].mCreateFunction(); mTranslators[i] = mCameras[i]->createTranslator(); } } Camera *CameraHolder::getCameraInner(long index) const { return mCameras[index]; }