PageRenderTime 19ms CodeModel.GetById 13ms app.highlight 3ms RepoModel.GetById 0ms app.codeStats 0ms

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