Dawn/src/dawntictactoe/components/TicTacToeGame.cpp

63 lines
1.7 KiB
C++

// Copyright (c) 2023 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "TicTacToeGame.hpp"
#include "game/DawnGame.hpp"
#include "scene/components/example/ExampleSpin.hpp"
#include "physics/3d/Ray3D.hpp"
using namespace Dawn;
TicTacToeGame::TicTacToeGame(SceneItem *item) : SceneItemComponent(item) {}
void TicTacToeGame::onStart() {
this->tiles = getScene()->findComponents<TicTacToeTile>();
getScene()->eventSceneUpdate.addListener(this, &TicTacToeGame::onSceneUpdate);
}
void TicTacToeGame::onSceneUpdate() {
// Get mouse in screen space.
auto mouse = getGame()->inputManager.getAxis2D(INPUT_BIND_MOUSE_X, INPUT_BIND_MOUSE_Y);
mouse *= 2.0f;
mouse -= glm::vec2(1, 1);
Camera *camera = getScene()->findComponent<Camera>();
if(camera == nullptr) return;
struct Ray3D ray;
ray.origin = glm::vec3(1,2,3);
ray.direction = camera->getRayDirectionFromScreenSpace(mouse);
struct AABB3D box;
box.min = glm::vec3(-0.5f, -0.5f, -0.5f);
box.max = glm::vec3(0.5f, 0.5f, 0.5f);
struct SceneDebugCube cube = {
.min = box.min,
.max = box.max,
.color COLOR_GREEN,
.transform = getScene()->findComponent<ExampleSpin>()->transform->getWorldTransform()
};
getScene()->debugCube(cube);
glm::vec3 point, normal;
float_t distance;
auto test = raytestCube(
ray,
box,
cube.transform,
&point,
&normal,
&distance
);
if(test) {
getScene()->debugRay((struct SceneDebugRay){ .start = point, .direction = normal, .color = COLOR_BLUE });
} else {
getScene()->debugRay((struct SceneDebugRay){ .start = ray.origin, .direction = ray.direction });
}
}