1#include "Game/Map/CollisionCode.hpp"
3#include "Game/Util/HashUtil.hpp"
5CollisionCode::CollisionCode()
6 : mFloorTable(0), mWallTable(0), mSoundTable(0), mCameraTable(0) {
14CodeTable::CodeTable(u32 maxNum) {
15 mMaxNumCodes = maxNum;
17 mHashCodes =
new u32[maxNum];
19 mNames =
new const char*[maxNum];
22void CodeTable::add(
const char *pName, u32 num) {
23 mHashCodes[mNumCodes] = MR::getHashCode(pName);
25 mNames[mNumCodes] = pName;
29const char* CollisionCode::getFloorCodeString(
const Triangle &rTriangle) {
32 u32 code = getCode(iter, mFloorTable,
"Floor_code");
33 return mFloorTable->getString(code);
36const char* CodeTable::getString(u32 val) {
37 for (s32 i = 0; i < mNumCodes; i++) {
46const char* CollisionCode::getWallCodeString(
const Triangle &rTriangle) {
49 u32 code = getCode(iter, mWallTable,
"Wall_code");
50 return mWallTable->getString(code);
53const char* CollisionCode::getSoundCodeString(
const Triangle &rTriangle) {
55 return getSoundCodeString(iter);
58const char* CollisionCode::getSoundCodeString(
const JMapInfoIter &rIter) {
59 if (!rIter.isValid()) {
63 if (rIter.mInfo->getValueType(
"Sound_code") == 0) {
66 bool ret = rIter.getValue<u32>(
"Sound_code", &code);
69 return mSoundTable->getString(code);
75 bool ret = rIter.getValue<
const char*>(
"Sound_code", &code);
85u32 CollisionCode::getCameraID(
const Triangle &rTriangle) {
87 return getCameraID(iter);
91 if (!rIter.isValid()) {
95 if (rIter.mInfo->getValueType(pName) == 0) {
98 bool ret = rIter.getValue<u32>(pName, &code);
105 const char* code = 0;
107 bool ret = rIter.getValue<
const char*>(pName, &code);
111 u32 hash = MR::getHashCode(code);
113 for (s32 i = 0; i < pCodeTable->mNumCodes; i++) {
114 if (hash == pCodeTable->mHashCodes[i]) {
115 ret_code = pCodeTable->_C[i];
127void CollisionCode::createFloorTable() {
130 mFloorTable->add(
"Normal", 0);
131 mFloorTable->add(
"Death", 1);
132 mFloorTable->add(
"Slip", 2);
133 mFloorTable->add(
"NoSlip", 3);
134 mFloorTable->add(
"DamageNormal", 4);
135 mFloorTable->add(
"Ice", 5);
136 mFloorTable->add(
"JumpLow", 6);
137 mFloorTable->add(
"JumpMiddle", 7);
138 mFloorTable->add(
"JumpHigh", 8);
139 mFloorTable->add(
"Slider", 9);
140 mFloorTable->add(
"DamageFire", 0xA);
141 mFloorTable->add(
"JumpNormal", 0xB);
142 mFloorTable->add(
"FireDance", 0xC);
143 mFloorTable->add(
"Sand", 0xD);
144 mFloorTable->add(
"Glass", 0xE);
145 mFloorTable->add(
"DamageElectric", 0xF);
146 mFloorTable->add(
"PullBack", 0x10);
147 mFloorTable->add(
"Sink", 0x11);
148 mFloorTable->add(
"SinkPoison", 0x12);
149 mFloorTable->add(
"Slide", 0x13);
150 mFloorTable->add(
"WaterBottomH", 0x14);
151 mFloorTable->add(
"WaterBottomM", 0x15);
152 mFloorTable->add(
"WaterBottomL", 0x16);
153 mFloorTable->add(
"Wet", 0x17);
154 mFloorTable->add(
"Needle", 0x18);
155 mFloorTable->add(
"SinkDeath", 0x19);
156 mFloorTable->add(
"Snow", 0x1A);
157 mFloorTable->add(
"RailMove", 0x1B);
158 mFloorTable->add(
"AreaMove", 0x1C);
159 mFloorTable->add(
"Press", 0x1D);
160 mFloorTable->add(
"NoStampSand", 0x1E);
161 mFloorTable->add(
"SinkDeathMud", 0x1F);
162 mFloorTable->add(
"Brake", 0x20);
163 mFloorTable->add(
"GlassIce", 0x21);
164 mFloorTable->add(
"JumpParasol", 0x22);
167void CollisionCode::createWallTable() {
170 mWallTable->add(
"Normal", 0);
171 mWallTable->add(
"NotWallJump", 1);
172 mWallTable->add(
"NotWallSlip", 2);
173 mWallTable->add(
"NotGrab", 3);
174 mWallTable->add(
"GhostThroughCode", 4);
175 mWallTable->add(
"NotSideStep", 5);
176 mWallTable->add(
"Rebound", 6);
177 mWallTable->add(
"Fur", 7);
178 mWallTable->add(
"NoAction", 8);
181void CollisionCode::createSoundTable() {
184 mSoundTable->add(
"nullptr", 0);
185 mSoundTable->add(
"Soil", 1);
186 mSoundTable->add(
"Lawn", 2);
187 mSoundTable->add(
"Stone", 3);
188 mSoundTable->add(
"Marble", 4);
189 mSoundTable->add(
"WoodThick", 5);
190 mSoundTable->add(
"WoodThin", 6);
191 mSoundTable->add(
"Metal", 7);
192 mSoundTable->add(
"Snow", 8);
193 mSoundTable->add(
"Ice", 9);
194 mSoundTable->add(
"Shallow", 0xA);
195 mSoundTable->add(
"Sand", 0xB);
196 mSoundTable->add(
"Beach", 0xC);
197 mSoundTable->add(
"Carpet", 0xD);
198 mSoundTable->add(
"Mud", 0xE);
199 mSoundTable->add(
"Honey", 0xF);
202void CollisionCode::createCameraTable() {
205 mCameraTable->add(
"NoThrough", 0);
206 mCameraTable->add(
"Through", 1);
209u32 CollisionCode::getFloorCode(
const JMapInfoIter &rIter) {
210 return getCode(rIter, mFloorTable,
"Floor_code");
213u32 CollisionCode::getWallCode(
const JMapInfoIter &rIter) {
214 return getCode(rIter, mWallTable,
"Wall_code");
217u32 CollisionCode::getSoundCode(
const JMapInfoIter &rIter) {
218 return getCode(rIter, mSoundTable,
"Sound_code");
221u32 CollisionCode::getCameraCode(
const JMapInfoIter &rIter) {
222 return getCode(rIter, mCameraTable,
"Camera_through");
225u32 CollisionCode::getCameraID(
const JMapInfoIter &rIter) {
226 if (!rIter.isValid()) {
231 rIter.getValue<u32>(
"camera_id", &id);