Fixed Sprite Transform functions

* Stored base offsets and vertices in sprite structure
* Calculated the average of vertices in polygon and chain shapes and used that as center
* Applied offsets to drawSprites()
This commit is contained in:
n00b
2025-05-26 14:07:18 -04:00
parent bd3ec7f502
commit 207868cd5d
6 changed files with 628 additions and 272 deletions

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0
1747541932 source:/home/n00b/Projects/RCBASIC4/rcbasic_build/main.cpp
1748042868 source:/home/n00b/Projects/RCBASIC4/rcbasic_build/main.cpp
<iostream>
<stack>
<vector>
@@ -14,7 +14,7 @@
"env_resolve.h"
"identifier.h"
1744318795 /home/n00b/Projects/RCBASIC4/rcbasic_build/tokenizer.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_build/tokenizer.h
<iostream>
<string>
<cctype>
@@ -37,7 +37,7 @@
1734372057 /home/n00b/Projects/RCBASIC4/rcbasic_build/constants.h
<vector>
1738504435 /home/n00b/Projects/RCBASIC4/rcbasic_build/parser.h
1748055871 /home/n00b/Projects/RCBASIC4/rcbasic_build/parser.h
"tokenizer.h"
"identifier.h"
"rc_global.h"
@@ -54,7 +54,7 @@
1734372057 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_global.h
<inttypes.h>
1747541797 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h
"identifier.h"
1734372057 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_vm_asm.h

View File

@@ -2,24 +2,37 @@
<CodeBlocks_layout_file>
<FileVersion major="1" minor="0" />
<ActiveTarget name="Debug" />
<File name="parser.h" open="1" top="0" tabpos="29" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="192713" topLine="4635" />
</Cursor>
<Folding>
<Collapse line="6341" />
</Folding>
</File>
<File name="identifier.h" open="0" top="0" tabpos="26" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="9544" topLine="341" />
</Cursor>
</File>
<File name="rc_global.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="13014" topLine="163" />
</Cursor>
</File>
<File name="env_resolve.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="615" topLine="32" />
</Cursor>
</File>
<File name="rc_utility.h" open="0" top="0" tabpos="27" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="rc_builtin.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1747" topLine="35" />
<Cursor1 position="112317" topLine="2509" />
</Cursor>
</File>
<File name="main.cpp" open="1" top="0" tabpos="28" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="29027" topLine="909" />
</Cursor>
</File>
<File name="rc_global.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="13014" topLine="163" />
</Cursor>
</File>
<File name="tokenizer.h" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@@ -27,37 +40,24 @@
<Cursor1 position="41712" topLine="1007" />
</Cursor>
</File>
<File name="rc_vm_asm.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="rc_utility.h" open="0" top="0" tabpos="27" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="41761" topLine="1347" />
<Cursor1 position="1747" topLine="35" />
</Cursor>
</File>
<File name="parser.h" open="0" top="0" tabpos="24" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="136748" topLine="3309" />
</Cursor>
<Folding>
<Collapse line="6341" />
</Folding>
</File>
<File name="keywords.h" open="0" top="0" tabpos="25" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="105" topLine="17" />
</Cursor>
</File>
<File name="rc_builtin.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="112317" topLine="2509" />
</Cursor>
</File>
<File name="constants.h" open="0" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="main.cpp" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="rc_vm_asm.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="29027" topLine="909" />
<Cursor1 position="41761" topLine="1347" />
</Cursor>
</File>
</CodeBlocks_layout_file>

View File

@@ -20,11 +20,23 @@ struct rc_sprite2D_physics_obj
int offset_x;
int offset_y;
int base_offset_x = 0;
int base_offset_y = 0;
float radius; //radius when scale is 1
int user_offset_x;
int user_offset_y;
int base_user_offset_x;
int base_user_offset_y;
int box_width;
int box_height;
irr::core::array<b2Vec2> vertices; //store vertices at scale 1
b2Vec2 prev_vertex;
b2Vec2 next_vertex;
};
struct rc_sprite2D_animation_obj

View File

