/project/Naruto_ninja_story/model/ModelNaruto.cpp

http://narutortsproject.googlecode.com/ · C++ · 390 lines · 13 code · 5 blank · 372 comment · 0 complexity · 38543b919aeabd888d8eb651344f2a97 MD5 · raw file

  1. #include "ModelNaruto.h"
  2. #include "Object/Object/Object.h"
  3. #include "Object/Body/Body_physic.h"
  4. ModelNaruto::ModelNaruto()
  5. {
  6. };
  7. ModelNaruto::~ModelNaruto()
  8. {
  9. };
  10. void ModelNaruto::Initialize()
  11. {
  12. Model::Initialize();
  13. /*load("../../data/model/Naruto_03.N3D");
  14. //load("../../data/model/Sasuke.N3D");
  15. AddAnimation(ANI_IDLE, "idle", 10.0*40.0, 100.0*40.0, true);
  16. AddAnimation(ANI_FORWARD, "forward", 110.0*40.0, 126.0*40.0, true);
  17. AddAnimation(ANI_JUMP, "jump", 170.0*40.0, 220.0*40.0, false);
  18. AddAnimation(ANI_PUNCH_01, "punch_01", 225.0*40.0, 237.0*40.0, false);
  19. AddAnimation(ANI_PUNCH_02, "punch_02", 237.0*40.0, 247.0*40.0, false);
  20. AddAnimation(ANI_PUNCH_03, "punch_03", 247.0*40.0, 261.0*40.0, false);
  21. AddAnimation(ANI_PUNCH_04, "punch_04", 261.0*40.0, 278.0*40.0, false);
  22. AddAnimation(ANI_PUNCH_05, "punch_05", 315.0*40.0, 330.0*40.0, false);
  23. AddAnimation(ANI_PUNCH_06, "punch_06", 330.0*40.0, 338.0*40.0, false);
  24. AddAnimation(ANI_PUNCH_07, "punch_07", 338.0*40.0, 355.0*40.0, false);
  25. AddAnimation(ANI_PUNCH_08, "punch_08", 365.0*40.0, 400.0*40.0, false);
  26. AddAnimation(ANI_PUNCH_09, "punch_air_09", 430.0*40.0, 448.0*40.0, false);
  27. AddAnimation(ANI_PUNCH_10, "punch_air_10", 470.0*40.0, 490.0*40.0, false);
  28. AddAnimation(ANI_PAINT_01, "pain_01", 410.0*40.0, 425.0*40.0, false);
  29. //Create physic body
  30. m_base_body = new Body_physic;
  31. float l = 12.0f;
  32. float w = 12.0f;
  33. float h = 35.0f;
  34. float rad_jumper = 10.0f;
  35. float rad_wheel = 6.0f;
  36. float wheel_offset = 1.8f;
  37. //Create base body
  38. dBodyID body = dBodyCreate(m_world);
  39. dMass m;
  40. dMassSetBox(&m, 1.0f, l, w, h);
  41. dBodySetMass(body, &m);
  42. dBodySetMaxAngularSpeed(body, 0.0f);
  43. dGeomID geom = dCreateBox(0, l, w, h);
  44. dGeomSetBody(geom, body);
  45. dSpaceAdd(m_space, geom);
  46. m_base_body->SetPhysicBody(body, geom);
  47. m_base_body->PhBodySetOffset(0.0f, 0.0f, 0.0f);
  48. m_base_body->PhBodySetMatrix();
  49. //m_base_body->DebugContact(true);
  50. Mesh_base* mesh = new Mesh_base;
  51. mesh->CreateBox(l, w, h);
  52. m_base_body->SetMesh(mesh);
  53. m_base_body->SetColorDiffuse(255, 255, 255, 64);
  54. insert_body(m_base_body);
  55. //Create wheel !!
  56. m_body_wheel = new Body_physic;
  57. dBodyID body_wheel = dBodyCreate(m_world);
  58. dMass m_wheel;
  59. dMassSetSphere(&m_wheel, 1.0f, rad_wheel);
  60. dBodySetMass(body_wheel, &m_wheel);
  61. dBodySetMaxAngularSpeed(body_wheel, 1.0f);
  62. dGeomID geom_wheel = dCreateSphere(0, rad_wheel);
  63. dGeomSetBody(geom_wheel, body_wheel);
  64. dSpaceAdd(m_space, geom_wheel);
  65. m_body_wheel->SetPhysicBody(body_wheel, geom_wheel);
  66. m_body_wheel->PhBodySetOffset(0.0f, 0.0f, 0.0f);
  67. m_body_wheel->PhBodySetMatrix();
  68. m_body_wheel_offset.x = 0.0f;
  69. m_body_wheel_offset.y = 0.0f;
  70. m_body_wheel_offset.z = -h/2 - rad_wheel + wheel_offset;
  71. m_body_wheel->PhSetPosition(m_body_wheel_offset.x, m_body_wheel_offset.y, m_body_wheel_offset.z);
  72. //m_body_wheel->DebugContact(true);
  73. //m_body_wheel->SetCfm(0.0001f);
  74. Mesh_base* mesh_wheel = new Mesh_base;
  75. mesh_wheel->CreateSphere(rad_wheel, 16);
  76. m_body_wheel->SetMesh(mesh_wheel);
  77. m_body_wheel->SetColorDiffuse(0, 255, 255, 64);
  78. insert_body(m_body_wheel);
  79. m_joint_ball = dJointCreateBall(m_world, m_joint_group_own);
  80. dJointAttach(m_joint_ball, body_wheel, body);
  81. m_body_wheel->PhExclud(m_base_body);
  82. m_base_body->PhExclud(m_body_wheel);
  83. //dJointSetBallAnchor(joint_ball, 0.0f, 0.0f, 0.0f);
  84. //dJointSetSliderAxis(joint, 0.0f, 0.0f, 1.0f);
  85. //dJointSetSliderParam(joint, dParamFMax, 4000.0);
  86. //dJointSetSliderParam(joint, dParamLoStop, 0.0f);
  87. //dJointSetSliderParam(joint, dParamHiStop, 20.0f);
  88. m_body_right_fist_obj = FindBody("punch_right");
  89. if (m_body_right_fist_obj)
  90. {
  91. m_body_right_fist = new Body_physic;
  92. dBodyID body_right_fist = dBodyCreate(m_world);
  93. dMass m_right_fist;
  94. dMassSetSphere(&m_right_fist, 1.0f, 5.0f);
  95. dBodySetMass(body_right_fist, &m_right_fist);
  96. dBodySetMaxAngularSpeed(body_right_fist, 0.0f);
  97. dGeomID geom_right_fist = dCreateSphere(0, 5.0f);
  98. dGeomSetBody(geom_right_fist, body_right_fist);
  99. dSpaceAdd(m_space, geom_right_fist);
  100. m_body_right_fist->SetPhysicBody(body_right_fist, geom_right_fist);
  101. m_body_right_fist->PhBodySetOffset(0.0f, 0.0f, 0.0f);
  102. m_body_right_fist->PhBodySetMatrix();
  103. float x, y, z;
  104. m_body_right_fist_obj->GetPosition(x, y, z);
  105. m_body_right_fist->PhSetPosition(x, y, z);
  106. m_body_right_fist->DebugContact(true);
  107. m_body_right_fist->ProcessCollision(false);
  108. Mesh_base* mesh_first = new Mesh_base;
  109. mesh_first->CreateSphere(5.0f, 16);
  110. m_body_right_fist->SetMesh(mesh_first);
  111. m_body_right_fist->SetColorDiffuse(0, 255, 0, 64);
  112. m_body_right_fist->SetModel(this);
  113. m_body_right_fist->SetBindAction(&m_punch_action);
  114. insert_body(m_body_right_fist);
  115. };
  116. m_body_left_fist_obj = FindBody("punch_left");
  117. if (m_body_left_fist_obj)
  118. {
  119. m_body_left_fist = new Body_physic;
  120. dBodyID body_left_fist = dBodyCreate(m_world);
  121. dMass m_left_fist;
  122. dMassSetSphere(&m_left_fist, 1.0f, 5.0f);
  123. dBodySetMass(body_left_fist, &m_left_fist);
  124. dBodySetMaxAngularSpeed(body_left_fist, 0.0f);
  125. dGeomID geom_left_fist = dCreateSphere(0, 5.0f);
  126. dGeomSetBody(geom_left_fist, body_left_fist);
  127. dSpaceAdd(m_space, geom_left_fist);
  128. m_body_left_fist->SetPhysicBody(body_left_fist, geom_left_fist);
  129. m_body_left_fist->PhBodySetOffset(0.0f, 0.0f, 0.0f);
  130. m_body_left_fist->PhBodySetMatrix();
  131. float x, y, z;
  132. m_body_left_fist_obj->GetPosition(x, y, z);
  133. m_body_left_fist->PhSetPosition(x, y, z);
  134. m_body_left_fist->DebugContact(true);
  135. m_body_left_fist->ProcessCollision(false);
  136. Mesh_base* mesh_first = new Mesh_base;
  137. mesh_first->CreateSphere(5.0f, 16);
  138. m_body_left_fist->SetMesh(mesh_first);
  139. m_body_left_fist->SetColorDiffuse(0, 255, 0, 64);
  140. m_body_left_fist->SetModel(this);
  141. m_body_left_fist->SetBindAction(&m_punch_action);
  142. insert_body(m_body_left_fist);
  143. };
  144. m_body_left_foot_obj = FindBody("punch_leg_left");
  145. if (m_body_left_foot_obj)
  146. {
  147. m_body_left_foot = new Body_physic;
  148. dBodyID body_left_foot = dBodyCreate(m_world);
  149. dMass m_left_foot;
  150. dMassSetSphere(&m_left_foot, 1.0f, 5.0f);
  151. dBodySetMass(body_left_foot, &m_left_foot);
  152. dBodySetMaxAngularSpeed(body_left_foot, 0.0f);
  153. dGeomID geom_left_foot = dCreateSphere(0, 5.0f);
  154. dGeomSetBody(geom_left_foot, body_left_foot);
  155. dSpaceAdd(m_space, geom_left_foot);
  156. m_body_left_foot->SetPhysicBody(body_left_foot, geom_left_foot);
  157. m_body_left_foot->PhBodySetOffset(0.0f, 0.0f, 0.0f);
  158. m_body_left_foot->PhBodySetMatrix();
  159. float x, y, z;
  160. m_body_left_foot_obj->GetPosition(x, y, z);
  161. m_body_left_foot->PhSetPosition(x, y, z);
  162. m_body_left_foot->DebugContact(true);
  163. m_body_left_foot->ProcessCollision(false);
  164. Mesh_base* mesh_foot = new Mesh_base;
  165. mesh_foot->CreateSphere(5.0f, 16);
  166. m_body_left_foot->SetMesh(mesh_foot);
  167. m_body_left_foot->SetColorDiffuse(0, 255, 0, 64);
  168. m_body_left_foot->SetModel(this);
  169. m_body_left_foot->SetBindAction(&m_punch_action);
  170. insert_body(m_body_left_foot);
  171. };
  172. m_body_right_foot_obj = FindBody("punch_leg_right");
  173. if (m_body_right_foot_obj)
  174. {
  175. m_body_right_foot = new Body_physic;
  176. dBodyID body_right_foot = dBodyCreate(m_world);
  177. dMass m_right_foot;
  178. dMassSetSphere(&m_right_foot, 1.0f, 5.0f);
  179. dBodySetMass(body_right_foot, &m_right_foot);
  180. dBodySetMaxAngularSpeed(body_right_foot, 0.0f);
  181. dGeomID geom_right_foot = dCreateSphere(0, 5.0f);
  182. dGeomSetBody(geom_right_foot, body_right_foot);
  183. dSpaceAdd(m_space, geom_right_foot);
  184. m_body_right_foot->SetPhysicBody(body_right_foot, geom_right_foot);
  185. m_body_right_foot->PhBodySetOffset(0.0f, 0.0f, 0.0f);
  186. m_body_right_foot->PhBodySetMatrix();
  187. float x, y, z;
  188. m_body_right_foot_obj->GetPosition(x, y, z);
  189. m_body_right_foot->PhSetPosition(x, y, z);
  190. m_body_right_foot->DebugContact(true);
  191. m_body_right_foot->ProcessCollision(false);
  192. Mesh_base* mesh_foot = new Mesh_base;
  193. mesh_foot->CreateSphere(5.0f, 16);
  194. m_body_right_foot->SetMesh(mesh_foot);
  195. m_body_right_foot->SetColorDiffuse(0, 255, 0, 64);
  196. m_body_right_foot->SetModel(this);
  197. m_body_right_foot->SetBindAction(&m_punch_action);
  198. insert_body(m_body_right_foot);
  199. };
  200. m_body_wheel->SetModel(this);
  201. m_base_body->SetModel(this);
  202. m_body_wheel->SetIgnoredGroup(m_ignored_group_counter);
  203. m_base_body->SetIgnoredGroup(m_ignored_group_counter);
  204. if (m_body_right_fist)
  205. m_body_right_fist->SetIgnoredGroup(m_ignored_group_counter);
  206. if (m_body_left_fist)
  207. m_body_left_fist->SetIgnoredGroup(m_ignored_group_counter);
  208. if (m_body_left_foot)
  209. m_body_left_foot->SetIgnoredGroup(m_ignored_group_counter);
  210. if (m_body_right_foot)
  211. m_body_right_foot->SetIgnoredGroup(m_ignored_group_counter);
  212. m_ignored_group_counter++;
  213. //|Punches: | hand | lag |
  214. //| ground: | 1 | 2 |
  215. //| run | 3 | 4 |
  216. //| jump | 5 | 6 |
  217. //AddAnimation(ANI_PUNCH_01, "punch_01", 225.0*40.0, 237.0*40.0, false);
  218. double start = 225.0;
  219. double end = 237.0;
  220. if (m_body_left_fist)
  221. InitializePunch(m_body_left_fist->GetId(), 0, -1, 1, ANI_PUNCH_01, Tpoint3f(0.0f, -1.0f, 0.0f), 15, 2,
  222. (end-start)*40.0, (231.0 - start)*40.0, (234.0-start)*40.0, 200.0,
  223. 0.0, (end - start)*40.0, 0.2f, Tpoint3f(0.0f, 0.0f, 0.0f),
  224. (231.0-start)*40.0, SOUND_PUNCH_00, SOUND_SHOUT_00 | SOUND_SHOUT_01, 20);
  225. //AddAnimation(ANI_PUNCH_02, "punch_02", 237.0*40.0, 247.0*40.0, false);
  226. start = 237.0;
  227. end = 247.0;
  228. if (m_body_left_fist)
  229. //InitializePunch(m_body_left_fist->GetId(), 1, 0, 1, ANI_PUNCH_02, Tpoint3f(0.0f, -1.0f, 0.0f), 20, 2, 800.0, 440.0, 720.0, 400.0, 0.0, 600.0, 0.2f, Tpoint3f(0.0f, 0.0f, 0.0f), 560.0, SOUND_PUNCH_01, SOUND_SHOUT_00 | SOUND_SHOUT_01, 30);
  230. InitializePunch(m_body_left_fist->GetId(), 1, 0, 1, ANI_PUNCH_02, Tpoint3f(0.0f, -1.0f, 0.0f), 20, 2,
  231. (end-start)*40.0, (244.0 - start)*40.0, (248.0-start)*40.0, 200.0,
  232. 0.0, (end - start)*40.0, 0.2f, Tpoint3f(0.0f, 0.0f, 0.0f),
  233. (245.0-start)*40.0, SOUND_PUNCH_01, SOUND_SHOUT_00 | SOUND_SHOUT_01, 30);
  234. //AddAnimation(ANI_PUNCH_03, "punch_03", 247.0*40.0, 261.0*40.0, false);
  235. start = 247.0;
  236. end = 261.0;
  237. if (m_body_right_fist)
  238. //InitializePunch(m_body_right_fist->GetId(), 2, 1, 1, ANI_PUNCH_03, Tpoint3f(1.0f, 0.0f, 0.0f), 25, 2, 800.0, 440.0, 750.0, 400.0, 360.0, 800.0, 0.15f, Tpoint3f(0.0f, 0.0f, 0.0f), 520.0, SOUND_PUNCH_02, SOUND_SHOUT_00 | SOUND_SHOUT_01 | SOUND_SHOUT_02, 80);
  239. InitializePunch(m_body_right_fist->GetId(), 2, 1, 1, ANI_PUNCH_03, Tpoint3f(1.0f, 0.0f, 0.0f), 25, 2,
  240. (end-start)*40.0, (255.0 - start)*40.0, (260.0-start)*40.0, 200.0,
  241. (254.0 - start)*40.0, (end - start)*40.0, 0.15f, Tpoint3f(0.0f, 0.0f, 0.0f),
  242. (257.0-start)*40.0, SOUND_PUNCH_02, SOUND_SHOUT_00 | SOUND_SHOUT_01 | SOUND_SHOUT_02, 80);
  243. //AddAnimation(ANI_PUNCH_04, "punch_04", 261.0*40.0, 278.0*40.0, false);
  244. start = 261.0;
  245. end = 278.0;
  246. if (m_body_left_foot)
  247. //InitializePunch(m_body_left_foot->GetId(), 3, 2, 2, ANI_PUNCH_04, Tpoint3f(0.0f, -1.0f, 0.5f), 30, 5, 1000.0, 400.0, 720.0, 1000.0, 200.0, 600.0, 1.0f, Tpoint3f(0.0f, 0.0f, 0.0f), 350.0, SOUND_PUNCH_03, SOUND_SHOUT_03, 100);
  248. InitializePunch(m_body_left_foot->GetId(), 3, 2, 2, ANI_PUNCH_04, Tpoint3f(0.0f, -1.0f, 0.5f), 30, 5,
  249. (end-start)*40.0, (268.0 - start)*40.0, (271.0-start)*40.0, 99999.0,
  250. (268.0 - start)*40.0, (272.0 - start)*40.0, 1.0f, Tpoint3f(0.0f, 0.0f, 0.0f),
  251. (268.0-start)*40.0, SOUND_PUNCH_03, SOUND_SHOUT_03, 100);
  252. //AddAnimation(ANI_PUNCH_05, "punch_05", 315.0*40.0, 330.0*40.0, false);
  253. if (m_body_left_foot)
  254. InitializePunch(m_body_left_foot->GetId(), 4, -1, 2, ANI_PUNCH_05, Tpoint3f(0.0f, -1.0f, 0.5f), 20, 2, 600.0, 200.0, 360.0, 360.0, 0.0, 400.0, 0.4f, Tpoint3f(0.0f, 0.0f, 0.0f), 200.0, SOUND_PUNCH_01, SOUND_SHOUT_00 | SOUND_SHOUT_01, 30);
  255. //AddAnimation(ANI_PUNCH_06, "punch_06", 330.0*40.0, 338.0*40.0, false);
  256. if (m_body_right_foot)
  257. InitializePunch(m_body_right_foot->GetId(), 5, 4, 2, ANI_PUNCH_06, Tpoint3f(0.0f, -1.0f, 0.5f), 20, 2, 320.0, 40.0, 320.0, 80.0, 0.0, 400.0, 0.4f, Tpoint3f(0.0f, 0.0f, 0.0f), 40.0, SOUND_PUNCH_02, SOUND_SHOUT_00 | SOUND_SHOUT_01, 30);
  258. //AddAnimation(ANI_PUNCH_07, "punch_07", 338.0*40.0, 355.0*40.0, false);
  259. if (m_body_left_fist)
  260. InitializePunch(m_body_left_fist->GetId(), 6, 5, 1, ANI_PUNCH_07, Tpoint3f(-1.0f, 0.0f, 0.3f), 30, 5, 680.0, 280.0, 560.0, 1000.0, 160.0, 560.0, 1.1f, Tpoint3f(0.0f, 0.0f, 0.0f), 280.0, SOUND_PUNCH_03, SOUND_SHOUT_03 | SOUND_SHOUT_02, 100);
  261. //AddAnimation(ANI_PUNCH_08, "punch_08", 365.0*40.0, 400.0*40.0, false);
  262. if (m_body_left_fist)
  263. InitializePunch(m_body_left_fist->GetId(), 7, -1, 3, ANI_PUNCH_08, Tpoint3f(0.0f, 0.3f, -0.3f), 30, 5, 1400.0, 600.0, 840.0, 2000.0, 0.0, 920.0, 0.8f, Tpoint3f(0.0f, 0.0f, 0.0f), 600.0, SOUND_PUNCH_03, SOUND_SHOUT_03 | SOUND_SHOUT_02, 100);
  264. //AddAnimation(ANI_PUNCH_09, "punch_air_09", 430.0*40.0, 448.0*40.0, false);
  265. start = 430.0;
  266. end = 448.0;
  267. if (m_body_right_foot)
  268. InitializePunch(m_body_right_foot->GetId(), 8, -1, 6, ANI_PUNCH_09, Tpoint3f(0.0f, 0.0f, -1.0f), 35, 5,
  269. (end-start)*40.0, (441.0 - start)*40.0, (445.0-start)*40.0, 99999.0,
  270. 0.0, (end - start)*40.0, 0.5, Tpoint3f(0.0f, 0.0f, 0.0f),
  271. (441.0-start)*40.0, SOUND_PUNCH_03, SOUND_SHOUT_02, 100);
  272. //AddAnimation(ANI_PUNCH_10, "punch_air_10", 470.0*40.0, 490.0*40.0, false);
  273. start = 470.0;
  274. end = 490.0;
  275. if (m_body_right_fist)
  276. InitializePunch(m_body_right_fist->GetId(), 9, -1, 5, ANI_PUNCH_10, Tpoint3f(0.0f, -1.0f, -0.1f), 35, 5,
  277. (end-start)*40.0, (483.0 - start)*40.0, (487.0-start)*40.0, 99999.0,
  278. 0.0, (end - start)*40.0, 0.3, Tpoint3f(0.0f, 0.0f, 0.0f),
  279. (484.0-start)*40.0, SOUND_PUNCH_02, SOUND_SHOUT_01, 100);
  280. SetAnimation(ANI_IDLE);
  281. //Initialize Bone Connectors
  282. m_bone_connector_count = 12;
  283. m_bone_connector = new BonePhysicConnector[m_bone_connector_count];
  284. m_bone_connector[0].connector_id = FindBodyId("connectrol_01");
  285. m_bone_connector[0].bone_a = FindBodyId("HandRd");
  286. m_bone_connector[0].bone_b = FindBodyId("HandR");
  287. m_bone_connector[1].connector_id = FindBodyId("connectrol_02");
  288. m_bone_connector[1].bone_a = FindBodyId("HandR");
  289. m_bone_connector[1].bone_b = FindBodyId("body");
  290. m_bone_connector[2].connector_id = FindBodyId("connectrol_05");
  291. m_bone_connector[2].bone_a = FindBodyId("HandLd");
  292. m_bone_connector[2].bone_b = FindBodyId("HandL");
  293. m_bone_connector[3].connector_id = FindBodyId("connectrol_04");
  294. m_bone_connector[3].bone_a = FindBodyId("HandL");
  295. m_bone_connector[3].bone_b = FindBodyId("body");
  296. m_bone_connector[4].connector_id = FindBodyId("connectrol_11");
  297. m_bone_connector[4].bone_a = FindBodyId("FootR");
  298. m_bone_connector[4].bone_b = FindBodyId("LegRd");
  299. m_bone_connector[5].connector_id = FindBodyId("connectrol_09");
  300. m_bone_connector[5].bone_a = FindBodyId("LegRd");
  301. m_bone_connector[5].bone_b = FindBodyId("LegR");
  302. m_bone_connector[6].connector_id = FindBodyId("connectrol_07");
  303. m_bone_connector[6].bone_a = FindBodyId("LegR");
  304. m_bone_connector[6].bone_b = FindBodyId("Torso");
  305. m_bone_connector[7].connector_id = FindBodyId("connectrol_12");
  306. m_bone_connector[7].bone_a = FindBodyId("FootL");
  307. m_bone_connector[7].bone_b = FindBodyId("LegLd");
  308. m_bone_connector[8].connector_id = FindBodyId("connectrol_10");
  309. m_bone_connector[8].bone_a = FindBodyId("LegLd");
  310. m_bone_connector[8].bone_b = FindBodyId("LegL");
  311. m_bone_connector[9].connector_id = FindBodyId("connectrol_08");
  312. m_bone_connector[9].bone_a = FindBodyId("LegL");
  313. m_bone_connector[9].bone_b = FindBodyId("Torso");
  314. m_bone_connector[10].connector_id = FindBodyId("connectrol_06");
  315. m_bone_connector[10].bone_a = FindBodyId("Torso");
  316. m_bone_connector[10].bone_b = FindBodyId("body");
  317. m_bone_connector[11].connector_id = FindBodyId("connectrol_03");
  318. m_bone_connector[11].bone_a = FindBodyId("Head");
  319. m_bone_connector[11].bone_b = FindBodyId("body");*/
  320. };