Work on level generation
This commit is contained in:
parent
c75a8bac49
commit
494a29f470
31
Makefile
31
Makefile
|
@ -31,8 +31,6 @@ ASMOBJECTS = $(patsubst %.s, build/%.o, $(ASMFILES))
|
|||
|
||||
CODEFILES = $(shell find src/ -type f -name '*.c')
|
||||
|
||||
CODEOBJECTS = $(patsubst %.c, build/%.o, $(CODEFILES))
|
||||
|
||||
CODESEGMENT = build/codesegment
|
||||
|
||||
BOOT = /usr/lib/n64/PR/bootcode/boot.6102
|
||||
|
@ -92,12 +90,31 @@ src/models/sphere.h src/models/sphere_geo.inc.h: assets/fbx/Sphere.fbx
|
|||
|
||||
TEST_CHAMBERS = $(shell find assets/test_chambers -type f -name '*.blend')
|
||||
|
||||
TEST_CHAMBER_HEADERS = $(TEST_CHAMBERS:%.blend=build/%.h)
|
||||
TEST_CHAMBER_OBJECTS = $(TEST_CHAMBERS:%.blend=build/%_geo.o)
|
||||
|
||||
build/%.fbx: %.blend
|
||||
@mkdir -p $(@D)
|
||||
$(BLENDER_2_9) $< --background --python tools/export_fbx.py -- $@
|
||||
|
||||
build/assets/test_chambers/%.h: build/assets/test_chambers/%.fbx
|
||||
$(SKELATOOL64) -s 256 -n $(<:build/assets/test_chambers/%.fbx=%) -o $@ $<
|
||||
build/assets/test_chambers/%.h build/assets/test_chambers/%_geo.c: build/assets/test_chambers/%.fbx $(SKELATOOL64)
|
||||
$(SKELATOOL64) -l -s 2.56 -c 0.01 -n $(<:build/assets/test_chambers/%.fbx=%) -o $(<:%.fbx=%.h) $<
|
||||
|
||||
build/assets/test_chambers/%.o: build/assets/test_chambers/%.c
|
||||
@mkdir -p $(@D)
|
||||
$(CC) $(CFLAGS) -MM $^ -MF "$(@:.o=.d)" -MT"$@"
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
levels: $(TEST_CHAMBER_HEADERS)
|
||||
echo $(TEST_CHAMBER_HEADERS)
|
||||
|
||||
build/assets/test_chambers/level_list.h: $(TEST_CHAMBER_HEADERS)
|
||||
@mkdir -p $(@D)
|
||||
node tools/generate_level_list.js $@ $(TEST_CHAMBER_HEADERS)
|
||||
|
||||
build/src/levels/levels.o: build/assets/test_chambers/level_list.h
|
||||
|
||||
.PHONY: levels
|
||||
|
||||
####################
|
||||
## Linking
|
||||
|
@ -108,6 +125,8 @@ $(BOOT_OBJ): $(BOOT)
|
|||
|
||||
# without debugger
|
||||
|
||||
CODEOBJECTS = $(patsubst %.c, build/%.o, $(CODEFILES)) $(TEST_CHAMBER_OBJECTS)
|
||||
|
||||
CODEOBJECTS_NO_DEBUG = $(CODEOBJECTS)
|
||||
|
||||
ifeq ($(WITH_DEBUGGER),1)
|
||||
|
@ -145,4 +164,6 @@ $(BASE_TARGET_NAME)_debug.z64: $(CODESEGMENT)_debug.o $(OBJECTS) $(CP_LD_SCRIPT)
|
|||
makemask $(BASE_TARGET_NAME)_debug.z64
|
||||
|
||||
clean:
|
||||
rm -rf build
|
||||
rm -rf build
|
||||
|
||||
.SECONDARY:
|
11
src/levels/levels.c
Normal file
11
src/levels/levels.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include "levels.h"
|
||||
|
||||
#include "../build/assets/test_chambers/level_list.h"
|
||||
|
||||
struct CollisionObject* levelsGetCollisionObjects() {
|
||||
return test_chamber_00_test_chamber_00_0_collision_objects;
|
||||
}
|
||||
|
||||
int levelsGetCollisionObjectCount() {
|
||||
return TEST_CHAMBER_00_TEST_CHAMBER_00_0_QUAD_COLLIDERS_COUNT;
|
||||
}
|
9
src/levels/levels.h
Normal file
9
src/levels/levels.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#ifndef __LEVEL_LIST_H__
|
||||
#define __LEVEL_LIST_H__
|
||||
|
||||
#include "physics/collision_object.h"
|
||||
|
||||
struct CollisionObject* levelsGetCollisionObjects();
|
||||
int levelsGetCollisionObjectCount();
|
||||
|
||||
#endif
|
|
@ -3,6 +3,7 @@
|
|||
#include "../models/models.h"
|
||||
#include "defs.h"
|
||||
#include "../graphics/debug_render.h"
|
||||
#include "levels/levels.h"
|
||||
|
||||
struct CollisionBox gCubeCollisionBox = {
|
||||
{0.3165f, 0.3165f, 0.3165f}
|
||||
|
@ -60,8 +61,16 @@ void cubeInit(struct Cube* cube) {
|
|||
}
|
||||
|
||||
void cubeUpdate(struct Cube* cube) {
|
||||
collisionObjectCollideWithPlane(&cube->collisionObject, &gFloorObject, &gContactSolver);
|
||||
collisionObjectCollideWithQuad(&cube->collisionObject, &gFloatingQuadObject, &gContactSolver);
|
||||
// collisionObjectCollideWithPlane(&cube->collisionObject, &gFloorObject, &gContactSolver);
|
||||
// collisionObjectCollideWithQuad(&cube->collisionObject, &gFloatingQuadObject, &gContactSolver);
|
||||
|
||||
int colliderCount = levelsGetCollisionObjectCount();
|
||||
struct CollisionObject* objects = levelsGetCollisionObjects();
|
||||
|
||||
for (int i = 0; i < colliderCount; ++i) {
|
||||
collisionObjectCollideWithQuad(&cube->collisionObject, &objects[i], &gContactSolver);
|
||||
}
|
||||
|
||||
contactSolverSolve(&gContactSolver);
|
||||
rigidBodyUpdate(&cube->rigidBody);
|
||||
}
|
||||
|
|
20
tools/generate_level_list.js
Normal file
20
tools/generate_level_list.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
function generateInclude(outputLocation, headerLocation) {
|
||||
return `#include "${path.relative(path.dirname(outputLocation), headerLocation)}"`
|
||||
}
|
||||
|
||||
function generateData(outputLocation, headerLocations) {
|
||||
return `#ifndef __BUILD_LEVEL_LIST_H__
|
||||
#define __BUILD_LEVEL_LIST_H__
|
||||
|
||||
${headerLocations.map(headerLocation => generateInclude(outputLocation, headerLocation)).join('\n')}
|
||||
|
||||
#endif
|
||||
`;
|
||||
}
|
||||
|
||||
const output = process.argv[2];
|
||||
|
||||
fs.writeFileSync(output, generateData(output, process.argv.slice(3)));
|
Loading…
Reference in a new issue