@@ -379,10 +379,19 @@ int rc_createSprite(int img_id, double w, double h)
sprFixtureDef.density = 1;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(w/2, h/2), 0);
rc_sprite[spr_id].physics.base_offset_x = w/2;
rc_sprite[spr_id].physics.base_offset_y = h/2;
rc_sprite[spr_id].physics.base_user_offset_x = 0;
rc_sprite[spr_id].physics.base_user_offset_y = 0;
rc_sprite[spr_id].physics.offset_x = w/2;
rc_sprite[spr_id].physics.offset_y = h/2;
rc_sprite[spr_id].physics.user_offset_x = 0;
rc_sprite[spr_id].physics.user_offset_y = 0;
rc_sprite[spr_id].isSolid = false;
if(rc_sprite[spr_id].image_id < 0)
@@ -498,6 +507,9 @@ void rc_setSpriteCollisionShape(int spr_id, int sprite_shape)
bool isSensor = rc_sprite[spr_id].physics.fixture->IsSensor();
float density = rc_sprite[spr_id].physics.fixture->GetDensity();
float actual_x = rc_sprite[spr_id].physics.body->GetPosition().x - (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float actual_y = rc_sprite[spr_id].physics.body->GetPosition().y - (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
if(rc_sprite[spr_id].physics.shape)
delete rc_sprite[spr_id].physics.shape;
@@ -521,11 +533,22 @@ void rc_setSpriteCollisionShape(int spr_id, int sprite_shape)
fix_shape->SetAsBox(rc_sprite[spr_id].frame_size.Width/2, rc_sprite[spr_id].frame_size.Height/2);
rc_sprite[spr_id].physics.box_width = rc_sprite[spr_id].frame_size.Width;
rc_sprite[spr_id].physics.box_height = rc_sprite[spr_id].frame_size.Height;
rc_sprite[spr_id].physics.base_offset_x = rc_sprite[spr_id].physics.box_width/2;
rc_sprite[spr_id].physics.base_offset_y = rc_sprite[spr_id].physics.box_height/2;
rc_sprite[spr_id].physics.offset_x = rc_sprite[spr_id].physics.box_width/2;
rc_sprite[spr_id].physics.offset_y = rc_sprite[spr_id].physics.box_height/2;
sprFixtureDef.shape = rc_sprite[spr_id].physics.shape;
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.shape_type = RC_SPRITE_SHAPE_BOX;
float center_x = actual_x + (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float center_y = actual_y + (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(center_x, center_y), rc_sprite[spr_id].physics.body->GetAngle());
}
break;
@@ -534,11 +557,30 @@ void rc_setSpriteCollisionShape(int spr_id, int sprite_shape)
rc_sprite[spr_id].physics.shape = new b2PolygonShape();
b2PolygonShape* fix_shape = (b2PolygonShape*)rc_sprite[spr_id].physics.shape;
fix_shape->SetAsBox(rc_sprite[spr_id].frame_size.Width/2, rc_sprite[spr_id].frame_size.Width/2);
rc_sprite[spr_id].physics.box_width = rc_sprite[spr_id].frame_size.Width;
rc_sprite[spr_id].physics.box_height = rc_sprite[spr_id].frame_size.Height;
rc_sprite[spr_id].physics.base_offset_x = rc_sprite[spr_id].physics.box_width/2;
rc_sprite[spr_id].physics.base_offset_y = rc_sprite[spr_id].physics.box_height/2;
rc_sprite[spr_id].physics.offset_x = rc_sprite[spr_id].physics.box_width/2;
rc_sprite[spr_id].physics.offset_y = rc_sprite[spr_id].physics.box_height/2;
sprFixtureDef.shape = rc_sprite[spr_id].physics.shape;
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.shape_type = RC_SPRITE_SHAPE_POLYGON;
rc_sprite[spr_id].physics.base_user_offset_x = 0;
rc_sprite[spr_id].physics.base_user_offset_y = 0;
rc_sprite[spr_id].physics.user_offset_x = 0;
rc_sprite[spr_id].physics.user_offset_y = 0;
float center_x = actual_x + (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float center_y = actual_y + (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(center_x, center_y), rc_sprite[spr_id].physics.body->GetAngle());
}
break;
@@ -546,12 +588,25 @@ void rc_setSpriteCollisionShape(int spr_id, int sprite_shape)
{
rc_sprite[spr_id].physics.shape = new b2CircleShape();
b2CircleShape* fix_shape = (b2CircleShape*)rc_sprite[spr_id].physics.shape;
fix_shape->m_radius = (rc_sprite[spr_id].frame_size.Width > rc_sprite[spr_id].frame_size.Height ? rc_sprite[spr_id].frame_size.Width : rc_sprite[spr_id].frame_size.Height) /2;
float new_radius = (rc_sprite[spr_id].frame_size.Width + rc_sprite[spr_id].frame_size.Height)/4;
fix_shape->m_radius = new_radius * (rc_sprite[spr_id].scale.X + rc_sprite[spr_id].scale.Y)/2;
sprFixtureDef.shape = rc_sprite[spr_id].physics.shape;
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.radius = new_radius; //only storing what the sprite is as scale 1
rc_sprite[spr_id].physics.base_offset_x = rc_sprite[spr_id].frame_size.Width/2;
rc_sprite[spr_id].physics.base_offset_y = rc_sprite[spr_id].frame_size.Height/2;
rc_sprite[spr_id].physics.offset_x = rc_sprite[spr_id].frame_size.Width/2;
rc_sprite[spr_id].physics.offset_y = rc_sprite[spr_id].frame_size.Height/2;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.shape_type = RC_SPRITE_SHAPE_CIRCLE;
float center_x = actual_x + (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float center_y = actual_y + (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(center_x, center_y), rc_sprite[spr_id].physics.body->GetAngle());
}
break;
@@ -565,12 +620,18 @@ void rc_setSpriteCollisionShape(int spr_id, int sprite_shape)
v[2].Set(2, 2);
fix_shape->Clear();
fix_shape->CreateLoop(v, 3);
fix_shape->m_radius = (rc_sprite[spr_id].frame_size.Width > rc_sprite[spr_id].frame_size.Height ? rc_sprite[spr_id].frame_size.Width : rc_sprite[spr_id].frame_size.Height) /2;
float new_radius = (rc_sprite[spr_id].frame_size.Width + rc_sprite[spr_id].frame_size.Height)/4;
fix_shape->m_radius = new_radius * ((rc_sprite[spr_id].scale.X + rc_sprite[spr_id].scale.Y)/2);
sprFixtureDef.shape = rc_sprite[spr_id].physics.shape;
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.shape_type = RC_SPRITE_SHAPE_CHAIN;
rc_sprite[spr_id].physics.base_user_offset_x = 0;
rc_sprite[spr_id].physics.base_user_offset_y = 0;
rc_sprite[spr_id].physics.user_offset_x = 0;
rc_sprite[spr_id].physics.user_offset_y = 0;
}
break;
}
@@ -606,6 +667,7 @@ void rc_setSpriteRadius(int spr_id, double radius)
rc_sprite[spr_id].physics.fixture = NULL;
rc_sprite[spr_id].physics.radius = radius / ((rc_sprite[spr_id].scale.X + rc_sprite[spr_id].scale.Y)/2); //calculate what it would be at scale 1
b2FixtureDef sprFixtureDef;
@@ -615,6 +677,8 @@ void rc_setSpriteRadius(int spr_id, double radius)
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
//NOTE: Changing the radius doesn't move its position so a new transform is not necessary
}
}
@@ -648,6 +712,11 @@ void rc_setSpriteBox(int spr_id, int w, int h)
bool isSensor = rc_sprite[spr_id].physics.fixture->IsSensor();
float density = rc_sprite[spr_id].physics.fixture->GetDensity();
b2Vec2 pos = rc_sprite[spr_id].physics.body->GetPosition();
float bx = pos.x - (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float by = pos.y - (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
//Delete Fixture
if(rc_sprite[spr_id].physics.fixture)
rc_sprite[spr_id].physics.body->DestroyFixture(rc_sprite[spr_id].physics.fixture);
@@ -660,13 +729,32 @@ void rc_setSpriteBox(int spr_id, int w, int h)
b2PolygonShape* fix_shape = (b2PolygonShape*)rc_sprite[spr_id].physics.shape;
fix_shape->SetAsBox(w/2, h/2);
rc_sprite[spr_id].physics.vertices.clear();
for(int i = 0; i < fix_shape->m_count; i++)
{
rc_sprite[spr_id].physics.vertices.push_back(fix_shape->m_vertices[i]);
}
rc_sprite[spr_id].physics.box_width = w;
rc_sprite[spr_id].physics.box_height = h;
rc_sprite[spr_id].physics.base_offset_x = w/2;
rc_sprite[spr_id].physics.base_offset_y = h/2;
rc_sprite[spr_id].physics.offset_x = w/2;
rc_sprite[spr_id].physics.offset_y = h/2;
sprFixtureDef.shape = rc_sprite[spr_id].physics.shape;
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
float off_x = rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x;
float off_y = rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y;
//rc_setSpritePosition(spr_id, bx, by);
//std::cout << "Box At: " << bx << ", " << by << std::endl;
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(bx + off_x, by + off_y), rc_sprite[spr_id].physics.body->GetAngle());
}
}
@@ -702,6 +790,11 @@ void rc_setSpriteChain(int spr_id, double* vx, double* vy, int v_count, double p
bool isSensor = rc_sprite[spr_id].physics.fixture->IsSensor();
float density = rc_sprite[spr_id].physics.fixture->GetDensity();
b2Vec2 pos = rc_sprite[spr_id].physics.body->GetPosition();
float bx = pos.x - (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float by = pos.y - (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
//Delete Fixture
if(rc_sprite[spr_id].physics.fixture)
rc_sprite[spr_id].physics.body->DestroyFixture(rc_sprite[spr_id].physics.fixture);
@@ -716,19 +809,53 @@ void rc_setSpriteChain(int spr_id, double* vx, double* vy, int v_count, double p
b2Vec2 vert[v_count+1];
rc_sprite[spr_id].physics.vertices.clear();
float cx = 0;
float cy = 0;
for(int i = 0; i < v_count; i++)
{
vert[i] = b2Vec2((float)vx[i], (float)vy[i]);
cx += vx[i];
cy += vy[i];
}
b2Vec2 prev_vert((float)prev_x, (float)prev_y);
b2Vec2 next_vert((float)next_x, (float)next_y);
cx = cx / v_count;
cy = cy / v_count;
for(int i = 0; i < v_count; i++)
{
vert[i] -= b2Vec2(cx, cy);
rc_sprite[spr_id].physics.vertices.push_back(vert[i]);
}
b2Vec2 prev_vert((float)prev_x-cx, (float)prev_y-cy);
b2Vec2 next_vert((float)next_x-cx, (float)next_y-cy);
rc_sprite[spr_id].physics.prev_vertex = prev_vert;
rc_sprite[spr_id].physics.next_vertex = next_vert;
fix_shape->CreateChain(vert, v_count, prev_vert, next_vert);
sprFixtureDef.shape = rc_sprite[spr_id].physics.shape;
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.base_offset_x = cx;
rc_sprite[spr_id].physics.base_offset_y = cy;
rc_sprite[spr_id].physics.offset_x = cx;
rc_sprite[spr_id].physics.offset_y = cy;
float off_x = rc_sprite[spr_id].physics.offset_x;
float off_y = rc_sprite[spr_id].physics.offset_y;
//rc_setSpritePosition(spr_id, bx, by);
//std::cout << "Box At: " << bx << ", " << by << std::endl;
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(bx + off_x, by + off_y), rc_sprite[spr_id].physics.body->GetAngle());
}
}
@@ -745,6 +872,11 @@ void rc_setSpriteChainLoop(int spr_id, double* vx, double* vy, int v_count)
bool isSensor = rc_sprite[spr_id].physics.fixture->IsSensor();
float density = rc_sprite[spr_id].physics.fixture->GetDensity();
b2Vec2 pos = rc_sprite[spr_id].physics.body->GetPosition();
float bx = pos.x - (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float by = pos.y - (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
//Delete Fixture
if(rc_sprite[spr_id].physics.fixture)
rc_sprite[spr_id].physics.body->DestroyFixture(rc_sprite[spr_id].physics.fixture);
@@ -759,9 +891,25 @@ void rc_setSpriteChainLoop(int spr_id, double* vx, double* vy, int v_count)
b2Vec2 vert[v_count];
rc_sprite[spr_id].physics.vertices.clear();
float cx = 0;
float cy = 0;
for(int i = 0; i < v_count; i++)
{
vert[i] = b2Vec2((float)vx[i], (float)vy[i]);
cx += vx[i];
cy += vy[i];
}
cx = cx / v_count;
cy = cy / v_count;
for(int i = 0; i < v_count; i++)
{
vert[i] -= b2Vec2(cx, cy);
rc_sprite[spr_id].physics.vertices.push_back(vert[i]);
}
fix_shape->CreateLoop(vert, v_count);
@@ -770,6 +918,20 @@ void rc_setSpriteChainLoop(int spr_id, double* vx, double* vy, int v_count)
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.base_offset_x = cx;
rc_sprite[spr_id].physics.base_offset_y = cy;
rc_sprite[spr_id].physics.offset_x = cx;
rc_sprite[spr_id].physics.offset_y = cy;
float off_x = rc_sprite[spr_id].physics.offset_x;
float off_y = rc_sprite[spr_id].physics.offset_y;
//rc_setSpritePosition(spr_id, bx, by);
//std::cout << "Box At: " << bx << ", " << by << std::endl;
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(bx + off_x, by + off_y), rc_sprite[spr_id].physics.body->GetAngle());
}
}
@@ -789,6 +951,11 @@ void rc_setSpritePolygon(int spr_id, double* vx, double* vy, int v_count)
bool isSensor = rc_sprite[spr_id].physics.fixture->IsSensor();
float density = rc_sprite[spr_id].physics.fixture->GetDensity();
b2Vec2 pos = rc_sprite[spr_id].physics.body->GetPosition();
float bx = pos.x - (rc_sprite[spr_id].physics.offset_x + rc_sprite[spr_id].physics.user_offset_x);
float by = pos.y - (rc_sprite[spr_id].physics.offset_y + rc_sprite[spr_id].physics.user_offset_y);
//Delete Fixture
if(rc_sprite[spr_id].physics.fixture)
rc_sprite[spr_id].physics.body->DestroyFixture(rc_sprite[spr_id].physics.fixture);
@@ -802,17 +969,47 @@ void rc_setSpritePolygon(int spr_id, double* vx, double* vy, int v_count)
b2Vec2 vert[v_count];
rc_sprite[spr_id].physics.vertices.clear();
float cx = 0;
float cy = 0;
for(int i = 0; i < v_count; i++)
{
vert[i] = b2Vec2((float)vx[i], (float)vy[i]);
cx += vx[i];
cy += vy[i];
}
cx = cx / v_count;
cy = cy / v_count;
for(int i = 0; i < v_count; i++)
{
vert[i] -= b2Vec2(cx, cy);
rc_sprite[spr_id].physics.vertices.push_back(vert[i]);
}
fix_shape->Set(vert, v_count);
//fix_shape->m_centroid = b2Vec2(cx/v_count, cy/v_count);
sprFixtureDef.shape = rc_sprite[spr_id].physics.shape;
sprFixtureDef.isSensor = isSensor;
sprFixtureDef.density = density;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.base_offset_x = cx;
rc_sprite[spr_id].physics.base_offset_y = cy;
rc_sprite[spr_id].physics.offset_x = cx;
rc_sprite[spr_id].physics.offset_y = cy;
float off_x = rc_sprite[spr_id].physics.offset_x;
float off_y = rc_sprite[spr_id].physics.offset_y;
//rc_setSpritePosition(spr_id, bx, by);
//std::cout << "Box At: " << bx << ", " << by << std::endl;
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(bx + off_x, by + off_y), rc_sprite[spr_id].physics.body->GetAngle());
}
}
@@ -824,6 +1021,12 @@ void rc_setSpriteShapeOffset(int spr_id, int offset_x, int offset_y)
if(!rc_sprite[spr_id].active)
return;
int old_offset_x = rc_sprite[spr_id].physics.user_offset_x;
int old_offset_y = rc_sprite[spr_id].physics.user_offset_y;
rc_sprite[spr_id].physics.base_user_offset_x = offset_x;
rc_sprite[spr_id].physics.base_user_offset_y = offset_y;
rc_sprite[spr_id].physics.user_offset_x = offset_x;
rc_sprite[spr_id].physics.user_offset_y = offset_y;
@@ -832,8 +1035,32 @@ void rc_setSpriteShapeOffset(int spr_id, int offset_x, int offset_y)
double off_x = rc_sprite[spr_id].physics.user_offset_x;
double off_y = rc_sprite[spr_id].physics.user_offset_y;
double x = rc_sprite[spr_id].physics.body->GetPosition().x;
double y = rc_sprite[spr_id].physics.body->GetPosition().y;
switch(rc_sprite[spr_id].physics.shape_type)
{
case RC_SPRITE_SHAPE_BOX:
{
off_x += rc_sprite[spr_id].physics.box_width/2;
off_y += rc_sprite[spr_id].physics.box_height/2;
}
break;
case RC_SPRITE_SHAPE_CIRCLE:
{
off_x += rc_sprite[spr_id].physics.shape->m_radius;
off_y += rc_sprite[spr_id].physics.shape->m_radius;
}
break;
default:
{
//POLYGON AND CHAIN SHAPES KEEP THE SAME OFFSETS
off_x = 0;
off_y = 0;
}
}
double x = rc_sprite[spr_id].physics.body->GetPosition().x - (old_offset_x + rc_sprite[spr_id].physics.offset_x);
double y = rc_sprite[spr_id].physics.body->GetPosition().y - (old_offset_y + rc_sprite[spr_id].physics.offset_y);
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(x+off_x, y+off_y), current_angle);
}
@@ -999,6 +1226,7 @@ void rc_rotateSprite(int spr_id, double angle)
angle = rc_util_radians(angle);
float new_angle = rc_sprite[spr_id].physics.body->GetAngle() + angle;
rc_sprite[spr_id].physics.body->SetTransform(rc_sprite[spr_id].physics.body->GetPosition(), new_angle);
}
@@ -1040,29 +1268,60 @@ void rc_setSpriteScale(int spr_id, double x, double y)
case b2Shape::e_circle:
{
b2CircleShape* shape = (b2CircleShape*)fixdef.shape;
shape->m_radius = (x+y)/2;
shape->m_radius = rc_sprite[spr_id].physics.radius * ((x+y)/2);
}
break;
case b2Shape::e_polygon:
{
b2PolygonShape* shape = (b2PolygonShape*)fixdef.shape;
if(rc_sprite[spr_id].physics.vertices.size() < shape->m_count)
{
for(int i = rc_sprite[spr_id].physics.vertices.size(); i < shape->m_count; i++)
{
//std::cout << "Add vec2" << std::endl;
rc_sprite[spr_id].physics.vertices.push_back(shape->m_vertices[i]);
}
}
b2Vec2 vert[shape->m_count];
for(int i = 0; i < shape->m_count; i++)
{
shape->m_vertices[i].x *= x;
shape->m_vertices[i].y *= y;
vert[i].x = rc_sprite[spr_id].physics.vertices[i].x * x;
vert[i].y = rc_sprite[spr_id].physics.vertices[i].y * y;
//std::cout << "SV: " << shape->m_vertices[i].x << ", " << shape->m_vertices[i].y << std::endl;
}
shape->Set(vert, shape->m_count);
}
break;
case b2Shape::e_chain:
{
b2ChainShape* shape = (b2ChainShape*)fixdef.shape;
if(rc_sprite[spr_id].physics.vertices.size() < shape->m_count)
{
while(rc_sprite[spr_id].physics.vertices.size() < shape->m_count)
{
rc_sprite[spr_id].physics.vertices.push_back(b2Vec2(0,0));
}
}
b2Vec2 vert[shape->m_count];
for(int i = 0; i < shape->m_count; i++)
{
shape->m_vertices[i].x *= x;
shape->m_vertices[i].y *= y;
vert[i].x = rc_sprite[spr_id].physics.vertices[i].x * x;
vert[i].y = rc_sprite[spr_id].physics.vertices[i].y * y;
//std::cout << "SV: " << shape->m_vertices[i].x << ", " << shape->m_vertices[i].y << std::endl;
}
b2Vec2 prev_vert(rc_sprite[spr_id].physics.prev_vertex.x * x, rc_sprite[spr_id].physics.prev_vertex.y * y);
b2Vec2 next_vert(rc_sprite[spr_id].physics.next_vertex.x * x, rc_sprite[spr_id].physics.next_vertex.y * y);
shape->CreateChain(vert, shape->m_count, prev_vert, next_vert);
}
break;
@@ -1086,7 +1345,38 @@ void rc_setSpriteScale(int spr_id, double x, double y)
}
rc_sprite[spr_id].physics.body->DestroyFixture(rc_sprite[spr_id].physics.fixture);
//std::cout << "Make magic happen: " << spr_id << std::endl;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&fixdef);
b2Vec2 old_offset = b2Vec2(rc_sprite[spr_id].physics.offset_x, rc_sprite[spr_id].physics.offset_y) + b2Vec2(rc_sprite[spr_id].physics.user_offset_x, rc_sprite[spr_id].physics.user_offset_y);
b2Vec2 pos = rc_sprite[spr_id].physics.body->GetPosition() - old_offset;
/*
if(spr_id == 1)
{
std::cout << "dbg1: " << pos.x << ", " << pos.y << " -- " << rc_sprite[spr_id].physics.offset_x << ", " << rc_sprite[spr_id].physics.offset_y << std::endl;
std::cout << "dbg2: " << rc_sprite[spr_id].physics.base_offset_x << ", " << rc_sprite[spr_id].physics.base_offset_y << std::endl;
}
*/
rc_sprite[spr_id].physics.user_offset_x = rc_sprite[spr_id].physics.base_user_offset_x * x;
rc_sprite[spr_id].physics.user_offset_y = rc_sprite[spr_id].physics.base_user_offset_y * y;
rc_sprite[spr_id].physics.offset_x = rc_sprite[spr_id].physics.base_offset_x * x;
rc_sprite[spr_id].physics.offset_y = rc_sprite[spr_id].physics.base_offset_y * y;
b2Vec2 new_offset = b2Vec2(rc_sprite[spr_id].physics.offset_x, rc_sprite[spr_id].physics.offset_y) + b2Vec2(rc_sprite[spr_id].physics.user_offset_x, rc_sprite[spr_id].physics.user_offset_y);
pos += new_offset;
rc_sprite[spr_id].physics.body->SetTransform(pos, rc_sprite[spr_id].physics.body->GetAngle());
//std::cout << "Done" << std::endl;
}
}
}
@@ -1296,32 +1586,86 @@ void drawSprites(int canvas_id)
int spr_id = rc_canvas[canvas_id].sprite_id[spr_index];
rc_sprite2D_obj* sprite = &rc_sprite[spr_id];
//std::cout << "debug info: " << canvas_id << " --> " << spr_index << " id = " << sprite->id << " anim_size = " << sprite->animation.size() << std::endl; continue;
if(!sprite->visible)
continue;
//if(!sprite->visible)
// continue;
physics_pos = sprite->physics.body->GetPosition();
x = (int)(physics_pos.x - sprite->physics.offset_x) - offset_x;
y = (int)(physics_pos.y - sprite->physics.offset_y) - offset_y;
int xf = x + sprite->frame_size.Width;
int yf = y + sprite->frame_size.Height;
if(rc_sprite[spr_id].physics.shape_type == RC_SPRITE_SHAPE_POLYGON)
{
b2PolygonShape* shape = (b2PolygonShape*)sprite->physics.shape;
x = (int)(sprite->physics.body->GetWorldCenter().x - sprite->physics.offset_x - offset_x);
y = (int)(sprite->physics.body->GetWorldCenter().y - sprite->physics.offset_y - offset_y);
}
int frame_offset_x = sprite->physics.user_offset_x;
int frame_offset_y = sprite->physics.user_offset_y;
/*
if(spr_id == 1)
{
b2Vec2 tform = sprite->physics.body->GetWorldCenter();
std::cout << "SPRITE: " << spr_id << " (" << tform.x << ", " << tform.y << ") " << std::endl;
if(sprite->physics.shape_type == RC_SPRITE_SHAPE_CIRCLE)
{
//b2CircleShape* cshape = (b2CircleShape*) sprite->physics.body->GetFixtureList()[0].GetShape();
std::cout << "offset: " << frame_offset_x << ", " << frame_offset_y << std::endl;
std::cout << "debug: " << "pbody = (" << physics_pos.x << ", " << physics_pos.y << ") radius = " << sprite->physics.body->GetFixtureList()->GetShape()->m_radius << std::endl;
std::cout << "calc: calc_pos (" << x << ", " << y << ") p_offset = (" << offset_x << ", " << offset_y << ") " << std::endl << std::endl;
std::cout << "-----------------" << std::endl;
}
else
{
//b2CircleShape* cshape = (b2CircleShape*) sprite->physics.body->GetFixtureList()[0].GetShape();
std::cout << "offset: " << frame_offset_x << ", " << frame_offset_y << std::endl;
std::cout << "debug: " << "pbody = (" << physics_pos.x << ", " << physics_pos.y << ") " << sprite->physics.box_width << " x " << sprite->physics.box_height << std::endl;
std::cout << "calc: calc_pos (" << x << ", " << y << ") canvas_offset = (" << offset_x << ", " << offset_y << ") " << std::endl << std::endl;
std::cout << "-----------------" << std::endl;
}
}
*/
//if(!sprite->visible)
// continue;
int radius = sprite->frame_size.Width;
if(sprite->frame_size.Height > radius)
radius = sprite->frame_size.Height;
radius += 1;
float max_scale = sprite->scale.X;
if(sprite->scale.Y > max_scale)
max_scale = sprite->scale.Y;
radius = (radius * max_scale) + 1;
int xf = x + radius;
int yf = y + radius;
//std::cout << "sprite info[" << spr_index << "]: (" << x << ", " << y << ") (" << xf << ", " << yf << ")" << std::endl;
if( (xf < 0) || (x > ((int)rc_canvas[canvas_id].viewport.dimension.Width)) )
position.set(x-frame_offset_x, y-frame_offset_y);
//position.set(x, y);
if( (xf < 0) || ((position.X - radius) > ((int)rc_canvas[canvas_id].viewport.dimension.Width)) )
{
//std::cout << "skip draw[X]: " << spr_index << std::endl;
continue;
}
if( (yf < 0) || (y > ((int)rc_canvas[canvas_id].viewport.dimension.Height)) )
if( (yf < 0) || ((position.Y-radius) > ((int)rc_canvas[canvas_id].viewport.dimension.Height)) )
{
//std::cout << "skip draw[Y]: " << spr_index << std::endl;
continue;
}
position.set(x, y);
int img_id = sprite->image_id;
if(img_id < 0 || img_id >= rc_image.size())
continue;
@@ -1370,7 +1714,7 @@ void drawSprites(int canvas_id)
scale.set(sprite->scale.X, sprite->scale.Y);
rotationPoint.set(x + (src_size.Width/2)*scale.X, y + (src_size.Height/2)*scale.Y); //TODO: need to account for offset once that is implemented
rotationPoint.set(x + (src_size.Width/2)*scale.X - sprite->physics.user_offset_x, y + (src_size.Height/2)*scale.Y - sprite->physics.user_offset_y); //TODO: need to account for offset once that is implemented
rotation = -1 * (sprite->physics.body->GetAngle() * RAD_TO_DEG); //convert Box2D radians to degrees
color.set(sprite->alpha,

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0
1747837152 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
1748042868 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
"rc_os_defines.h"
<emscripten.h>
<sys/param.h>
@@ -36,9 +36,9 @@
1747878586 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
<TargetConditionals.h>
1747541797 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1747870979 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
"rc_os_defines.h"
<sys/param.h>
<iostream>
@@ -1248,7 +1248,7 @@
1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
<irrlicht.h>
1747870979 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
"SDL.h"
<SDL2/SDL.h>
<irrlicht.h>
@@ -1272,7 +1272,7 @@
"rc_joints.h"
<irrtheora.h>
1748038519 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
"SDL.h"
"btBulletDynamicsCommon.h"
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
@@ -1307,7 +1307,7 @@
<irrlicht.h>
<iostream>
1747531874 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite2D.h
1748239411 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite2D.h
<irrlicht.h>
<box2d/box2d.h>
@@ -2276,7 +2276,7 @@
"rc_gfx_core.h"
<irrtheora.h>
1747541797 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1724469097 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
"irrBullet.h"
@@ -2492,7 +2492,7 @@
<cmath>
<cstdint>
1747605357 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
1748282681 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
"SDL.h"
<SDL2/SDL.h>
"rc_sprite2D.h"
@@ -2500,7 +2500,7 @@
"rc_sprite_physics.h"
"rc_joints.h"
1747594179 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_tilelib.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_tilelib.h
"SDL.h"
<SDL2/SDL.h>
"rc_tilemap.h"
@@ -2522,10 +2522,10 @@
1734372966 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
"rc_gfx_core.h"
1747870979 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
"ProjectiveTextures.h"
1744333498 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_material.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_material.h
"rc_fx_materials.h"
1734372966 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_animation.h
@@ -2534,11 +2534,11 @@
1734372966 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_constraint.h
1744478025 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_mesh.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_mesh.h
1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_particles.h
1744258575 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_scene.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_scene.h
"rc_gfx_core.h"
1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h
@@ -2557,26 +2557,26 @@
<vector>
<algorithm>
1744333498 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_fx_materials.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_fx_materials.h
<irrlicht.h>
"CShader.h"
"rc_fx_shaders.h"
1744332513 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/CShader.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/CShader.h
<irrlicht.h>
<string>
1744322711 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_fx_shaders.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_fx_shaders.h
1744326520 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/CShader.cpp
1748042868 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/CShader.cpp
<irrlicht.h>
<iostream>
"CShader.h"
1744345468 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.h
1748042868 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.h
<irrlicht.h>
1744345468 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp
1748042868 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp
"ProjectiveTextures.h"
<string>

View File

@@ -2,14 +2,102 @@
<CodeBlocks_layout_file>
<FileVersion major="1" minor="0" />
<ActiveTarget name="Debug" />
<File name="../../irrBullet/src/irrBullet.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="../../irrBullet/src/irrBulletCollisionCallBackInformation.cpp" open="1" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="7" />
<Cursor1 position="1253" topLine="0" />
</Cursor>
</File>
<File name="rc_physics3D_base.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="../../irrBullet/src/irrBulletGhostObject.cpp" open="1" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3283" topLine="66" />
<Cursor1 position="1861" topLine="27" />
</Cursor>
</File>
<File name="ProjectiveTextures.cpp" open="0" top="0" tabpos="35" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="348" topLine="0" />
</Cursor>
</File>
<File name="rc_video.h" open="0" top="0" tabpos="21" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="169" topLine="6" />
</Cursor>
</File>
<File name="RealisticWater.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="7671" topLine="204" />
</Cursor>
</File>
<File name="rc_spritelib.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="33820" topLine="1256" />
</Cursor>
</File>
<File name="rc_matrix.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="34977" topLine="1288" />
</Cursor>
</File>
<File name="rc_sprite_physics.h" open="0" top="0" tabpos="38" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="16031" topLine="523" />
</Cursor>
</File>
<File name="rc_fx_materials.h" open="0" top="0" tabpos="22" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="16692" topLine="566" />
</Cursor>
<Folding>
<Collapse line="47" />
</Folding>
</File>
<File name="rc_font.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletRigidBody.cpp" open="1" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2248" topLine="493" />
</Cursor>
</File>
<File name="rc_actor_material.h" open="0" top="0" tabpos="23" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5301" topLine="744" />
</Cursor>
</File>
<File name="rc_defines.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="190390" topLine="2847" />
</Cursor>
</File>
<File name="rc_gfx.h" open="1" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="28149" topLine="1092" />
</Cursor>
</File>
<File name="rc_func130_cases.h" open="0" top="0" tabpos="32" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="81110" topLine="1966" />
</Cursor>
</File>
<File name="gui_freetype_font.h" open="0" top="0" tabpos="23" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="183" topLine="0" />
</Cursor>
</File>
<File name="rc_net.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3769" topLine="186" />
</Cursor>
</File>
<File name="rc_tilelib.h" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6694" topLine="319" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletcommon.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="924" topLine="6" />
</Cursor>
</File>
<File name="rc_mesh.h" open="0" top="0" tabpos="36" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@@ -17,41 +105,6 @@
<Cursor1 position="3504" topLine="179" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletRigidBody.cpp" open="1" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2248" topLine="101" />
</Cursor>
</File>
<File name="rc_test.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="115" topLine="0" />
</Cursor>
</File>
<File name="CShader.h" open="0" top="0" tabpos="25" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2314" topLine="101" />
</Cursor>
</File>
<File name="rc_actor_animation.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="9592" topLine="289" />
</Cursor>
</File>
<File name="rc_base_actor.h" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5915" topLine="145" />
</Cursor>
</File>
<File name="rc_particles.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6262" topLine="615" />
</Cursor>
</File>
<File name="rc_media.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="49342" topLine="1655" />
</Cursor>
</File>
<File name="rc_windowclose.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="20057" topLine="536" />
@@ -61,182 +114,64 @@
<Collapse line="555" />
</Folding>
</File>
<File name="rc_fx_materials.h" open="0" top="0" tabpos="22" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="16692" topLine="566" />
</Cursor>
<Folding>
<Collapse line="47" />
</Folding>
</File>
<File name="rc_matrix.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="34977" topLine="1288" />
</Cursor>
</File>
<File name="main.cpp" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="133506" topLine="4429" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletCollisionObject.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="384" />
</Cursor>
</File>
<File name="rc_joints.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="310" topLine="0" />
</Cursor>
</File>
<File name="rc_audio.h" open="0" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6531" topLine="311" />
</Cursor>
</File>
<File name="rc_scene.h" open="0" top="0" tabpos="30" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1298" topLine="28" />
</Cursor>
</File>
<File name="rc_spritelib.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="33820" topLine="1256" />
</Cursor>
</File>
<File name="rc_gfx_core.h" open="1" top="1" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="19850" topLine="678" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletcommon.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="924" topLine="6" />
</Cursor>
</File>
<File name="RealisticWater.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="7671" topLine="204" />
</Cursor>
</File>
<File name="rc_sprite2D.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1303" topLine="55" />
</Cursor>
</File>
<File name="rc_sprite_physics.h" open="0" top="0" tabpos="38" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="16031" topLine="523" />
</Cursor>
</File>
<File name="ProjectiveTextures.cpp" open="0" top="0" tabpos="35" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="348" topLine="0" />
</Cursor>
</File>
<File name="rc_font.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletGhostObject.cpp" open="1" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1861" topLine="27" />
</Cursor>
</File>
<File name="rc_actor_material.h" open="0" top="0" tabpos="23" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5301" topLine="744" />
</Cursor>
</File>
<File name="gui_freetype_font.h" open="0" top="0" tabpos="23" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="183" topLine="0" />
</Cursor>
</File>
<File name="rc_actor_physics.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="rc_tilelib.h" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6694" topLine="319" />
</Cursor>
</File>
<File name="CShader.cpp" open="0" top="0" tabpos="26" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="10120" topLine="352" />
</Cursor>
</File>
<File name="gui_freetype_font.cpp" open="0" top="0" tabpos="24" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="792" topLine="0" />
</Cursor>
</File>
<File name="rc_gfx3D.h" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="565" topLine="0" />
</Cursor>
</File>
<File name="ProjectiveTextures.h" open="0" top="0" tabpos="34" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="110" topLine="0" />
</Cursor>
</File>
<File name="rc_func130_cases.h" open="0" top="0" tabpos="32" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="81110" topLine="1966" />
</Cursor>
</File>
<File name="rc_net.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3769" topLine="186" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletSoftBody.cpp" open="1" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="885" topLine="17" />
</Cursor>
</File>
<File name="rc_constraint.h" open="0" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="8391" topLine="231" />
</Cursor>
</File>
<File name="camera.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4758" topLine="241" />
</Cursor>
</File>
<File name="rc_geometry.h" open="0" top="0" tabpos="20" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="20919" topLine="652" />
</Cursor>
</File>
<File name="rc_os_defines.h" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="378" topLine="0" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletWorld.cpp" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="18445" topLine="216" />
</Cursor>
</File>
<File name="rc_tilemap.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="243" topLine="26" />
</Cursor>
</File>
<File name="rc_defines.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="rc_os_defines.h" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="190390" topLine="2847" />
<Cursor1 position="378" topLine="0" />
</Cursor>
</File>
<File name="rc_gfx.h" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="rc_media.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="28149" topLine="1092" />
<Cursor1 position="49342" topLine="1655" />
</Cursor>
</File>
<File name="gui_freetype_font.cpp" open="0" top="0" tabpos="24" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="792" topLine="0" />
</Cursor>
</File>
<File name="camera.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4758" topLine="241" />
</Cursor>
</File>
<File name="rc_physics3D_base.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3283" topLine="66" />
</Cursor>
</File>
<File name="rc_audio.h" open="0" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6531" topLine="311" />
</Cursor>
</File>
<File name="rc_particles.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6262" topLine="615" />
</Cursor>
</File>
<File name="rc_base_actor.h" open="1" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5915" topLine="148" />
</Cursor>
</File>
<File name="rc_constraint.h" open="0" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="8391" topLine="231" />
</Cursor>
</File>
<File name="main.cpp" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="133506" topLine="4429" />
</Cursor>
</File>
<File name="rc_stdlib.h" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@@ -244,14 +179,79 @@
<Cursor1 position="26127" topLine="1131" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletCollisionCallBackInformation.cpp" open="1" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="rc_test.h" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1253" topLine="16" />
<Cursor1 position="115" topLine="0" />
</Cursor>
</File>
<File name="rc_video.h" open="0" top="0" tabpos="21" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="rc_geometry.h" open="0" top="0" tabpos="20" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="169" topLine="6" />
<Cursor1 position="20919" topLine="652" />
</Cursor>
</File>
<File name="rc_actor_animation.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="9592" topLine="289" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBullet.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="7" />
</Cursor>
</File>
<File name="rc_sprite2D.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1303" topLine="55" />
</Cursor>
</File>
<File name="CShader.h" open="0" top="0" tabpos="25" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2314" topLine="101" />
</Cursor>
</File>
<File name="rc_gfx_core.h" open="1" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="19850" topLine="702" />
</Cursor>
</File>
<File name="ProjectiveTextures.h" open="0" top="0" tabpos="34" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="110" topLine="0" />
</Cursor>
</File>
<File name="rc_scene.h" open="0" top="0" tabpos="30" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1298" topLine="28" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletWorld.cpp" open="1" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="18445" topLine="18" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletSoftBody.cpp" open="1" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="885" topLine="2" />
</Cursor>
</File>
<File name="../../irrBullet/src/irrBulletCollisionObject.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="384" />
</Cursor>
</File>
<File name="CShader.cpp" open="0" top="0" tabpos="26" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="10120" topLine="352" />
</Cursor>
</File>
<File name="rc_joints.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="310" topLine="0" />
</Cursor>
</File>
<File name="rc_gfx3D.h" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="565" topLine="0" />
</Cursor>
</File>
</CodeBlocks_layout_file>