@@ -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(); | |||