Added new vector math functions
This commit is contained in:
@@ -39,6 +39,7 @@ Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_physics.bas
|
||||
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/constraint3D.bas"
|
||||
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/camera.bas"
|
||||
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/scene.bas"
|
||||
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/billboard.bas"
|
||||
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/particles.bas"
|
||||
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/lights.bas"
|
||||
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/terrain.bas"
|
||||
|
||||
@@ -53,6 +53,14 @@ Distance2D( DISTANCE2D_X1, DISTANCE2D_Y1, DISTANCE2D_X2, DISTANCE2D_Y2 )
|
||||
Distance3D( DISTANCE3D_X1, DISTANCE3D_Y1, DISTANCE3D_Z1, DISTANCE3D_X2, DISTANCE3D_Y2, DISTANCE3D_Z2 )
|
||||
GetCircleLineIntersection( GETCIRCLELINEINTERSECTION_CIRCLE_X, GETCIRCLELINEINTERSECTION_CIRCLE_Y, GETCIRCLELINEINTERSECTION_RADIUS, GETCIRCLELINEINTERSECTION_X1, GETCIRCLELINEINTERSECTION_Y1, GETCIRCLELINEINTERSECTION_X2, GETCIRCLELINEINTERSECTION_Y2, &GETCIRCLELINEINTERSECTION_IX1, &GETCIRCLELINEINTERSECTION_IY1, &GETCIRCLELINEINTERSECTION_IX2, &GETCIRCLELINEINTERSECTION_IY2 )
|
||||
GetLinePlaneIntersection( &GETLINEPLANEINTERSECTION_LINE_POINT, &GETLINEPLANEINTERSECTION_LINE_DIRECTION, &GETLINEPLANEINTERSECTION_PLANE_POINT_1, &GETLINEPLANEINTERSECTION_PLANE_POINT_2, &GETLINEPLANEINTERSECTION_PLANE_POINT_3, &GETLINEPLANEINTERSECTION_INTERSECTION )
|
||||
rc_getLineAngle( GETLINEANGLE_X1, GETLINEANGLE_Y1, GETLINEANGLE_X2, GETLINEANGLE_Y2 )
|
||||
rc_dotProduct( DOTPRODUCT_X1, DOTPRODUCT_Y1, DOTPRODUCT_Z1, DOTPRODUCT_X2, DOTPRODUCT_Y2, DOTPRODUCT_Z2 )
|
||||
rc_interpolateVector( INTERPOLATEVECTOR_X1, INTERPOLATEVECTOR_Y1, INTERPOLATEVECTOR_Z1, INTERPOLATEVECTOR_X2, INTERPOLATEVECTOR_Y2, INTERPOLATEVECTOR_Z2, INTERPOLATEVECTOR_DISTANCE, &INTERPOLATEVECTOR_IX, &INTERPOLATEVECTOR_IY, &INTERPOLATEVECTOR_IZ )
|
||||
rc_interpolateVectorQ( INTERPOLATEVECTORQ_X1, INTERPOLATEVECTORQ_Y1, INTERPOLATEVECTORQ_Z1, INTERPOLATEVECTORQ_X2, INTERPOLATEVECTORQ_Y2, INTERPOLATEVECTORQ_Z2, INTERPOLATEVECTORQ_X3, INTERPOLATEVECTORQ_Y3, INTERPOLATEVECTORQ_Z3, INTERPOLATEVECTORQ_DISTANCE, &INTERPOLATEVECTORQ_IX, &INTERPOLATEVECTORQ_IY, &INTERPOLATEVECTORQ_IZ )
|
||||
rc_vectorIsBetweenPoints( VECTORISBETWEENPOINTS_X, VECTORISBETWEENPOINTS_Y, VECTORISBETWEENPOINTS_Z, VECTORISBETWEENPOINTS_START_X, VECTORISBETWEENPOINTS_START_Y, VECTORISBETWEENPOINTS_START_Z, VECTORISBETWEENPOINTS_END_X, VECTORISBETWEENPOINTS_END_Y, VECTORISBETWEENPOINTS_END_Z )
|
||||
rc_normalizeVector( NORMALIZEVECTOR_X, NORMALIZEVECTOR_Y, NORMALIZEVECTOR_Z, &NORMALIZEVECTOR_NX, &NORMALIZEVECTOR_NY, &NORMALIZEVECTOR_NZ )
|
||||
rc_getHorizontalAngle( GETHORIZONTALANGLE_X, GETHORIZONTALANGLE_Y, GETHORIZONTALANGLE_Z, &GETHORIZONTALANGLE_HX, &GETHORIZONTALANGLE_HY, &GETHORIZONTALANGLE_HZ )
|
||||
rc_getRotationToTarget( GETROTATIONTOTARGET_X, GETROTATIONTOTARGET_Y, GETROTATIONTOTARGET_Z, GETROTATIONTOTARGET_TGT_X, GETROTATIONTOTARGET_TGT_Y, GETROTATIONTOTARGET_TGT_Z, &GETROTATIONTOTARGET_RX, &GETROTATIONTOTARGET_RY, &GETROTATIONTOTARGET_RZ )
|
||||
rc_intern_asc( ASC_C$ )
|
||||
rc_intern_chr( CHR$_N )
|
||||
rc_intern_insert( INSERT$_SRC$, INSERT$_TGT$, INSERT$_POS )
|
||||
@@ -978,6 +986,8 @@ rc_pipeline_End( )
|
||||
rc_pipeline_Render( )
|
||||
rc_setPhysics3D( SETPHYSICS3D_FLAG )
|
||||
rc_getPhysics3D( )
|
||||
rc_getBillboardSize( GETBILLBOARDSIZE_ACTOR, &GETBILLBOARDSIZE_W, &GETBILLBOARDSIZE_H )
|
||||
rc_setBillboardSize( SETBILLBOARDSIZE_ACTOR, SETBILLBOARDSIZE_W, SETBILLBOARDSIZE_H )
|
||||
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR )
|
||||
rc_stopParticleEmitter( STOPPARTICLEEMITTER_ACTOR )
|
||||
rc_setParticleDirection( SETPARTICLEDIRECTION_ACTOR, SETPARTICLEDIRECTION_X, SETPARTICLEDIRECTION_Y, SETPARTICLEDIRECTION_Z )
|
||||
|
||||
2
rcbasic_build/intern_lib/billboard.bas
Normal file
2
rcbasic_build/intern_lib/billboard.bas
Normal file
@@ -0,0 +1,2 @@
|
||||
Sub GetBillboardSize(actor, ByRef w, ByRef h)
|
||||
Sub SetBillboardSize(actor, w, h)
|
||||
@@ -35,3 +35,11 @@ Function Distance2D(x1, y1, x2, y2)
|
||||
Function Distance3D(x1, y1, z1, x2, y2, z2)
|
||||
function GetCircleLineIntersection(circle_x, circle_y, radius, x1, y1, x2, y2, ByRef ix1, ByRef iy1, ByRef ix2, ByRef iy2)
|
||||
function GetLinePlaneIntersection(ByRef line_point, ByRef line_direction, ByRef plane_point_1, ByRef plane_point_2, ByRef plane_point_3, ByRef intersection)
|
||||
Function GetLineAngle(x1, y1, x2, y2)
|
||||
Function DotProduct(x1, y1, z1, x2, y2, z2)
|
||||
Sub InterpolateVector(x1, y1, z1, x2, y2, z2, distance, ByRef ix, ByRef iy, ByRef iz)
|
||||
Sub InterpolateVectorQ(x1, y1, z1, x2, y2, z2, x3, y3, z3, distance, ByRef ix, ByRef iy, ByRef iz)
|
||||
Function VectorIsBetweenPoints(x, y, z, start_x, start_y, start_z, end_x, end_y, end_z)
|
||||
Sub NormalizeVector(x, y, z, ByRef nx, ByRef ny, ByRef nz)
|
||||
Sub GetHorizontalAngle(x, y, z, ByRef hx, ByRef hy, ByRef hz)
|
||||
Sub GetRotationToTarget(x, y, z, tgt_x, tgt_y, tgt_z, ByRef rx, ByRef ry, ByRef rz)
|
||||
|
||||
@@ -184,6 +184,77 @@ void init_embedded_functions()
|
||||
add_embedded_arg("plane_point_2", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("plane_point_3", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("intersection", ID_TYPE_BYREF_NUM);
|
||||
embed_function("GetLineAngle", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
embed_function("DotProduct", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("z1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
add_embedded_arg("z2", ID_TYPE_NUM);
|
||||
embed_function("InterpolateVector", ID_TYPE_SUB);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("z1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
add_embedded_arg("z2", ID_TYPE_NUM);
|
||||
add_embedded_arg("distance", ID_TYPE_NUM);
|
||||
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("InterpolateVectorQ", ID_TYPE_SUB);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("z1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
add_embedded_arg("z2", ID_TYPE_NUM);
|
||||
add_embedded_arg("x3", ID_TYPE_NUM);
|
||||
add_embedded_arg("y3", ID_TYPE_NUM);
|
||||
add_embedded_arg("z3", ID_TYPE_NUM);
|
||||
add_embedded_arg("distance", ID_TYPE_NUM);
|
||||
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("VectorIsBetweenPoints", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("start_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("start_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("start_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("end_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("end_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("end_z", ID_TYPE_NUM);
|
||||
embed_function("NormalizeVector", ID_TYPE_SUB);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("nx", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("ny", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("nz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("GetHorizontalAngle", ID_TYPE_SUB);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("hx", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("hy", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("hz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("GetRotationToTarget", ID_TYPE_SUB);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("tgt_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("tgt_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("tgt_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("rx", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("ry", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("rz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("Asc", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("c$", ID_TYPE_STR);
|
||||
embed_function("Chr$", ID_TYPE_FN_STR);
|
||||
@@ -3078,6 +3149,14 @@ void init_embedded_functions()
|
||||
embed_function("SetPhysics3D", ID_TYPE_SUB);
|
||||
add_embedded_arg("flag", ID_TYPE_NUM);
|
||||
embed_function("GetPhysics3D", ID_TYPE_FN_NUM);
|
||||
embed_function("GetBillboardSize", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
add_embedded_arg("w", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("h", ID_TYPE_BYREF_NUM);
|
||||
embed_function("SetBillboardSize", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
add_embedded_arg("w", ID_TYPE_NUM);
|
||||
add_embedded_arg("h", ID_TYPE_NUM);
|
||||
embed_function("startParticleEmitter", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
embed_function("stopParticleEmitter", ID_TYPE_SUB);
|
||||
|
||||
Binary file not shown.
@@ -178,6 +178,77 @@ add_embedded_arg("plane_point_1", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("plane_point_2", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("plane_point_3", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("intersection", ID_TYPE_BYREF_NUM);
|
||||
embed_function("GetLineAngle", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
embed_function("DotProduct", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("z1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
add_embedded_arg("z2", ID_TYPE_NUM);
|
||||
embed_function("InterpolateVector", ID_TYPE_SUB);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("z1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
add_embedded_arg("z2", ID_TYPE_NUM);
|
||||
add_embedded_arg("distance", ID_TYPE_NUM);
|
||||
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("InterpolateVectorQ", ID_TYPE_SUB);
|
||||
add_embedded_arg("x1", ID_TYPE_NUM);
|
||||
add_embedded_arg("y1", ID_TYPE_NUM);
|
||||
add_embedded_arg("z1", ID_TYPE_NUM);
|
||||
add_embedded_arg("x2", ID_TYPE_NUM);
|
||||
add_embedded_arg("y2", ID_TYPE_NUM);
|
||||
add_embedded_arg("z2", ID_TYPE_NUM);
|
||||
add_embedded_arg("x3", ID_TYPE_NUM);
|
||||
add_embedded_arg("y3", ID_TYPE_NUM);
|
||||
add_embedded_arg("z3", ID_TYPE_NUM);
|
||||
add_embedded_arg("distance", ID_TYPE_NUM);
|
||||
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("VectorIsBetweenPoints", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("start_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("start_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("start_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("end_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("end_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("end_z", ID_TYPE_NUM);
|
||||
embed_function("NormalizeVector", ID_TYPE_SUB);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("nx", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("ny", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("nz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("GetHorizontalAngle", ID_TYPE_SUB);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("hx", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("hy", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("hz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("GetRotationToTarget", ID_TYPE_SUB);
|
||||
add_embedded_arg("x", ID_TYPE_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_NUM);
|
||||
add_embedded_arg("tgt_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("tgt_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("tgt_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("rx", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("ry", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("rz", ID_TYPE_BYREF_NUM);
|
||||
embed_function("Asc", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("c$", ID_TYPE_STR);
|
||||
embed_function("Chr$", ID_TYPE_FN_STR);
|
||||
@@ -3072,6 +3143,14 @@ embed_function("Pipeline_Render", ID_TYPE_SUB);
|
||||
embed_function("SetPhysics3D", ID_TYPE_SUB);
|
||||
add_embedded_arg("flag", ID_TYPE_NUM);
|
||||
embed_function("GetPhysics3D", ID_TYPE_FN_NUM);
|
||||
embed_function("GetBillboardSize", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
add_embedded_arg("w", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("h", ID_TYPE_BYREF_NUM);
|
||||
embed_function("SetBillboardSize", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
add_embedded_arg("w", ID_TYPE_NUM);
|
||||
add_embedded_arg("h", ID_TYPE_NUM);
|
||||
embed_function("startParticleEmitter", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
embed_function("stopParticleEmitter", ID_TYPE_SUB);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -190,6 +190,30 @@ case FN_GetCircleLineIntersection: //Number Function
|
||||
case FN_GetLinePlaneIntersection: //Number Function
|
||||
rc_push_num(GetLinePlaneIntersection( &GETLINEPLANEINTERSECTION_LINE_POINT, &GETLINEPLANEINTERSECTION_LINE_DIRECTION, &GETLINEPLANEINTERSECTION_PLANE_POINT_1, &GETLINEPLANEINTERSECTION_PLANE_POINT_2, &GETLINEPLANEINTERSECTION_PLANE_POINT_3, &GETLINEPLANEINTERSECTION_INTERSECTION ));
|
||||
break;
|
||||
case FN_GetLineAngle: //Number Function
|
||||
rc_push_num(rc_getLineAngle( GETLINEANGLE_X1, GETLINEANGLE_Y1, GETLINEANGLE_X2, GETLINEANGLE_Y2 ));
|
||||
break;
|
||||
case FN_DotProduct: //Number Function
|
||||
rc_push_num(rc_dotProduct( DOTPRODUCT_X1, DOTPRODUCT_Y1, DOTPRODUCT_Z1, DOTPRODUCT_X2, DOTPRODUCT_Y2, DOTPRODUCT_Z2 ));
|
||||
break;
|
||||
case FN_InterpolateVector: //Sub Procedure
|
||||
rc_interpolateVector( INTERPOLATEVECTOR_X1, INTERPOLATEVECTOR_Y1, INTERPOLATEVECTOR_Z1, INTERPOLATEVECTOR_X2, INTERPOLATEVECTOR_Y2, INTERPOLATEVECTOR_Z2, INTERPOLATEVECTOR_DISTANCE, &INTERPOLATEVECTOR_IX, &INTERPOLATEVECTOR_IY, &INTERPOLATEVECTOR_IZ );
|
||||
break;
|
||||
case FN_InterpolateVectorQ: //Sub Procedure
|
||||
rc_interpolateVectorQ( INTERPOLATEVECTORQ_X1, INTERPOLATEVECTORQ_Y1, INTERPOLATEVECTORQ_Z1, INTERPOLATEVECTORQ_X2, INTERPOLATEVECTORQ_Y2, INTERPOLATEVECTORQ_Z2, INTERPOLATEVECTORQ_X3, INTERPOLATEVECTORQ_Y3, INTERPOLATEVECTORQ_Z3, INTERPOLATEVECTORQ_DISTANCE, &INTERPOLATEVECTORQ_IX, &INTERPOLATEVECTORQ_IY, &INTERPOLATEVECTORQ_IZ );
|
||||
break;
|
||||
case FN_VectorIsBetweenPoints: //Number Function
|
||||
rc_push_num(rc_vectorIsBetweenPoints( VECTORISBETWEENPOINTS_X, VECTORISBETWEENPOINTS_Y, VECTORISBETWEENPOINTS_Z, VECTORISBETWEENPOINTS_START_X, VECTORISBETWEENPOINTS_START_Y, VECTORISBETWEENPOINTS_START_Z, VECTORISBETWEENPOINTS_END_X, VECTORISBETWEENPOINTS_END_Y, VECTORISBETWEENPOINTS_END_Z ));
|
||||
break;
|
||||
case FN_NormalizeVector: //Sub Procedure
|
||||
rc_normalizeVector( NORMALIZEVECTOR_X, NORMALIZEVECTOR_Y, NORMALIZEVECTOR_Z, &NORMALIZEVECTOR_NX, &NORMALIZEVECTOR_NY, &NORMALIZEVECTOR_NZ );
|
||||
break;
|
||||
case FN_GetHorizontalAngle: //Sub Procedure
|
||||
rc_getHorizontalAngle( GETHORIZONTALANGLE_X, GETHORIZONTALANGLE_Y, GETHORIZONTALANGLE_Z, &GETHORIZONTALANGLE_HX, &GETHORIZONTALANGLE_HY, &GETHORIZONTALANGLE_HZ );
|
||||
break;
|
||||
case FN_GetRotationToTarget: //Sub Procedure
|
||||
rc_getRotationToTarget( GETROTATIONTOTARGET_X, GETROTATIONTOTARGET_Y, GETROTATIONTOTARGET_Z, GETROTATIONTOTARGET_TGT_X, GETROTATIONTOTARGET_TGT_Y, GETROTATIONTOTARGET_TGT_Z, &GETROTATIONTOTARGET_RX, &GETROTATIONTOTARGET_RY, &GETROTATIONTOTARGET_RZ );
|
||||
break;
|
||||
case FN_Asc: //Number Function
|
||||
rc_push_num(rc_intern_asc( ASC_C$ ));
|
||||
break;
|
||||
@@ -2966,6 +2990,12 @@ case FN_SetPhysics3D: //Sub Procedure
|
||||
case FN_GetPhysics3D: //Number Function
|
||||
rc_push_num(rc_getPhysics3D( ));
|
||||
break;
|
||||
case FN_GetBillboardSize: //Sub Procedure
|
||||
rc_getBillboardSize( GETBILLBOARDSIZE_ACTOR, &GETBILLBOARDSIZE_W, &GETBILLBOARDSIZE_H );
|
||||
break;
|
||||
case FN_SetBillboardSize: //Sub Procedure
|
||||
rc_setBillboardSize( SETBILLBOARDSIZE_ACTOR, SETBILLBOARDSIZE_W, SETBILLBOARDSIZE_H );
|
||||
break;
|
||||
case FN_startParticleEmitter: //Sub Procedure
|
||||
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR );
|
||||
break;
|
||||
|
||||
@@ -156,7 +156,8 @@ void CProjectiveTextures::render()
|
||||
{
|
||||
projMat.MaterialType = (irr::video::E_MATERIAL_TYPE)projTex;
|
||||
projMat.TextureLayer[0].Texture = texture;
|
||||
// projMat.TextureLayer[0].TextureWrap = ETC_CLAMP_TO_BORDER;
|
||||
projMat.TextureLayer[0].TextureWrapU = irr::video::ETC_CLAMP_TO_BORDER;
|
||||
projMat.TextureLayer[0].TextureWrapV = irr::video::ETC_CLAMP_TO_BORDER;
|
||||
|
||||
pVideo->setTransform(irr::video::ETS_WORLD,nodeArray[i]->getAbsoluteTransformation());
|
||||
pVideo->setMaterial(projMat);
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
#include "rc_gfx.h"
|
||||
#include "rc_gfx3D.h"
|
||||
#include "rc_matrix.h"
|
||||
#include "rc_vectorMath.h"
|
||||
#include "rc_geometry.h"
|
||||
#include "rc_audio.h"
|
||||
#include "rc_net.h"
|
||||
|
||||
@@ -2841,6 +2841,39 @@ void rc_setTerrainPatchLOD(int actor, int patchX, int patchZ, int lod)
|
||||
}
|
||||
|
||||
|
||||
//BILLBOARDS
|
||||
void rc_setBillboardSize(int actor, double w, double h)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_BILLBOARD:
|
||||
irr::scene::IBillboardSceneNode* node = (irr::scene::IBillboardSceneNode*) rc_actor[actor].mesh_node;
|
||||
node->setSize(irr::core::dimension2df(w, h));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void rc_getBillboardSize(int actor, double* w, double* h)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
return;
|
||||
|
||||
switch(rc_actor[actor].node_type)
|
||||
{
|
||||
case RC_NODE_TYPE_BILLBOARD:
|
||||
irr::scene::IBillboardSceneNode* node = (irr::scene::IBillboardSceneNode*) rc_actor[actor].mesh_node;
|
||||
*w = node->getSize().Width;
|
||||
*h = node->getSize().Height;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//PROJECTORS
|
||||
void rc_setProjectorTarget(int actor, double x, double y, double z)
|
||||
{
|
||||
if(actor < 0 || actor >= rc_actor.size())
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -190,6 +190,30 @@ case FN_GetCircleLineIntersection: //Number Function
|
||||
case FN_GetLinePlaneIntersection: //Number Function
|
||||
rc_push_num(GetLinePlaneIntersection( &GETLINEPLANEINTERSECTION_LINE_POINT, &GETLINEPLANEINTERSECTION_LINE_DIRECTION, &GETLINEPLANEINTERSECTION_PLANE_POINT_1, &GETLINEPLANEINTERSECTION_PLANE_POINT_2, &GETLINEPLANEINTERSECTION_PLANE_POINT_3, &GETLINEPLANEINTERSECTION_INTERSECTION ));
|
||||
break;
|
||||
case FN_GetLineAngle: //Number Function
|
||||
rc_push_num(rc_getLineAngle( GETLINEANGLE_X1, GETLINEANGLE_Y1, GETLINEANGLE_X2, GETLINEANGLE_Y2 ));
|
||||
break;
|
||||
case FN_DotProduct: //Number Function
|
||||
rc_push_num(rc_dotProduct( DOTPRODUCT_X1, DOTPRODUCT_Y1, DOTPRODUCT_Z1, DOTPRODUCT_X2, DOTPRODUCT_Y2, DOTPRODUCT_Z2 ));
|
||||
break;
|
||||
case FN_InterpolateVector: //Sub Procedure
|
||||
rc_interpolateVector( INTERPOLATEVECTOR_X1, INTERPOLATEVECTOR_Y1, INTERPOLATEVECTOR_Z1, INTERPOLATEVECTOR_X2, INTERPOLATEVECTOR_Y2, INTERPOLATEVECTOR_Z2, INTERPOLATEVECTOR_DISTANCE, &INTERPOLATEVECTOR_IX, &INTERPOLATEVECTOR_IY, &INTERPOLATEVECTOR_IZ );
|
||||
break;
|
||||
case FN_InterpolateVectorQ: //Sub Procedure
|
||||
rc_interpolateVectorQ( INTERPOLATEVECTORQ_X1, INTERPOLATEVECTORQ_Y1, INTERPOLATEVECTORQ_Z1, INTERPOLATEVECTORQ_X2, INTERPOLATEVECTORQ_Y2, INTERPOLATEVECTORQ_Z2, INTERPOLATEVECTORQ_X3, INTERPOLATEVECTORQ_Y3, INTERPOLATEVECTORQ_Z3, INTERPOLATEVECTORQ_DISTANCE, &INTERPOLATEVECTORQ_IX, &INTERPOLATEVECTORQ_IY, &INTERPOLATEVECTORQ_IZ );
|
||||
break;
|
||||
case FN_VectorIsBetweenPoints: //Number Function
|
||||
rc_push_num(rc_vectorIsBetweenPoints( VECTORISBETWEENPOINTS_X, VECTORISBETWEENPOINTS_Y, VECTORISBETWEENPOINTS_Z, VECTORISBETWEENPOINTS_START_X, VECTORISBETWEENPOINTS_START_Y, VECTORISBETWEENPOINTS_START_Z, VECTORISBETWEENPOINTS_END_X, VECTORISBETWEENPOINTS_END_Y, VECTORISBETWEENPOINTS_END_Z ));
|
||||
break;
|
||||
case FN_NormalizeVector: //Sub Procedure
|
||||
rc_normalizeVector( NORMALIZEVECTOR_X, NORMALIZEVECTOR_Y, NORMALIZEVECTOR_Z, &NORMALIZEVECTOR_NX, &NORMALIZEVECTOR_NY, &NORMALIZEVECTOR_NZ );
|
||||
break;
|
||||
case FN_GetHorizontalAngle: //Sub Procedure
|
||||
rc_getHorizontalAngle( GETHORIZONTALANGLE_X, GETHORIZONTALANGLE_Y, GETHORIZONTALANGLE_Z, &GETHORIZONTALANGLE_HX, &GETHORIZONTALANGLE_HY, &GETHORIZONTALANGLE_HZ );
|
||||
break;
|
||||
case FN_GetRotationToTarget: //Sub Procedure
|
||||
rc_getRotationToTarget( GETROTATIONTOTARGET_X, GETROTATIONTOTARGET_Y, GETROTATIONTOTARGET_Z, GETROTATIONTOTARGET_TGT_X, GETROTATIONTOTARGET_TGT_Y, GETROTATIONTOTARGET_TGT_Z, &GETROTATIONTOTARGET_RX, &GETROTATIONTOTARGET_RY, &GETROTATIONTOTARGET_RZ );
|
||||
break;
|
||||
case FN_Asc: //Number Function
|
||||
rc_push_num(rc_intern_asc( ASC_C$ ));
|
||||
break;
|
||||
@@ -2966,6 +2990,12 @@ case FN_SetPhysics3D: //Sub Procedure
|
||||
case FN_GetPhysics3D: //Number Function
|
||||
rc_push_num(rc_getPhysics3D( ));
|
||||
break;
|
||||
case FN_GetBillboardSize: //Sub Procedure
|
||||
rc_getBillboardSize( GETBILLBOARDSIZE_ACTOR, &GETBILLBOARDSIZE_W, &GETBILLBOARDSIZE_H );
|
||||
break;
|
||||
case FN_SetBillboardSize: //Sub Procedure
|
||||
rc_setBillboardSize( SETBILLBOARDSIZE_ACTOR, SETBILLBOARDSIZE_W, SETBILLBOARDSIZE_H );
|
||||
break;
|
||||
case FN_startParticleEmitter: //Sub Procedure
|
||||
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR );
|
||||
break;
|
||||
|
||||
76
rcbasic_runtime/rc_vectorMath.h
Normal file
76
rcbasic_runtime/rc_vectorMath.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef RC_VECTORMATH_H_INCLUDED
|
||||
#define RC_VECTORMATH_H_INCLUDED
|
||||
|
||||
#include <irrlicht.h>
|
||||
|
||||
|
||||
double rc_getLineAngle(double x1, double y1, double x2, double y2)
|
||||
{
|
||||
irr::core::vector2df v(x1, y1);
|
||||
double angle = (double)v.getAngleWith(irr::core::vector2df(x2, y2));
|
||||
return angle;
|
||||
}
|
||||
|
||||
|
||||
double rc_dotProduct(double x1, double y1, double z1, double x2, double y2, double z2)
|
||||
{
|
||||
irr::core::vector3df v(x1, y1, z1);
|
||||
double dp = (double)v.dotProduct(irr::core::vector3df(x2, y2, z2));
|
||||
return dp;
|
||||
}
|
||||
|
||||
void rc_interpolateVector(double x1, double y1, double z1, double x2, double y2, double z2, double distance, double* ix, double* iy, double* iz)
|
||||
{
|
||||
irr::core::vector3df v(x1, y1, z1);
|
||||
irr::core::vector3df iv = v.getInterpolated(irr::core::vector3df(x2, y2, z2), distance);
|
||||
*ix = iv.X;
|
||||
*iy = iv.Y;
|
||||
*iz = iv.Z;
|
||||
}
|
||||
|
||||
void rc_interpolateVectorQ(double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double distance, double* ix, double* iy, double* iz)
|
||||
{
|
||||
irr::core::vector3df v(x1, y1, z1);
|
||||
irr::core::vector3df iv = v.getInterpolated_quadratic(irr::core::vector3df(x2, y2, z2), irr::core::vector3df(x3, y3, z3), distance);
|
||||
*ix = iv.X;
|
||||
*iy = iv.Y;
|
||||
*iz = iv.Z;
|
||||
}
|
||||
|
||||
|
||||
bool rc_vectorIsBetweenPoints (double x, double y, double z, double start_x, double start_y, double start_z, double end_x, double end_y, double end_z)
|
||||
{
|
||||
return irr::core::vector3df(x, y, z).isBetweenPoints(irr::core::vector3df(start_x, start_y, start_z), irr::core::vector3df(end_x, end_y, end_z));
|
||||
}
|
||||
|
||||
void rc_normalizeVector(double x, double y, double z, double* nx, double* ny, double* nz)
|
||||
{
|
||||
irr::core::vector3df v(x, y, z);
|
||||
irr::core::vector3df nv = v.normalize();
|
||||
*nx = nv.X;
|
||||
*ny = nv.Y;
|
||||
*nz = nv.Z;
|
||||
}
|
||||
|
||||
void rc_getHorizontalAngle(double x, double y, double z, double* hx, double* hy, double* hz)
|
||||
{
|
||||
irr::core::vector3df angle(x, y, z);
|
||||
irr::core::vector3df h_angle = angle.getHorizontalAngle();
|
||||
*hx = h_angle.X;
|
||||
*hy = h_angle.Y;
|
||||
*hz = h_angle.Z;
|
||||
}
|
||||
|
||||
|
||||
void rc_getRotationToTarget(double x, double y, double z, double tgt_x, double tgt_y, double tgt_z, double* rx, double* ry, double* rz)
|
||||
{
|
||||
irr::core::vector3df v(x, y, z);
|
||||
irr::core::vector3df rot = v.rotationToDirection(irr::core::vector3df(tgt_x, tgt_y, tgt_z));
|
||||
*rx = rot.X;
|
||||
*ry = rot.Y;
|
||||
*rz = rot.Z;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // RC_VECTORMATH_H_INCLUDED
|
||||
@@ -1,5 +1,5 @@
|
||||
# depslib dependency file v1.0
|
||||
1771642154 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
|
||||
1771816782 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
|
||||
"rc_os_defines.h"
|
||||
<emscripten.h>
|
||||
<sys/param.h>
|
||||
@@ -23,6 +23,7 @@
|
||||
"rc_gfx.h"
|
||||
"rc_gfx3D.h"
|
||||
"rc_matrix.h"
|
||||
"rc_vectorMath.h"
|
||||
"rc_geometry.h"
|
||||
"rc_audio.h"
|
||||
"rc_net.h"
|
||||
@@ -34,10 +35,10 @@
|
||||
<irrtheora.h>
|
||||
"rc_func130_cases.h"
|
||||
|
||||
1771296059 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
|
||||
1771823013 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
|
||||
<TargetConditionals.h>
|
||||
|
||||
1771750699 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
|
||||
1771822804 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
|
||||
|
||||
1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
|
||||
"rc_os_defines.h"
|
||||
@@ -1275,7 +1276,7 @@
|
||||
"rc_post_fx.h"
|
||||
<irrtheora.h>
|
||||
|
||||
1771745708 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
|
||||
1771813730 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
|
||||
"SDL.h"
|
||||
"btBulletDynamicsCommon.h"
|
||||
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
|
||||
@@ -2281,7 +2282,7 @@
|
||||
"rc_gfx_core.h"
|
||||
<irrtheora.h>
|
||||
|
||||
1771750699 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
|
||||
1771822804 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
|
||||
|
||||
1760243468 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
|
||||
"irrBullet.h"
|
||||
@@ -2533,7 +2534,7 @@
|
||||
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
|
||||
"rc_gfx_core.h"
|
||||
|
||||
1771748492 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
|
||||
1771808408 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
|
||||
"ProjectiveTextures.h"
|
||||
"rc_matrix.h"
|
||||
|
||||
@@ -2591,7 +2592,7 @@
|
||||
1771743310 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.h
|
||||
<irrlicht.h>
|
||||
|
||||
1771745563 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp
|
||||
1771813624 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp
|
||||
"ProjectiveTextures.h"
|
||||
<string>
|
||||
|
||||
@@ -2771,3 +2772,6 @@
|
||||
"btBulletCollisionCommon.h"
|
||||
"irrBulletCompoundShape.h"
|
||||
|
||||
1771822932 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_vectorMath.h
|
||||
<irrlicht.h>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user