Added FX Materials

* Added FX Shader Materials
* Added Projector Actor
This commit is contained in:
n00b
2025-04-11 00:51:47 -04:00
parent 14a315db60
commit b67d63d32c
73 changed files with 5384 additions and 1825 deletions

View File

@@ -1,6 +1,8 @@
#ifndef RC_BASE_ACTOR_H_INCLUDED
#define RC_BASE_ACTOR_H_INCLUDED
#include "ProjectiveTextures.h"
void setSolidProperties(int actor)
{
if(!rc_actor[actor].physics.isSolid)
@@ -727,6 +729,50 @@ int rc_createLightActor()
return actor_id;
}
int rc_createProjectorActor()
{
int actor_id = -1;
CProjectiveTextures* node = new CProjectiveTextures(device, 0, SceneManager, -1);
rc_scene_node actor;
actor.node_type = RC_NODE_TYPE_PROJECTOR;
actor.mesh_node = node;
actor.shadow = NULL;
actor.transition = false;
actor.transition_time = 0;
actor.material_ref_index = -1;
if(!node)
return -1;
for(int i = 0; i < rc_actor.size(); i++)
{
if(!rc_actor[i].mesh_node)
{
actor_id = i;
break;
}
}
if(actor_id < 0)
{
actor_id = rc_actor.size();
rc_actor.push_back(actor);
}
else
{
rc_actor[actor_id] = actor;
}
//Actor RigidBody
rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX;
rc_actor[actor_id].physics.rigid_body = NULL;
rc_actor[actor_id].physics.isSolid = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
return actor_id;
}
//delete actor
void rc_deleteActor(int actor_id)
{
@@ -1522,4 +1568,62 @@ void rc_setTerrainPatchLOD(int actor, int patchX, int patchZ, int lod)
}
}
void rc_setProjectorTarget(int actor, double x, double y, double z)
{
if(actor < 0 || actor >= rc_actor.size())
return;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
projector->setTarget(irr::core::vector3df(x,y,z));
break;
}
}
void rc_getProjectorTarget(int actor, double* x, double* y, double* z)
{
if(actor < 0 || actor >= rc_actor.size())
return;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
*x = projector->getTarget().X;
*y = projector->getTarget().Y;
*z = projector->getTarget().Z;
break;
}
}
void rc_setProjectorFOV(int actor, double fov)
{
if(actor < 0 || actor >= rc_actor.size())
return;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
return projector->setFOV(fov);
}
}
double rc_getProjectorFOV(int actor)
{
if(actor < 0 || actor >= rc_actor.size())
return 0;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
return projector->getFOV();
}
}
#endif // RC_BASE_ACTOR_H_INCLUDED