| @@ -17,7 +17,7 @@ using namespace lol; | |||
| #include "physics/lolphysics.h" | |||
| #include "physics/easyphysics.h" | |||
| #define CAT_MODE 1 | |||
| #define CAT_MODE 0 | |||
| #define OBJ_SIZE 2.f | |||
| #define NB_SPRITE 4 | |||
| #define PARTICLE_SIZE 4 | |||
| @@ -36,17 +36,17 @@ using namespace lol::phys; | |||
| #define JUMP_STRAFE .5f | |||
| #define TARGET_TIMER 10.f + (rand(4.f) - 2.f) | |||
| int gNumObjects = 64; | |||
| int gNumObjects = 16; | |||
| #if CAT_MODE | |||
| #define USE_WALL 1 | |||
| #define USE_BODIES 1 | |||
| #else | |||
| #define USE_WALL 1 | |||
| #define USE_PLATFORM 1 | |||
| #define USE_PLATFORM 0 | |||
| #define USE_ROPE 0 | |||
| #define USE_BODIES 1 | |||
| #define USE_ROTATION 0 | |||
| #define USE_ROTATION 1 | |||
| #define USE_CHARACTER 0 | |||
| #define USE_STAIRS 0 | |||
| #endif | |||
| @@ -71,6 +71,14 @@ void BtPhysTest::InitApp() | |||
| m_loc_dp = .0f; | |||
| #endif //CAT_MODE | |||
| #if 1 //HAS_INPUT | |||
| InputProfile& ip = m_profile; | |||
| ip.AddBindings<BtPhysTestKeyInput, BtPhysTestKeyInput::KEY_START, BtPhysTestKeyInput::KEY_MAX>(InputProfileType::Keyboard); | |||
| m_controller = new Controller("Default"); | |||
| m_controller->Init(m_profile); | |||
| Ticker::Ref(m_controller); | |||
| #else | |||
| /* Register an input controller for the keyboard */ | |||
| m_controller = new Controller("Default"); | |||
| m_controller->SetInputCount(KEY_MAX, 0); | |||
| @@ -82,6 +90,7 @@ void BtPhysTest::InitApp() | |||
| m_controller->GetKey(KEY_MOVE_UP).Bind("Keyboard", "PageUp"); | |||
| m_controller->GetKey(KEY_MOVE_DOWN).Bind("Keyboard", "PageDown"); | |||
| m_controller->GetKey(KEY_QUIT).Bind("Keyboard", "Escape"); | |||
| #endif | |||
| /* Create a camera that matches the settings of XNA BtPhysTest */ | |||
| m_camera = new Camera(); | |||
| @@ -301,6 +310,88 @@ void BtPhysTest::InitApp() | |||
| #endif //USE_ROPE | |||
| } | |||
| BtPhysTest::~BtPhysTest() | |||
| { | |||
| Scene& scene = Scene::GetScene(); | |||
| scene.PopCamera(m_camera); | |||
| Ticker::Unref(m_controller); | |||
| Ticker::Unref(m_light1); | |||
| Ticker::Unref(m_light2); | |||
| #if CAT_MODE | |||
| /* cat datas setup */ | |||
| Shader::Destroy(m_cat_shader); | |||
| Tiler::Deregister(m_cat_texture); | |||
| #endif //CAT_MODE | |||
| while (m_constraint_list.count()) | |||
| { | |||
| EasyConstraint* CurPop = m_constraint_list.last(); | |||
| m_constraint_list.pop(); | |||
| CurPop->RemoveFromSimulation(m_simulation); | |||
| delete CurPop; | |||
| } | |||
| array<PhysicsObject*> objects | |||
| = m_ground_list | |||
| + m_stairs_list | |||
| + m_character_list | |||
| + m_platform_list; | |||
| while (m_physobj_list.count()) | |||
| { | |||
| objects << m_physobj_list.last().m1; | |||
| m_physobj_list.pop(); | |||
| } | |||
| m_ground_list.empty(); | |||
| m_stairs_list.empty(); | |||
| m_character_list.empty(); | |||
| m_platform_list.empty(); | |||
| while (objects.count()) | |||
| { | |||
| PhysicsObject* CurPop = objects.pop(); | |||
| CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| Ticker::Unref(CurPop); | |||
| } | |||
| //while (m_ground_list.count()) | |||
| //{ | |||
| // PhysicsObject* CurPop = m_ground_list.last(); | |||
| // m_ground_list.pop(); | |||
| // CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| // Ticker::Unref(CurPop); | |||
| //} | |||
| //while (m_stairs_list.count()) | |||
| //{ | |||
| // PhysicsObject* CurPop = m_stairs_list.last(); | |||
| // m_stairs_list.pop(); | |||
| // CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| // Ticker::Unref(CurPop); | |||
| //} | |||
| //while (m_character_list.count()) | |||
| //{ | |||
| // PhysicsObject* CurPop = m_character_list.last(); | |||
| // m_character_list.pop(); | |||
| // CurPop->GetCharacter()->RemoveFromSimulation(m_simulation); | |||
| // Ticker::Unref(CurPop); | |||
| //} | |||
| //while (m_platform_list.count()) | |||
| //{ | |||
| // PhysicsObject* CurPop = m_platform_list.last(); | |||
| // m_platform_list.pop(); | |||
| // CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| // Ticker::Unref(CurPop); | |||
| //} | |||
| //while (m_physobj_list.count()) | |||
| //{ | |||
| // PhysicsObject* CurPop = m_physobj_list.last().m1; | |||
| // m_physobj_list.pop(); | |||
| // CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| // Ticker::Unref(CurPop); | |||
| //} | |||
| Ticker::Unref(m_simulation); | |||
| } | |||
| void BtPhysTest::TickGame(float seconds) | |||
| { | |||
| WorldEntity::TickGame(seconds); | |||
| @@ -317,8 +408,10 @@ void BtPhysTest::TickGame(float seconds) | |||
| return; | |||
| } | |||
| Debug::DrawSetupSegment(1.f); | |||
| Debug::DrawGrid(vec3::zero, vec3::axis_x, vec3::axis_y, vec3::axis_z, 10.f); | |||
| if (m_controller->WasKeyReleasedThisFrame(KEY_QUIT)) | |||
| if (m_controller->WasKeyReleasedThisFrame(BtPhysTestKeyInput::KEY_QUIT)) | |||
| Ticker::Shutdown(); | |||
| m_loop_value += seconds; | |||
| @@ -619,65 +712,6 @@ void BtPhysTest::TickDraw(float seconds, Scene &scene) | |||
| } | |||
| BtPhysTest::~BtPhysTest() | |||
| { | |||
| Scene& scene = Scene::GetScene(); | |||
| scene.PopCamera(m_camera); | |||
| Ticker::Unref(m_light1); | |||
| Ticker::Unref(m_light2); | |||
| #if CAT_MODE | |||
| /* cat datas setup */ | |||
| Shader::Destroy(m_cat_shader); | |||
| Tiler::Deregister(m_cat_texture); | |||
| #endif //CAT_MODE | |||
| while (m_constraint_list.count()) | |||
| { | |||
| EasyConstraint* CurPop = m_constraint_list.last(); | |||
| m_constraint_list.pop(); | |||
| CurPop->RemoveFromSimulation(m_simulation); | |||
| delete CurPop; | |||
| } | |||
| while (m_ground_list.count()) | |||
| { | |||
| PhysicsObject* CurPop = m_ground_list.last(); | |||
| m_ground_list.pop(); | |||
| CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| Ticker::Unref(CurPop); | |||
| } | |||
| while (m_stairs_list.count()) | |||
| { | |||
| PhysicsObject* CurPop = m_stairs_list.last(); | |||
| m_stairs_list.pop(); | |||
| CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| Ticker::Unref(CurPop); | |||
| } | |||
| while (m_character_list.count()) | |||
| { | |||
| PhysicsObject* CurPop = m_character_list.last(); | |||
| m_character_list.pop(); | |||
| CurPop->GetCharacter()->RemoveFromSimulation(m_simulation); | |||
| Ticker::Unref(CurPop); | |||
| } | |||
| while (m_platform_list.count()) | |||
| { | |||
| PhysicsObject* CurPop = m_platform_list.last(); | |||
| m_platform_list.pop(); | |||
| CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| Ticker::Unref(CurPop); | |||
| } | |||
| while (m_physobj_list.count()) | |||
| { | |||
| PhysicsObject* CurPop = m_physobj_list.last().m1; | |||
| m_physobj_list.pop(); | |||
| CurPop->GetPhysic()->RemoveFromSimulation(m_simulation); | |||
| Ticker::Unref(CurPop); | |||
| } | |||
| Ticker::Unref(m_simulation); | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| // CShaderData | |||
| //----------------------------------------------------------------------------- | |||
| @@ -43,26 +43,50 @@ protected: | |||
| void InitApp(); | |||
| private: | |||
| enum | |||
| //MeshViewerInput --------------------------------------------------------- | |||
| struct BtPhysTestKeyInputBase : public StructSafeEnum | |||
| { | |||
| KEY_MOVE_FORWARD, | |||
| KEY_MOVE_BACK, | |||
| KEY_MOVE_LEFT, | |||
| KEY_MOVE_RIGHT, | |||
| KEY_MOVE_UP, | |||
| KEY_MOVE_DOWN, | |||
| KEY_MOVE_JUMP, | |||
| KEY_QUIT, | |||
| KEY_MAX, | |||
| enum Type | |||
| { | |||
| KEY_START = 0, | |||
| KEY_MOVE_FORWARD = KEY_START, | |||
| KEY_MOVE_BACK, | |||
| KEY_MOVE_LEFT, | |||
| KEY_MOVE_RIGHT, | |||
| KEY_MOVE_UP, | |||
| KEY_MOVE_DOWN, | |||
| KEY_MOVE_JUMP, | |||
| KEY_QUIT, | |||
| KEY_MAX | |||
| }; | |||
| protected: | |||
| virtual bool BuildEnumMap(map<int64_t, String>& enum_map) | |||
| { | |||
| enum_map[KEY_MOVE_FORWARD] = g_name_key_Up; | |||
| enum_map[KEY_MOVE_BACK] = g_name_key_Down; | |||
| enum_map[KEY_MOVE_LEFT] = g_name_key_Left; | |||
| enum_map[KEY_MOVE_RIGHT] = g_name_key_Right; | |||
| enum_map[KEY_MOVE_UP] = g_name_key_PageUp; | |||
| enum_map[KEY_MOVE_DOWN] = g_name_key_PageDown; | |||
| enum_map[KEY_MOVE_JUMP] = g_name_key_Space; | |||
| enum_map[KEY_QUIT] = g_name_key_Escape; | |||
| return true; | |||
| } | |||
| }; | |||
| typedef SafeEnum<BtPhysTestKeyInputBase> BtPhysTestKeyInput; | |||
| TileSet* m_cat_texture; | |||
| Shader* m_cat_shader; | |||
| CatShaderData* m_cat_sdata; | |||
| Camera* m_camera; | |||
| Controller * m_controller; | |||
| Light * m_light1; | |||
| Light * m_light2; | |||
| Controller* m_controller; | |||
| InputProfile m_profile; | |||
| Light* m_light1; | |||
| Light* m_light2; | |||
| int m_init_status; | |||
| bool m_ready; | |||
| @@ -42,7 +42,10 @@ public: | |||
| { | |||
| m_physics = new EasyPhysic(this); | |||
| m_mesh.Compile("[sc#ddd afcb 60 1 60 -.1]"); | |||
| //m_mesh.Compile("[sc#ddd afcb 60 1 60 -.1]"); | |||
| m_mesh.SetCurColor(Color::white); | |||
| m_mesh.AppendFlatChamfBox(vec3(60.f, 1.f, 60.f), -.1f); | |||
| vec3 BoxSize = vec3(60.f, 1.f, 60.f); | |||
| m_physics->SetCollisionChannel(0, 0xFF); | |||
| m_physics->SetShapeToBox(BoxSize); | |||
| @@ -130,88 +133,168 @@ public: | |||
| m_is_character(false), | |||
| m_is_phys(false) | |||
| { | |||
| array<char const *> MeshRand; | |||
| array<int> MeshLimit; | |||
| array<int> MeshType; | |||
| static array<EasyMesh> MeshRand; | |||
| static array<int> MeshLimit; | |||
| static array<int> MeshType; | |||
| if (!MeshRand.count()) | |||
| { | |||
| array<String> colors_base = { "#add", "#dad", "#dda", "#daa", "#ada", "#aad" }; | |||
| MeshLimit << 0; | |||
| MeshLimit << 0; | |||
| #if USE_BOX | |||
| MeshRand << "[sc#add afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| MeshRand << "[sc#dad afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| MeshRand << "[sc#dda afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| MeshRand << "[sc#daa afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| MeshRand << "[sc#ada afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| MeshRand << "[sc#aad afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 0; | |||
| { | |||
| array<String> colors = colors_base; | |||
| while (colors.count()) | |||
| { | |||
| EasyMesh m; | |||
| vec4 color = Color::C8BppHexString(colors.pop()); | |||
| m.SetCurColor(color); | |||
| m.AppendFlatChamfBox(vec3(1.7f), .4f); | |||
| m.OpenBrace(); | |||
| { | |||
| m.SetCurColor(Color::black); | |||
| m.ToggleScaleWinding(); | |||
| m.AppendFlatChamfBox(vec3(1.9f), .4f); | |||
| m.ScaleX(-1.f); | |||
| m.ScaleY(-1.f); | |||
| m.ScaleZ(-1.f); | |||
| } | |||
| m.CloseBrace(); | |||
| MeshRand << m; | |||
| } | |||
| } | |||
| //MeshRand << "[sc#add afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| //MeshRand << "[sc#dad afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| //MeshRand << "[sc#dda afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| //MeshRand << "[sc#daa afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| //MeshRand << "[sc#ada afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| //MeshRand << "[sc#aad afcb1.7 1.7 1.7 0.4][sc#000 tsw afcb1.9 1.9 1.9 0.4 sx-1 sy-1 sz-1]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 0; | |||
| #endif //USE_BOX | |||
| #if USE_SPHERE | |||
| #if CAT_MODE | |||
| int nb_sprite = NB_SPRITE; | |||
| //SPRITE | |||
| vec2 start_point = vec2((float)rand(nb_sprite), (float)rand(nb_sprite)) / vec2((float)nb_sprite); | |||
| //vec2(0.f, .0f) / vec2((float)nb_sprite); | |||
| vec2 size = vec2(1.f) / vec2((float)nb_sprite); | |||
| m_mesh.BD()->SetTexCoordCustomBuild(MeshType::Quad, MeshFaceType::QuadDefault, | |||
| start_point, start_point + size); | |||
| m_mesh.BD()->SetTexCoordCustomBuild2(MeshType::Quad, MeshFaceType::QuadDefault, | |||
| vec2(-PARTICLE_SIZE), vec2(PARTICLE_SIZE)); | |||
| MeshRand << "[tpbn tvnc sc#ffff aq 0 0]"; | |||
| MeshRand << "[tpbn tvnc sc#faaf aq 0 0]"; | |||
| MeshRand << "[tpbn tvnc sc#afaf aq 0 0]"; | |||
| MeshRand << "[tpbn tvnc sc#aaff aq 0 0]"; | |||
| int nb_sprite = NB_SPRITE; | |||
| //SPRITE | |||
| vec2 start_point = vec2((float)rand(nb_sprite), (float)rand(nb_sprite)) / vec2((float)nb_sprite); | |||
| //vec2(0.f, .0f) / vec2((float)nb_sprite); | |||
| vec2 size = vec2(1.f) / vec2((float)nb_sprite); | |||
| m_mesh.BD()->SetTexCoordCustomBuild(MeshType::Quad, MeshFaceType::QuadDefault, | |||
| start_point, start_point + size); | |||
| m_mesh.BD()->SetTexCoordCustomBuild2(MeshType::Quad, MeshFaceType::QuadDefault, | |||
| vec2(-PARTICLE_SIZE), vec2(PARTICLE_SIZE)); | |||
| MeshRand << "[tpbn tvnc sc#ffff aq 0 0]"; | |||
| MeshRand << "[tpbn tvnc sc#faaf aq 0 0]"; | |||
| MeshRand << "[tpbn tvnc sc#afaf aq 0 0]"; | |||
| MeshRand << "[tpbn tvnc sc#aaff aq 0 0]"; | |||
| #else | |||
| MeshRand << "[sc#add asph1 2]"; | |||
| MeshRand << "[sc#dad asph1 2]"; | |||
| MeshRand << "[sc#dda asph1 2]"; | |||
| MeshRand << "[sc#daa asph1 2]"; | |||
| MeshRand << "[sc#ada asph1 2]"; | |||
| MeshRand << "[sc#aad asph1 2]"; | |||
| { | |||
| array<String> colors = colors_base; | |||
| while (colors.count()) | |||
| { | |||
| EasyMesh m; | |||
| vec4 color = Color::C8BppHexString(colors.pop()); | |||
| m.SetCurColor(color); | |||
| m.AppendSphere(1, 2.f); | |||
| MeshRand << m; | |||
| } | |||
| } | |||
| //MeshRand << "[sc#add asph1 2]"; | |||
| //MeshRand << "[sc#dad asph1 2]"; | |||
| //MeshRand << "[sc#dda asph1 2]"; | |||
| //MeshRand << "[sc#daa asph1 2]"; | |||
| //MeshRand << "[sc#ada asph1 2]"; | |||
| //MeshRand << "[sc#aad asph1 2]"; | |||
| #endif | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 1; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 1; | |||
| #endif //USE_SPHERE | |||
| #if USE_CONE | |||
| MeshRand << "[sc#add scb#add ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| MeshRand << "[sc#dad scb#dad ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| MeshRand << "[sc#dda scb#dda ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| MeshRand << "[sc#daa scb#daa ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| MeshRand << "[sc#ada scb#ada ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| MeshRand << "[sc#aad scb#aad ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 2; | |||
| { | |||
| array<String> colors = colors_base; | |||
| while (colors.count()) | |||
| { | |||
| EasyMesh m; | |||
| vec4 color = Color::C8BppHexString(colors.pop()); | |||
| m.SetCurColor(color); | |||
| m.SetCurColorB(color); | |||
| m.AppendDisc(8, 2.f); | |||
| m.RotateX(180.f); | |||
| m.TranslateY(-1.f); | |||
| m.AppendCylinder(8, 2.f, 2.f, 0.f); | |||
| MeshRand << m; | |||
| } | |||
| } | |||
| //MeshRand << "[sc#add scb#add ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| //MeshRand << "[sc#dad scb#dad ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| //MeshRand << "[sc#dda scb#dda ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| //MeshRand << "[sc#daa scb#daa ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| //MeshRand << "[sc#ada scb#ada ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| //MeshRand << "[sc#aad scb#aad ad8 2 0 rx180 ty-1 ac8 2 2 0 0 0]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 2; | |||
| #endif //USE_CONE | |||
| #if USE_CYLINDER | |||
| MeshRand << "[sc#add scb#add ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| MeshRand << "[sc#dad scb#dad ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| MeshRand << "[sc#dda scb#dda ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| MeshRand << "[sc#daa scb#daa ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| MeshRand << "[sc#ada scb#ada ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| MeshRand << "[sc#aad scb#aad ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 3; | |||
| { | |||
| array<String> colors = colors_base; | |||
| while (colors.count()) | |||
| { | |||
| EasyMesh m; | |||
| vec4 color = Color::C8BppHexString(colors.pop()); | |||
| m.SetCurColor(color); | |||
| m.SetCurColorB(color); | |||
| m.AppendDisc(8, 2.f); | |||
| m.RotateX(180.f); | |||
| m.TranslateY(-1.f); | |||
| m.MirrorY(); | |||
| m.AppendCylinder(8.f, 2.f, 2.f, 2.f); | |||
| MeshRand << m; | |||
| } | |||
| } | |||
| //MeshRand << "[sc#add scb#add ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| //MeshRand << "[sc#dad scb#dad ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| //MeshRand << "[sc#dda scb#dda ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| //MeshRand << "[sc#daa scb#daa ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| //MeshRand << "[sc#ada scb#ada ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| //MeshRand << "[sc#aad scb#aad ad8 2 0 rx180 ty-1 my ac8 2 2 2 0 0]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 3; | |||
| #endif //USE_CYLINDER | |||
| #if USE_CAPSULE | |||
| MeshRand << "[sc#add scb#add acap1 2 1]"; | |||
| MeshRand << "[sc#dad scb#dad acap1 2 1]"; | |||
| MeshRand << "[sc#dda scb#dda acap1 2 1]"; | |||
| MeshRand << "[sc#daa scb#daa acap1 2 1]"; | |||
| MeshRand << "[sc#ada scb#ada acap1 2 1]"; | |||
| MeshRand << "[sc#aad scb#aad acap1 2 1]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 4; | |||
| { | |||
| array<String> colors = colors_base; | |||
| while (colors.count()) | |||
| { | |||
| EasyMesh m; | |||
| vec4 color = Color::C8BppHexString(colors.pop()); | |||
| m.SetCurColor(color); | |||
| m.SetCurColorB(color); | |||
| m.AppendCapsule(1, 2.f, 1.f); | |||
| MeshRand << m; | |||
| } | |||
| } | |||
| //MeshRand << "[sc#add scb#add acap1 2 1]"; | |||
| //MeshRand << "[sc#dad scb#dad acap1 2 1]"; | |||
| //MeshRand << "[sc#dda scb#dda acap1 2 1]"; | |||
| //MeshRand << "[sc#daa scb#daa acap1 2 1]"; | |||
| //MeshRand << "[sc#ada scb#ada acap1 2 1]"; | |||
| //MeshRand << "[sc#aad scb#aad acap1 2 1]"; | |||
| MeshLimit << MeshRand.count(); | |||
| MeshType << 4; | |||
| #endif //USE_CAPSULE | |||
| } | |||
| int RandLimit = RandValue; | |||
| if (MeshLimit.count() <= RandValue || RandValue < 0) | |||
| @@ -220,7 +303,8 @@ public: | |||
| m_physics = new EasyPhysic(this); | |||
| m_mesh.Compile(MeshRand[RandValue]); | |||
| //m_mesh.Compile(MeshRand[RandValue]); | |||
| m_mesh = MeshRand[RandValue]; | |||
| m_mesh.Scale(vec3(OBJ_SIZE)); | |||
| vec3 BoxSize = vec3(2.0f) * OBJ_SIZE; | |||
| int ColGroup = 1; | |||
| @@ -191,16 +191,16 @@ public: | |||
| */ | |||
| void Translate(vec3 const &v); | |||
| /* See Rotate */ | |||
| void RotateX(float angle); | |||
| void RotateX(float degrees); | |||
| /* See Rotate */ | |||
| void RotateY(float angle); | |||
| void RotateY(float degrees); | |||
| /* See Rotate */ | |||
| void RotateZ(float angle); | |||
| void RotateZ(float degrees); | |||
| /* [cmd:r/rx/ry/rz] Rotate vertices | |||
| - angle : rotation quantity. | |||
| - degrees : rotation quantity. | |||
| - axis : rotation axis. | |||
| */ | |||
| void Rotate(float angle, vec3 const &axis); | |||
| void Rotate(float degrees, vec3 const &axis); | |||
| /* [cmd:rj] Randomly move vertices along Origin-to-vertex as f(vtx) = vtx + o2v * (1.0 + rand(r)) | |||
| - r : jitter maximum value. | |||
| */ | |||
| @@ -35,21 +35,21 @@ void EasyMesh::Translate(vec3 const &v) | |||
| } | |||
| //----------------------------------------------------------------------------- | |||
| void EasyMesh::RotateX(float angle) { Rotate(angle, vec3(1, 0, 0)); } | |||
| void EasyMesh::RotateY(float angle) { Rotate(angle, vec3(0, 1, 0)); } | |||
| void EasyMesh::RotateZ(float angle) { Rotate(angle, vec3(0, 0, 1)); } | |||
| void EasyMesh::RotateX(float degrees) { Rotate(degrees, vec3(1, 0, 0)); } | |||
| void EasyMesh::RotateY(float degrees) { Rotate(degrees, vec3(0, 1, 0)); } | |||
| void EasyMesh::RotateZ(float degrees) { Rotate(degrees, vec3(0, 0, 1)); } | |||
| //----------------------------------------------------------------------------- | |||
| void EasyMesh::Rotate(float angle, vec3 const &axis) | |||
| void EasyMesh::Rotate(float degrees, vec3 const &axis) | |||
| { | |||
| if (BD()->IsEnabled(MeshBuildOperation::CommandRecording)) | |||
| { | |||
| BD()->CmdStack().AddCmd(EasyMeshCmdType::Rotate); | |||
| BD()->CmdStack() << angle << axis; | |||
| BD()->CmdStack() << degrees << axis; | |||
| return; | |||
| } | |||
| mat3 m = mat3::rotate(angle, axis); | |||
| mat3 m = mat3::rotate(degrees, axis); | |||
| for (int i = m_cursors.last().m1; i < m_vert.count(); i++) | |||
| { | |||
| m_vert[i].m_coord = m * m_vert[i].m_coord; | |||
| @@ -932,7 +932,7 @@ String ShaderData::Patch(String const &code, ShaderType type) | |||
| } | |||
| } | |||
| patched_code.resize(strlen(patched_code.C())); | |||
| patched_code.resize((int)strlen(patched_code.C())); | |||
| return patched_code; | |||
| } | |||
| @@ -45,7 +45,7 @@ public: | |||
| { | |||
| using namespace std; | |||
| ASSERT(str); | |||
| resize(strlen(str)); | |||
| resize((int)strlen(str)); | |||
| memcpy(&(*this)[0], str, count() + 1); | |||
| } | |||
| @@ -162,7 +162,7 @@ public: | |||
| { | |||
| using namespace std; | |||
| int token_len = strlen(token); | |||
| int token_len = (int)strlen(token); | |||
| for (int i = count() - token_len; i >= 0; --i) | |||
| if (strstr(C() + i, token)) | |||
| return i; | |||
| @@ -281,7 +281,7 @@ public: | |||
| /* We parse the C string twice because of strlen + memcmp | |||
| * but it's probably still faster than doing it by hand. */ | |||
| using namespace std; | |||
| int sz_len = strlen(sz); | |||
| int sz_len = (int)strlen(sz); | |||
| return count() == sz_len | |||
| && memcmp(C(), sz, sz_len) == 0; | |||
| } | |||
| @@ -231,7 +231,7 @@ public: | |||
| public: | |||
| void SetLineTime(float new_time = -1.f); | |||
| void SetLineMask(int new_mask = 0xFFFFFFFF); | |||
| void SetLineSegmentSize(float new_segment_size = 100000.f); | |||
| void SetLineSegmentSize(float new_segment_size = 1.f); | |||
| void SetLineColor(vec4 new_color = vec4(1.f)); | |||
| float GetLineSegmentSize(); | |||