Added plane mesh and new water node
* Changed the water actor to irrlichts built-in water surface node * Added CreatePlaneMesh() function
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -541,9 +541,6 @@ case FN_SetWindowAlwaysOnTop: //Sub Procedure
|
||||
case FN_SetMouseRelative: //Sub Procedure
|
||||
rc_setMouseRelative( SETMOUSERELATIVE_FLAG );
|
||||
break;
|
||||
case FN_SetWindowVSync: //Sub Procedure
|
||||
rc_setWindowVSync( SETWINDOWVSYNC_FLAG );
|
||||
break;
|
||||
case FN_FlashWindow: //Number Function
|
||||
rc_push_num(rc_flashWindow( FLASHWINDOW_FLAG ));
|
||||
break;
|
||||
@@ -557,7 +554,7 @@ case FN_CloseCanvas: //Sub Procedure
|
||||
rc_canvasClose( CLOSECANVAS_C_NUM );
|
||||
break;
|
||||
case FN_OpenCanvas3D: //Number Function
|
||||
rc_push_num(rc_canvasOpen3D( OPENCANVAS3D_W, OPENCANVAS3D_H, OPENCANVAS3D_VIEWPORT_X, OPENCANVAS3D_VIEWPORT_Y, OPENCANVAS3D_VIEWPORT_W, OPENCANVAS3D_VIEWPORT_H, OPENCANVAS3D_MODE ));
|
||||
rc_push_num(rc_canvasOpen3D( OPENCANVAS3D_VIEWPORT_X, OPENCANVAS3D_VIEWPORT_Y, OPENCANVAS3D_VIEWPORT_W, OPENCANVAS3D_VIEWPORT_H, OPENCANVAS3D_MODE ));
|
||||
break;
|
||||
case FN_SetCanvasVisible: //Sub Procedure
|
||||
rc_setCanvasVisible( SETCANVASVISIBLE_C_NUM, SETCANVASVISIBLE_FLAG );
|
||||
@@ -616,8 +613,8 @@ case FN_ActiveCanvas: //Number Function
|
||||
case FN_SetCanvasPhysics2D: //Sub Procedure
|
||||
rc_setCanvasPhysics2D( SETCANVASPHYSICS2D_C_NUM, SETCANVASPHYSICS2D_STATE );
|
||||
break;
|
||||
case FN_OpenSpriteCanvas: //Number Function
|
||||
rc_push_num(rc_canvasOpenSpriteLayer( OPENSPRITECANVAS_W, OPENSPRITECANVAS_H, OPENSPRITECANVAS_VIEWPORT_X, OPENSPRITECANVAS_VIEWPORT_Y, OPENSPRITECANVAS_VIEWPORT_W, OPENSPRITECANVAS_VIEWPORT_H ));
|
||||
case FN_OpenCanvasSpriteLayer: //Number Function
|
||||
rc_push_num(rc_canvasOpenSpriteLayer( OPENCANVASSPRITELAYER_W, OPENCANVASSPRITELAYER_H, OPENCANVASSPRITELAYER_VIEWPORT_X, OPENCANVASSPRITELAYER_VIEWPORT_Y, OPENCANVASSPRITELAYER_VIEWPORT_W, OPENCANVASSPRITELAYER_VIEWPORT_H ));
|
||||
break;
|
||||
case FN_Circle: //Sub Procedure
|
||||
rc_drawCircle( CIRCLE_X, CIRCLE_Y, CIRCLE_RADIUS );
|
||||
@@ -1397,6 +1394,9 @@ case FN_AddMeshBuffer: //Sub Procedure
|
||||
case FN_LoadMeshFromArchive: //Number Function
|
||||
rc_push_num(rc_loadMeshFromArchive( LOADMESHFROMARCHIVE_ARCHIVE$, LOADMESHFROMARCHIVE_MESH_FILE$ ));
|
||||
break;
|
||||
case FN_CreatePlaneMesh: //Number Function
|
||||
rc_push_num(rc_createPlaneMesh( CREATEPLANEMESH_W, CREATEPLANEMESH_H, CREATEPLANEMESH_TILECOUNT_W, CREATEPLANEMESH_TILECOUNT_H ));
|
||||
break;
|
||||
case FN_CreateMeshActor: //Number Function
|
||||
rc_push_num(rc_createMeshActor( CREATEMESHACTOR_MESH ));
|
||||
break;
|
||||
@@ -1409,8 +1409,8 @@ case FN_CreateCubeActor: //Number Function
|
||||
case FN_CreateSphereActor: //Number Function
|
||||
rc_push_num(rc_createSphereActor( CREATESPHEREACTOR_RADIUS ));
|
||||
break;
|
||||
case FN_CreateWaterPlaneActor: //Number Function
|
||||
rc_push_num(rc_createWaterPlaneActor( CREATEWATERPLANEACTOR_W, CREATEWATERPLANEACTOR_H ));
|
||||
case FN_CreateWaterActor: //Number Function
|
||||
rc_push_num(rc_createWaterActor( CREATEWATERACTOR_MESH, CREATEWATERACTOR_WAVEHEIGHT, CREATEWATERACTOR_WAVESPEED, CREATEWATERACTOR_WAVELENGTH ));
|
||||
break;
|
||||
case FN_CreateLightActor: //Number Function
|
||||
rc_push_num(rc_createLightActor( ));
|
||||
@@ -2261,36 +2261,6 @@ case FN_SetTerrainCameraRotationDelta: //Sub Procedure
|
||||
case FN_SetTerrainPatchLOD: //Sub Procedure
|
||||
rc_setTerrainPatchLOD( SETTERRAINPATCHLOD_ACTOR, SETTERRAINPATCHLOD_PATCHX, SETTERRAINPATCHLOD_PATCHZ, SETTERRAINPATCHLOD_LOD );
|
||||
break;
|
||||
case FN_setWaterWindForce: //Sub Procedure
|
||||
rc_setWaterWindForce( SETWATERWINDFORCE_ACTOR, SETWATERWINDFORCE_F );
|
||||
break;
|
||||
case FN_getWaterWindForce: //Number Function
|
||||
rc_push_num(rc_getWaterWindForce( GETWATERWINDFORCE_ACTOR ));
|
||||
break;
|
||||
case FN_setWaterWaveHeight: //Sub Procedure
|
||||
rc_setWaterWaveHeight( SETWATERWAVEHEIGHT_ACTOR, SETWATERWAVEHEIGHT_H );
|
||||
break;
|
||||
case FN_getWaterWaveHeight: //Number Function
|
||||
rc_push_num(rc_getWaterWaveHeight( GETWATERWAVEHEIGHT_ACTOR ));
|
||||
break;
|
||||
case FN_setWaterWindDirection: //Sub Procedure
|
||||
rc_setWaterWindDirection( SETWATERWINDDIRECTION_ACTOR, SETWATERWINDDIRECTION_X, SETWATERWINDDIRECTION_Z );
|
||||
break;
|
||||
case FN_getWaterWindDirection: //Sub Procedure
|
||||
rc_getWaterWindDirection( GETWATERWINDDIRECTION_ACTOR, &GETWATERWINDDIRECTION_X, &GETWATERWINDDIRECTION_Z );
|
||||
break;
|
||||
case FN_setWaterColor: //Sub Procedure
|
||||
rc_setWaterColor( SETWATERCOLOR_ACTOR, SETWATERCOLOR_C );
|
||||
break;
|
||||
case FN_getWaterColor: //Number Function
|
||||
rc_push_num(rc_getWaterColor( GETWATERCOLOR_ACTOR ));
|
||||
break;
|
||||
case FN_setWaterColorBlendFactor: //Sub Procedure
|
||||
rc_setWaterColorBlendFactor( SETWATERCOLORBLENDFACTOR_ACTOR, SETWATERCOLORBLENDFACTOR_CBFACTOR );
|
||||
break;
|
||||
case FN_getWaterColorBlendFactor: //Number Function
|
||||
rc_push_num(rc_getWaterColorBlendFactor( GETWATERCOLORBLENDFACTOR_ACTOR ));
|
||||
break;
|
||||
case FN_SetActorAnimation: //Sub Procedure
|
||||
rc_setActorAnimation( SETACTORANIMATION_ACTOR, SETACTORANIMATION_START_FRAME, SETACTORANIMATION_END_FRAME );
|
||||
break;
|
||||
|
||||
@@ -125,6 +125,25 @@ int rc_createMesh()
|
||||
return mesh_id;
|
||||
}
|
||||
|
||||
int rc_createPlaneMesh(double w, double h, double tileCount_w, double tileCount_h)
|
||||
{
|
||||
irr::scene::IAnimatedMesh* mesh = SceneManager->addHillPlaneMesh( "plane",
|
||||
irr::core::dimension2d<irr::f32>(w/tileCount_w, h/tileCount_h),
|
||||
irr::core::dimension2d<irr::u32>(tileCount_w, tileCount_h));
|
||||
|
||||
if(!mesh)
|
||||
return -1;
|
||||
|
||||
int mesh_id = rc_mesh.size();
|
||||
rc_mesh_obj mesh_obj;
|
||||
mesh_obj.mesh = mesh;
|
||||
mesh_obj.mesh_type = RC_MESH_TYPE_ANIMATED;
|
||||
|
||||
rc_mesh.push_back(mesh_obj);
|
||||
|
||||
return mesh_id;
|
||||
}
|
||||
|
||||
|
||||
//create mesh from geometry data [TODO]
|
||||
bool rc_addMeshBuffer(int mesh_id, int vertex_count, double* vertex_data, double* normal_data, double* uv_data, int index_count, double* index_data)
|
||||
@@ -734,10 +753,18 @@ int rc_createSphereActor(double radius)
|
||||
}
|
||||
|
||||
//add mesh actor to scene
|
||||
int rc_createWaterPlaneActor(double w, double h)
|
||||
int rc_createWaterActor(int mesh_id, double waveHeight, double waveSpeed, double waveLength)
|
||||
{
|
||||
int actor_id = -1;
|
||||
RealisticWaterSceneNode* node = new RealisticWaterSceneNode(SceneManager, w, h);
|
||||
|
||||
if(mesh_id < 0 || mesh_id >= rc_mesh.size())
|
||||
return -1;
|
||||
|
||||
if(!rc_mesh[mesh_id].mesh)
|
||||
return -1;
|
||||
|
||||
irr::scene::ISceneNode* node = SceneManager->addWaterSurfaceSceneNode(rc_mesh[mesh_id].mesh, waveHeight, waveSpeed, waveLength);
|
||||
|
||||
rc_scene_node actor;
|
||||
actor.node_type = RC_NODE_TYPE_WATER;
|
||||
actor.mesh_node = node;
|
||||
@@ -887,154 +914,6 @@ void rc_deleteActor(int actor_id)
|
||||
rc_actor[actor_id].material_ref_index = -1;
|
||||
}
|
||||
|
||||
void rc_setWaterWindForce(int actor, double f)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
water->setWindForce(f);
|
||||
}
|
||||
}
|
||||
|
||||
double rc_getWaterWindForce(int actor)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return 0;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
return water->getWindForce();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rc_setWaterWaveHeight(int actor, double h)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
water->setWaveHeight(h);
|
||||
}
|
||||
}
|
||||
|
||||
double rc_getWaterWaveHeight(int actor)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return 0;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
return water->getWaveHeight();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rc_setWaterWindDirection(int actor, double x, double z)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
water->setWindDirection( irr::core::vector2df(x, z));
|
||||
}
|
||||
}
|
||||
|
||||
void rc_getWaterWindDirection(int actor, double* x, double* z)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
*x = 0;
|
||||
*z = 0;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
irr::core::vector2df v = water->getWindDirection();
|
||||
*x = v.X;
|
||||
*z = v.Y;
|
||||
}
|
||||
}
|
||||
|
||||
void rc_setWaterColor(int actor, Uint32 c)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
irr::video::SColor color;
|
||||
color.set(c);
|
||||
SColorf cf(color);
|
||||
water->setWaterColor( cf );
|
||||
}
|
||||
}
|
||||
|
||||
irr::u32 rc_getWaterColor(int actor)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return 0;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
irr::video::SColorf color = water->getWaterColor();
|
||||
return color.toSColor().color;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void rc_setWaterColorBlendFactor(int actor, double cbfactor)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
water->setColorBlendFactor(cbfactor);
|
||||
}
|
||||
}
|
||||
|
||||
double rc_getWaterColorBlendFactor(int actor)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return 0;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_WATER:
|
||||
RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node;
|
||||
return water->getColorBlendFactor();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//set actor texture
|
||||
void rc_setActorTexture(int actor, int layer, int image_id)
|
||||
|
||||
Reference in New Issue
Block a user