Add wall flag, collision. Fix precalc BG mode.
This commit is contained in:
parent
0a1ab4b51d
commit
f03d4e03b7
@ -35,7 +35,7 @@ LDFLAGS += -ltap
|
||||
LDFLAGS += -lcd
|
||||
LDFLAGS += -Wl,--end-group
|
||||
|
||||
include $(THISDIR)/thirdparty/nugget/common.mk
|
||||
include $(THISDIR)thirdparty/nugget/common.mk
|
||||
|
||||
# convert TIM file to bin
|
||||
%.o: %.tim
|
||||
|
@ -59,6 +59,7 @@ typedef struct MESH {
|
||||
short isAnim;
|
||||
short isActor;
|
||||
short isLevel;
|
||||
short isWall;
|
||||
short isBG;
|
||||
short isSprite;
|
||||
long p;
|
||||
@ -75,7 +76,7 @@ typedef struct QUAD {
|
||||
} QUAD;
|
||||
|
||||
typedef struct CAMPOS {
|
||||
VECTOR pos;
|
||||
SVECTOR pos;
|
||||
SVECTOR rot;
|
||||
} CAMPOS;
|
||||
|
||||
|
@ -29,4 +29,4 @@ void getCameraZY( int * z, int * y, int actorZ, int actorY, int angleX, int dist
|
||||
void applyCamera(CAMERA * cam);
|
||||
void setCameraPos(CAMERA * camera, SVECTOR * pos, SVECTOR * rot);
|
||||
|
||||
void setCameraMode(LEVEL * curLvl, CAMERA * camera, VECTOR * posToActor, VECTOR * angle, VECTOR * angleCam, short curCamAngle, int camMode, int * lerping);
|
||||
void setCameraMode(LEVEL * curLvl, CAMERA * camera, VECTOR * posToActor, VECTOR * angle, VECTOR * angleCam, short *curCamAngle, int camMode, int * lerping);
|
||||
|
@ -90,8 +90,8 @@ BODY level0_modelCube_body = {
|
||||
{0, 0, 0, 0},
|
||||
0,-236,23, 0,
|
||||
0,-1024,0, 0,
|
||||
1,
|
||||
ONE/1,
|
||||
5,
|
||||
ONE/5,
|
||||
-33,-32,-33, 0,
|
||||
33,32,33, 0,
|
||||
0,
|
||||
@ -122,6 +122,7 @@ MESH level0_meshCube = {
|
||||
0, // isAnim
|
||||
1, // isActor
|
||||
0, // isLevel
|
||||
0, // isWall
|
||||
0, // isBG
|
||||
0,// isSprite
|
||||
0,
|
||||
@ -914,6 +915,7 @@ MESH level0_meshPlane = {
|
||||
{0},
|
||||
{0,0,0, 0},
|
||||
{0,0,0, 0},
|
||||
0, // isWall
|
||||
0, // isProp
|
||||
0, // isRigidBody
|
||||
0, // isStaticBody
|
||||
|
@ -1,74 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
#include "../custom_types.h"
|
||||
|
||||
extern LEVEL level0;
|
||||
|
||||
extern CVECTOR level0_BGc;
|
||||
|
||||
extern VECTOR level0_BKc;
|
||||
|
||||
extern CAMPOS level0_camPos_Camera;
|
||||
|
||||
extern CAMPATH level0_camPath;
|
||||
|
||||
extern MATRIX level0_lgtmat;
|
||||
|
||||
extern MATRIX level0_cmat;
|
||||
|
||||
extern SVECTOR modelCube_mesh[];
|
||||
|
||||
extern SVECTOR level0_modelCube_normal[];
|
||||
|
||||
extern CVECTOR level0_modelCube_color[];
|
||||
|
||||
extern PRIM level0_modelCube_index[];
|
||||
|
||||
extern BODY level0_modelCube_body;
|
||||
|
||||
extern TMESH level0_modelCube;
|
||||
|
||||
extern MESH level0_meshCube;
|
||||
|
||||
extern SVECTOR modelPlane_mesh[];
|
||||
|
||||
extern SVECTOR level0_modelPlane_normal[];
|
||||
|
||||
extern CVECTOR level0_modelPlane_color[];
|
||||
|
||||
extern PRIM level0_modelPlane_index[];
|
||||
|
||||
extern BODY level0_modelPlane_body;
|
||||
|
||||
extern TMESH level0_modelPlane;
|
||||
|
||||
extern MESH level0_meshPlane;
|
||||
|
||||
extern MESH * level0_meshes[2];
|
||||
|
||||
extern int level0_meshes_length;
|
||||
|
||||
extern CAMANGLE level0_camAngle_Camera;
|
||||
|
||||
extern CAMANGLE * level0_camAngles[0];
|
||||
|
||||
extern SIBLINGS level0_nodePlane_siblings;
|
||||
|
||||
extern CHILDREN level0_nodePlane_objects;
|
||||
|
||||
extern CHILDREN level0_nodePlane_rigidbodies;
|
||||
|
||||
extern NODE level0_nodePlane;
|
||||
|
||||
extern MESH * level0_actorPtr;
|
||||
|
||||
extern MESH * level0_levelPtr;
|
||||
|
||||
extern MESH * level0_propPtr;
|
||||
|
||||
extern CAMANGLE * level0_camPtr;
|
||||
|
||||
extern NODE * level0_curNode;
|
||||
|
||||
extern NODE level0_nodePlane;
|
||||
|
||||
|
21184
levels/level1.c
21184
levels/level1.c
File diff suppressed because it is too large
Load Diff
207
levels/level1.h
207
levels/level1.h
@ -2,350 +2,177 @@
|
||||
|
||||
#include "../custom_types.h"
|
||||
|
||||
extern CVECTOR level1_BGc; // Far color
|
||||
|
||||
extern VECTOR level1_BKc;
|
||||
|
||||
extern LEVEL level1;
|
||||
|
||||
extern CVECTOR level1_BGc;
|
||||
extern VECTOR level1_BKc;
|
||||
extern CAMPOS level1_camPos_camPath;
|
||||
|
||||
extern CAMPOS level1_camPos_camPath_001;
|
||||
|
||||
extern CAMPOS level1_camPos_camPath_002;
|
||||
|
||||
extern CAMPOS level1_camPos_camPath_003;
|
||||
|
||||
extern CAMPOS level1_camPos_camPath_004;
|
||||
|
||||
extern CAMPOS level1_camPos_camPath_005;
|
||||
|
||||
extern CAMPATH level1_camPath;
|
||||
|
||||
extern MATRIX level1_lgtmat;
|
||||
|
||||
extern MATRIX level1_cmat;
|
||||
|
||||
extern SVECTOR modelCube_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelCube_normal[];
|
||||
|
||||
extern SVECTOR level1_modelCube_uv[];
|
||||
|
||||
extern CVECTOR level1_modelCube_color[];
|
||||
|
||||
extern PRIM level1_modelCube_index[];
|
||||
|
||||
extern BODY level1_modelCube_body;
|
||||
|
||||
extern TMESH level1_modelCube;
|
||||
|
||||
extern unsigned long _binary_TIM_cat_tim_start[];
|
||||
|
||||
extern unsigned long _binary_TIM_cat_tim_end[];
|
||||
|
||||
extern unsigned long _binary_TIM_cat_tim_length;
|
||||
|
||||
extern TIM_IMAGE level1_tim_cat;
|
||||
|
||||
extern MESH level1_meshCube;
|
||||
|
||||
extern SVECTOR modelCylindre_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelCylindre_normal[];
|
||||
|
||||
extern SVECTOR level1_modelCylindre_uv[];
|
||||
|
||||
extern CVECTOR level1_modelCylindre_color[];
|
||||
|
||||
extern PRIM level1_modelCylindre_index[];
|
||||
|
||||
extern VANIM level1_modelCylindre_anim;
|
||||
|
||||
extern BODY level1_modelCylindre_body;
|
||||
|
||||
extern TMESH level1_modelCylindre;
|
||||
|
||||
extern unsigned long _binary_TIM_home_tim_start[];
|
||||
|
||||
extern unsigned long _binary_TIM_home_tim_end[];
|
||||
|
||||
extern unsigned long _binary_TIM_home_tim_length;
|
||||
|
||||
extern TIM_IMAGE level1_tim_home;
|
||||
|
||||
extern MESH level1_meshCylindre;
|
||||
|
||||
extern SVECTOR modelgnd_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_normal[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_uv[];
|
||||
|
||||
extern CVECTOR level1_modelgnd_color[];
|
||||
|
||||
extern PRIM level1_modelgnd_index[];
|
||||
|
||||
extern BODY level1_modelgnd_body;
|
||||
|
||||
extern TMESH level1_modelgnd;
|
||||
|
||||
extern MESH level1_meshgnd;
|
||||
|
||||
extern SVECTOR modelgnd_001_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_001_normal[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_001_uv[];
|
||||
|
||||
extern CVECTOR level1_modelgnd_001_color[];
|
||||
|
||||
extern PRIM level1_modelgnd_001_index[];
|
||||
|
||||
extern BODY level1_modelgnd_001_body;
|
||||
|
||||
extern TMESH level1_modelgnd_001;
|
||||
|
||||
extern MESH level1_meshgnd_001;
|
||||
|
||||
extern SVECTOR modelgnd_003_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_003_normal[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_003_uv[];
|
||||
|
||||
extern CVECTOR level1_modelgnd_003_color[];
|
||||
|
||||
extern PRIM level1_modelgnd_003_index[];
|
||||
|
||||
extern BODY level1_modelgnd_003_body;
|
||||
|
||||
extern TMESH level1_modelgnd_003;
|
||||
|
||||
extern MESH level1_meshgnd_003;
|
||||
|
||||
extern SVECTOR modelgnd_002_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_002_normal[];
|
||||
|
||||
extern SVECTOR level1_modelgnd_002_uv[];
|
||||
|
||||
extern CVECTOR level1_modelgnd_002_color[];
|
||||
|
||||
extern PRIM level1_modelgnd_002_index[];
|
||||
|
||||
extern BODY level1_modelgnd_002_body;
|
||||
|
||||
extern TMESH level1_modelgnd_002;
|
||||
|
||||
extern MESH level1_meshgnd_002;
|
||||
|
||||
extern SVECTOR modelLara_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelLara_normal[];
|
||||
|
||||
extern SVECTOR level1_modelLara_uv[];
|
||||
|
||||
extern CVECTOR level1_modelLara_color[];
|
||||
|
||||
extern PRIM level1_modelLara_index[];
|
||||
|
||||
extern BODY level1_modelLara_body;
|
||||
|
||||
extern TMESH level1_modelLara;
|
||||
|
||||
extern unsigned long _binary_TIM_lara_tim_start[];
|
||||
|
||||
extern unsigned long _binary_TIM_lara_tim_end[];
|
||||
|
||||
extern unsigned long _binary_TIM_lara_tim_length;
|
||||
|
||||
extern TIM_IMAGE level1_tim_lara;
|
||||
|
||||
extern MESH level1_meshLara;
|
||||
|
||||
extern SVECTOR modelobject_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelobject_normal[];
|
||||
|
||||
extern SVECTOR level1_modelobject_uv[];
|
||||
|
||||
extern CVECTOR level1_modelobject_color[];
|
||||
|
||||
extern PRIM level1_modelobject_index[];
|
||||
|
||||
extern BODY level1_modelobject_body;
|
||||
|
||||
extern TMESH level1_modelobject;
|
||||
|
||||
extern MESH level1_meshobject;
|
||||
|
||||
extern SVECTOR modelPlan_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelPlan_normal[];
|
||||
|
||||
extern SVECTOR level1_modelPlan_uv[];
|
||||
|
||||
extern CVECTOR level1_modelPlan_color[];
|
||||
|
||||
extern PRIM level1_modelPlan_index[];
|
||||
|
||||
extern BODY level1_modelPlan_body;
|
||||
|
||||
extern TMESH level1_modelPlan;
|
||||
|
||||
extern MESH level1_meshPlan;
|
||||
|
||||
extern SVECTOR modelSphere_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelSphere_normal[];
|
||||
|
||||
extern SVECTOR level1_modelSphere_uv[];
|
||||
|
||||
extern CVECTOR level1_modelSphere_color[];
|
||||
|
||||
extern PRIM level1_modelSphere_index[];
|
||||
|
||||
extern BODY level1_modelSphere_body;
|
||||
|
||||
extern TMESH level1_modelSphere;
|
||||
|
||||
extern MESH level1_meshSphere;
|
||||
|
||||
extern SVECTOR modelSphere_001_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelSphere_001_normal[];
|
||||
|
||||
extern SVECTOR level1_modelSphere_001_uv[];
|
||||
|
||||
extern CVECTOR level1_modelSphere_001_color[];
|
||||
|
||||
extern PRIM level1_modelSphere_001_index[];
|
||||
|
||||
extern BODY level1_modelSphere_001_body;
|
||||
|
||||
extern TMESH level1_modelSphere_001;
|
||||
|
||||
extern MESH level1_meshSphere_001;
|
||||
|
||||
extern SVECTOR modelwall_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelwall_normal[];
|
||||
|
||||
extern SVECTOR level1_modelwall_uv[];
|
||||
|
||||
extern CVECTOR level1_modelwall_color[];
|
||||
|
||||
extern PRIM level1_modelwall_index[];
|
||||
|
||||
extern BODY level1_modelwall_body;
|
||||
|
||||
extern TMESH level1_modelwall;
|
||||
|
||||
extern MESH level1_meshwall;
|
||||
|
||||
extern SVECTOR modelwall_001_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelwall_001_normal[];
|
||||
|
||||
extern SVECTOR level1_modelwall_001_uv[];
|
||||
|
||||
extern CVECTOR level1_modelwall_001_color[];
|
||||
|
||||
extern PRIM level1_modelwall_001_index[];
|
||||
|
||||
extern BODY level1_modelwall_001_body;
|
||||
|
||||
extern TMESH level1_modelwall_001;
|
||||
|
||||
extern MESH level1_meshwall_001;
|
||||
|
||||
extern SVECTOR modelwall_002_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelwall_002_normal[];
|
||||
|
||||
extern SVECTOR level1_modelwall_002_uv[];
|
||||
|
||||
extern CVECTOR level1_modelwall_002_color[];
|
||||
|
||||
extern PRIM level1_modelwall_002_index[];
|
||||
|
||||
extern BODY level1_modelwall_002_body;
|
||||
|
||||
extern TMESH level1_modelwall_002;
|
||||
|
||||
extern MESH level1_meshwall_002;
|
||||
|
||||
extern SVECTOR modelwall_003_mesh[];
|
||||
|
||||
extern SVECTOR level1_modelwall_003_normal[];
|
||||
|
||||
extern SVECTOR level1_modelwall_003_uv[];
|
||||
|
||||
extern CVECTOR level1_modelwall_003_color[];
|
||||
|
||||
extern PRIM level1_modelwall_003_index[];
|
||||
|
||||
extern BODY level1_modelwall_003_body;
|
||||
|
||||
extern TMESH level1_modelwall_003;
|
||||
|
||||
extern MESH level1_meshwall_003;
|
||||
|
||||
extern MESH * level1_meshes[15];
|
||||
|
||||
extern int level1_meshes_length;
|
||||
|
||||
extern CAMANGLE level1_camAngle_camPath_001;
|
||||
|
||||
extern CAMANGLE * level1_camAngles[0];
|
||||
|
||||
extern SIBLINGS level1_nodegnd_siblings;
|
||||
|
||||
extern CHILDREN level1_nodegnd_objects;
|
||||
|
||||
extern CHILDREN level1_nodegnd_rigidbodies;
|
||||
|
||||
extern NODE level1_nodegnd;
|
||||
|
||||
extern SIBLINGS level1_nodegnd_001_siblings;
|
||||
|
||||
extern CHILDREN level1_nodegnd_001_objects;
|
||||
|
||||
extern CHILDREN level1_nodegnd_001_rigidbodies;
|
||||
|
||||
extern NODE level1_nodegnd_001;
|
||||
|
||||
extern SIBLINGS level1_nodegnd_002_siblings;
|
||||
|
||||
extern CHILDREN level1_nodegnd_002_objects;
|
||||
|
||||
extern CHILDREN level1_nodegnd_002_rigidbodies;
|
||||
|
||||
extern NODE level1_nodegnd_002;
|
||||
|
||||
extern SIBLINGS level1_nodegnd_003_siblings;
|
||||
|
||||
extern CHILDREN level1_nodegnd_003_objects;
|
||||
|
||||
extern CHILDREN level1_nodegnd_003_rigidbodies;
|
||||
|
||||
extern NODE level1_nodegnd_003;
|
||||
|
||||
extern MESH * level1_actorPtr;
|
||||
|
||||
extern MESH * level1_levelPtr;
|
||||
|
||||
extern MESH * level1_propPtr;
|
||||
|
||||
extern CAMANGLE * level1_camPtr;
|
||||
|
||||
extern NODE * level1_curNode;
|
||||
|
||||
extern NODE level1_nodegnd;
|
||||
|
||||
extern NODE level1_nodegnd_001;
|
||||
|
||||
extern SIBLINGS level1_nodegnd_002_siblings;
|
||||
extern CHILDREN level1_nodegnd_002_objects;
|
||||
extern CHILDREN level1_nodegnd_002_rigidbodies;
|
||||
extern NODE level1_nodegnd_002;
|
||||
|
||||
extern SIBLINGS level1_nodegnd_siblings;
|
||||
extern CHILDREN level1_nodegnd_objects;
|
||||
extern CHILDREN level1_nodegnd_rigidbodies;
|
||||
extern NODE level1_nodegnd;
|
||||
extern MESH * level1_actorPtr;
|
||||
extern MESH * level1_levelPtr;
|
||||
extern MESH * level1_propPtr;
|
||||
extern CAMANGLE * level1_camPtr;
|
||||
extern NODE * level1_curNode;
|
||||
extern NODE level1_nodegnd_001;
|
||||
extern NODE level1_nodegnd_003;
|
||||
extern NODE level1_nodegnd_002;
|
||||
extern NODE level1_nodegnd;
|
||||
|
36
src/camera.c
36
src/camera.c
@ -34,15 +34,10 @@ void setCameraPos( CAMERA * camera, SVECTOR * pos, SVECTOR * rot ) {
|
||||
copyVector(dc_camPos, pos);
|
||||
copyVector(dc_camRot, rot);
|
||||
};
|
||||
void setCameraMode(LEVEL * curLvl, CAMERA * camera, VECTOR * posToActor, VECTOR * angle, VECTOR * angleCam, short curCamAngle, int camMode, int * lerping){
|
||||
void setCameraMode(LEVEL * curLvl, CAMERA * camera, VECTOR * posToActor, VECTOR * angle, VECTOR * angleCam, short *curCamAngle, int camMode, int * lerping){
|
||||
int dist = 0;
|
||||
short cameraSpeed = 40;
|
||||
|
||||
//~ if(camMode != 2) {
|
||||
//~ camera->rot->vy = camAngleToAct->vy;
|
||||
//~ // using csin/ccos, no need for theta
|
||||
//~ camera->rot->vx = camAngleToAct->vx;
|
||||
//~ }
|
||||
if(camMode < 4 ) {
|
||||
*lerping = 0;
|
||||
}
|
||||
@ -73,32 +68,33 @@ void setCameraMode(LEVEL * curLvl, CAMERA * camera, VECTOR * posToActor, VECTOR
|
||||
case 2 :
|
||||
// If BG images exist
|
||||
if (curLvl->camPtr->tim_data){
|
||||
checkLineW( &curLvl->camAngles[ curCamAngle ]->fw.v3, &curLvl->camAngles[ curCamAngle ]->fw.v2, curLvl->actorPtr);
|
||||
if ( curLvl->camAngles[ curCamAngle ]->fw.v0.vx ) {
|
||||
// Check which side of the line the actor is on (World space)
|
||||
checkLineW( &curLvl->camAngles[ *curCamAngle ]->fw.v3, &curLvl->camAngles[ *curCamAngle ]->fw.v2, curLvl->actorPtr);
|
||||
if ( curLvl->camAngles[ *curCamAngle ]->fw.v0.vx ) {
|
||||
// If actor in camAngle->fw area of screen
|
||||
if ( checkLineW( &curLvl->camAngles[ curCamAngle ]->fw.v3, &curLvl->camAngles[ curCamAngle ]->fw.v2, curLvl->actorPtr) == -1 &&
|
||||
( checkLineW( &curLvl->camAngles[ curCamAngle ]->bw.v2, &curLvl->camAngles[ curCamAngle ]->bw.v3, curLvl->actorPtr) >= 0
|
||||
)
|
||||
if ( checkLineW( &curLvl->camAngles[ *curCamAngle ]->fw.v3, &curLvl->camAngles[ *curCamAngle ]->fw.v2, curLvl->actorPtr) == -1 &&
|
||||
( checkLineW( &curLvl->camAngles[ *curCamAngle ]->bw.v2, &curLvl->camAngles[ *curCamAngle ]->bw.v3, curLvl->actorPtr) >= 0 )
|
||||
) {
|
||||
if (curCamAngle < 5) {
|
||||
curCamAngle++;
|
||||
curLvl->camPtr = curLvl->camAngles[ curCamAngle ];
|
||||
if (*curCamAngle < 5) {
|
||||
(*curCamAngle)++;
|
||||
curLvl->camPtr = curLvl->camAngles[ *curCamAngle ];
|
||||
LoadTexture(curLvl->camPtr->tim_data, curLvl->camPtr->BGtim);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( curLvl->camAngles[ curCamAngle ]->bw.v0.vx ) {
|
||||
if ( curLvl->camAngles[ *curCamAngle ]->bw.v0.vx ) {
|
||||
// If actor in camAngle->bw area of screen
|
||||
if ( checkLineW( &curLvl->camAngles[ curCamAngle ]->fw.v3, &curLvl->camAngles[ curCamAngle ]->fw.v2, curLvl->actorPtr) >= 0 &&
|
||||
checkLineW( &curLvl->camAngles[ curCamAngle ]->bw.v2, &curLvl->camAngles[ curCamAngle ]->bw.v3, curLvl->actorPtr) == -1
|
||||
if ( checkLineW( &curLvl->camAngles[ *curCamAngle ]->fw.v3, &curLvl->camAngles[ *curCamAngle ]->fw.v2, curLvl->actorPtr) >= 0 &&
|
||||
checkLineW( &curLvl->camAngles[ *curCamAngle ]->bw.v2, &curLvl->camAngles[ *curCamAngle ]->bw.v3, curLvl->actorPtr) == -1
|
||||
) {
|
||||
if (curCamAngle > 0) {
|
||||
curCamAngle--;
|
||||
curLvl->camPtr = curLvl->camAngles[ curCamAngle ];
|
||||
if (*curCamAngle > 0) {
|
||||
(*curCamAngle)--;
|
||||
curLvl->camPtr = curLvl->camAngles[ *curCamAngle ];
|
||||
LoadTexture(curLvl->camPtr->tim_data, curLvl->camPtr->BGtim);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Find screen space coordinates
|
||||
worldToScreen( &curLvl->actorPtr->pos, &curLvl->actorPtr->pos2D );
|
||||
}
|
||||
setCameraPos(camera, &curLvl->camPtr->campos->pos, &curLvl->camPtr->campos->rot);
|
||||
|
41
src/main.c
41
src/main.c
@ -152,8 +152,11 @@ int main() {
|
||||
LoadTexture(curLvl.meshes[k]->tim_data, curLvl.meshes[k]->tim);
|
||||
}
|
||||
}
|
||||
// Load current BG if exists
|
||||
// Load current BG if exists, and set cam mode accordingly
|
||||
if (curLvl.camPtr->tim_data){
|
||||
// Switch to proper cam mode and angle
|
||||
camMode = FIXED;
|
||||
curCamAngle = 1;
|
||||
LoadTexture(curLvl.camPtr->tim_data, curLvl.camPtr->BGtim);
|
||||
}
|
||||
// Polycount
|
||||
@ -170,13 +173,7 @@ int main() {
|
||||
propStartNode = curLvl.propPtr->node;
|
||||
// Set camera starting pos
|
||||
setCameraPos(&camera, &curLvl.camPtr->campos->pos, &curLvl.camPtr->campos->rot);
|
||||
|
||||
// Find curCamAngle if using pre-calculated BGs
|
||||
if (camMode == 2) {
|
||||
if (curLvl.camPtr->tim_data){
|
||||
curCamAngle = 1;
|
||||
}
|
||||
}
|
||||
// Time counter
|
||||
oldTime = GetRCnt(RCntCNT1);
|
||||
// Main loop
|
||||
while ( VSync(VSYNC) ) {
|
||||
@ -230,7 +227,8 @@ int main() {
|
||||
if (time % timediv == 0){
|
||||
atime ++;
|
||||
}
|
||||
// Reset player pos
|
||||
// TODO : put in a function
|
||||
// Reset player/prop pos
|
||||
if(curLvl.actorPtr->pos.vy >= 200){
|
||||
copyVector(&curLvl.actorPtr->body->position, &actorStartPos );
|
||||
copyVector(&curLvl.actorPtr->rot, &actorStartRot );
|
||||
@ -267,13 +265,24 @@ int main() {
|
||||
}
|
||||
// Physics
|
||||
if ( physics ) {
|
||||
// if(time%1 == 0){
|
||||
for ( int k = 0; k < *curLvl.meshes_length; k ++ ) {
|
||||
if ( curLvl.meshes[k]->isRigidBody == 1 ) {
|
||||
applyAcceleration( curLvl.meshes[k]->body, dt);
|
||||
// Get col between actor and level
|
||||
if ( curLvl.meshes[k]->isActor ){
|
||||
// Get col between actor and level
|
||||
checkBodyCol( curLvl.meshes[k]->body , curLvl.levelPtr->body );
|
||||
// Get col between actor and current node's walls
|
||||
// Loop on current node's objects
|
||||
for (short obj=0; obj < curLvl.curNode->objects->index; obj++){
|
||||
// If isWall, check collision
|
||||
if ( curLvl.curNode->objects->list[obj]->isWall ){
|
||||
if( getExtCollision( *curLvl.meshes[k]->body, *curLvl.curNode->objects->list[obj]->body ).vz &&
|
||||
getExtCollision( *curLvl.meshes[k]->body, *curLvl.curNode->objects->list[obj]->body ).vx) {
|
||||
curLvl.meshes[k]->body->position.vz = curLvl.meshes[k]->body->position.vz - curLvl.meshes[k]->body->velocity.vz ;
|
||||
curLvl.meshes[k]->body->position.vx = curLvl.meshes[k]->body->position.vx - curLvl.meshes[k]->body->velocity.vx ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Get col between props and level
|
||||
if ( curLvl.meshes[k]->isProp ){
|
||||
@ -306,7 +315,7 @@ int main() {
|
||||
// Clear Secondary OT
|
||||
ClearOTagR(ot[db], OTLEN);
|
||||
// Set camera according to mode
|
||||
setCameraMode(&curLvl, &camera, &posToActor, &angle, &angleCam, curCamAngle, camMode, &lerping);
|
||||
setCameraMode(&curLvl, &camera, &posToActor, &angle, &angleCam, &curCamAngle, camMode, &lerping);
|
||||
// Render scene
|
||||
renderScene(&curLvl, &camera, &camMode, &nextpri, ot[db], otdisc[db], &db, &draw[db], curCamAngle, atime);
|
||||
// Set camera
|
||||
@ -320,7 +329,7 @@ int main() {
|
||||
=
|
||||
);
|
||||
// Point camera at actor unless camMode == FIXED
|
||||
if (camMode!=2){ copyVector(dc_camRot, dc_actorRot); }
|
||||
if (camMode != FIXED){ copyVector(dc_camRot, dc_actorRot); }
|
||||
//
|
||||
applyCamera(&camera);
|
||||
|
||||
@ -335,8 +344,9 @@ int main() {
|
||||
AddPrims(otdisc[db], ot[db] + OTLEN - 1, ot[db]);
|
||||
|
||||
//~ FntPrint("\nTime : %d\n", time);
|
||||
FntPrint("#Tri : %d\n", triCount);
|
||||
FntPrint("\n#Tri : %d\n", triCount);
|
||||
FntPrint("#RCnt : %d %d\n", oldTime, dt);
|
||||
FntPrint("CamAngle : %d\n", curCamAngle);
|
||||
FntFlush(-1);
|
||||
display( &disp[db], &draw[db], otdisc[db], primbuff[db], &nextpri, &db);
|
||||
}
|
||||
@ -375,6 +385,7 @@ void callback() {
|
||||
angleCam.vy = 0;
|
||||
}
|
||||
if ( PAD & PadShldR1 && !timer ) {
|
||||
// Change camera angle switching mode if using pre-calculated BGs
|
||||
if (!curLvl.camPtr->tim_data){
|
||||
if(camMode < 5){
|
||||
camMode ++;
|
||||
@ -505,7 +516,7 @@ void callback() {
|
||||
timer = 30;
|
||||
lastPad = PAD;
|
||||
}
|
||||
if( theControllers[0].type == 0x73 && camMode == 0){
|
||||
if( theControllers[0].type == 0x73 && camMode == ACTOR){
|
||||
// Cam control - horizontal
|
||||
if ( theControllers[0].analog0 >= 0 && theControllers[0].analog0 < (128 - DS_DZ/2) ) {
|
||||
angleCam.vy += ( 16 * ( 128 - theControllers[0].analog0 ) ) >> 8 ;
|
||||
|
@ -108,9 +108,12 @@ void checkBodyCol(BODY * one, BODY * two){
|
||||
VECTOR colInt, colExt;
|
||||
colInt = getIntCollision( *one , *two );
|
||||
//~ colExt = getExtCollision( *one , *two );
|
||||
// If collisiton on Y axis,
|
||||
if ( colInt.vy ) {
|
||||
// and above plane
|
||||
if ( !colInt.vx && !colInt.vz ) {
|
||||
one->position.vy = one->min.vy;
|
||||
// collide
|
||||
one->position.vy = two->max.vy - one->max.vy ;
|
||||
one->velocity.vy = 0;
|
||||
two->velocity.vy = 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user