73 lines
2.9 KiB
C
73 lines
2.9 KiB
C
#include "raylib.h"
|
|
#include "player_controller.h"
|
|
#include "camera_controller.h"
|
|
#include "city_generator.h"
|
|
#include "core/input.h"
|
|
#include "core/camera_node.h"
|
|
#include "core/engine_global.h"
|
|
#include "core/engine_loop.h"
|
|
#include "core/scene.h"
|
|
#include "core/transform_node.h"
|
|
#include "core/mesh_render_entity.h"
|
|
#include "utils/debug.h"
|
|
#include "utils/mirror.h"
|
|
|
|
//! Create camera node with a transformable parent.
|
|
SceneNode *CreateCameraScene() {
|
|
SceneNode *camera_parent = CreateTransformNode();
|
|
SceneNode *camera_transform = CreateTransformNode();
|
|
SceneNodeAddChild(camera_parent, camera_transform);
|
|
SceneNodeAddChild(camera_transform, CreateCameraNode());
|
|
// set camera parent offset
|
|
Transformable transformable = TC_CAST(camera_transform->entity, Transformable);
|
|
Transform transform = transformable.tc->get_transform(transformable.data);
|
|
transform.translation = (Vector3){-0.2f, 0.5f, -1.5f};
|
|
transform.rotation = QuaternionFromEuler(7.5f * DEG2RAD, 0.f, 0.f);
|
|
transformable.tc->set_transform(transformable.data, transform);
|
|
return camera_parent;
|
|
}
|
|
|
|
//! create a model with a camera attached as a child of the root of the scene.
|
|
SceneNode *CreateModelScene() {
|
|
SceneNode *model_parent = CreateTransformNode();
|
|
// create the rest of the scene with a mesh and a functionality node
|
|
SceneNodeAddChild(model_parent, CreateMeshRenderEntity("rider"));
|
|
SceneNodeAddChild(model_parent, CreatePlayerController());
|
|
// move the renderer's parent transform
|
|
Transformable transformable = TC_CAST(model_parent->entity, Transformable);
|
|
Transform transform = transformable.tc->get_global_transform(transformable.data);
|
|
transform.translation.x = 10.f;
|
|
transform.translation.y = 10.f;
|
|
transformable.tc->set_global_transform(transformable.data, transform);
|
|
return model_parent;
|
|
}
|
|
|
|
Scene *CreateInitialScene() {
|
|
SceneNode *root = CreateTransformNode();
|
|
SceneNode *model = CreateModelScene();
|
|
SceneNode *camera_scene = CreateCameraScene();
|
|
SceneNodeAddChild(root, model);
|
|
SceneNodeAddChild(root, camera_scene);
|
|
SceneNodeAddChild(camera_scene, CreateCameraController(TC_CAST(model->entity, Transformable)));
|
|
SceneNodeAddChild(root, GenerateCity());
|
|
return CreateScene(root);
|
|
}
|
|
|
|
void ConfigureInput() {
|
|
AddAction("pitch_up", INPUT_LISTENER_KEY, 0, KEY_S);
|
|
AddAction("pitch_down", INPUT_LISTENER_KEY, 0, KEY_W);
|
|
AddAction("roll_left", INPUT_LISTENER_KEY, 0, KEY_A);
|
|
AddAction("roll_right", INPUT_LISTENER_KEY, 0, KEY_D);
|
|
AddAction("yaw_right", INPUT_LISTENER_KEY, 0, KEY_E);
|
|
AddAction("yaw_left", INPUT_LISTENER_KEY, 0, KEY_Q);
|
|
AddAction("brake", INPUT_LISTENER_KEY, 0, KEY_SPACE);
|
|
AddAction("boost", INPUT_LISTENER_KEY, 0, KEY_LEFT_SHIFT);
|
|
}
|
|
|
|
int main() {
|
|
InitializeEngine();
|
|
ConfigureInput();
|
|
RunGame(CreateInitialScene());
|
|
UNREACHABLE("main: End of main function reached. This is an error, call ShutDown() when exiting instead.");
|
|
}
|