initial
This commit is contained in:
parent
c824f2c9e4
commit
07a702c972
|
@ -0,0 +1,79 @@
|
||||||
|
- EID: 0
|
||||||
|
Name: Camera
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0, y: 0, z: 0}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Camera Component:
|
||||||
|
Position: {x: 0, y: 0, z: 0}
|
||||||
|
Pitch: 0
|
||||||
|
Yaw: 0
|
||||||
|
Roll: 0
|
||||||
|
Width: 1920
|
||||||
|
Near: 0.00999999978
|
||||||
|
Far: 10000
|
||||||
|
Perspective: true
|
||||||
|
FOV: 90
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 1
|
||||||
|
Name: Floor
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0, y: 0, z: 0}
|
||||||
|
Rotate: {x: -0, y: 0, z: -0}
|
||||||
|
Scale: {x: 12.8000002, y: 1, z: 12.8000002}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 142686872
|
||||||
|
Material: 126223465
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 2
|
||||||
|
Name: Light
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Light Component:
|
||||||
|
Position: {x: 0, y: 0, z: 0}
|
||||||
|
Type: Directional
|
||||||
|
Direction: {x: 0, y: -1, z: 1}
|
||||||
|
Color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
|
Layer: 4294967295
|
||||||
|
Strength: 0
|
||||||
|
Casting Shadows: false
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 3
|
||||||
|
Name: Wall
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0, y: 0, z: 0}
|
||||||
|
Rotate: {x: -0, y: 0, z: -0}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 142652392
|
||||||
|
Material: 126223465
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 0
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 2.5, y: 1, z: 1.60000002}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
|
@ -0,0 +1,3 @@
|
||||||
|
Name: NavigationTest
|
||||||
|
ID: 100246336
|
||||||
|
Type: 5
|
|
@ -35,6 +35,7 @@
|
||||||
#include "Scripting/SHScriptEngine.h"
|
#include "Scripting/SHScriptEngine.h"
|
||||||
#include "UI/SHUISystem.h"
|
#include "UI/SHUISystem.h"
|
||||||
#include "Animation/SHAnimationSystem.h"
|
#include "Animation/SHAnimationSystem.h"
|
||||||
|
#include "Navigation/SHNavigationSystem.h"
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
#include "Graphics/MiddleEnd/Interface/SHRenderable.h"
|
#include "Graphics/MiddleEnd/Interface/SHRenderable.h"
|
||||||
|
@ -89,6 +90,7 @@ namespace Sandbox
|
||||||
SHSystemManager::CreateSystem<SHAudioSystem>();
|
SHSystemManager::CreateSystem<SHAudioSystem>();
|
||||||
SHSystemManager::CreateSystem<SHCameraSystem>();
|
SHSystemManager::CreateSystem<SHCameraSystem>();
|
||||||
SHSystemManager::CreateSystem<SHUISystem>();
|
SHSystemManager::CreateSystem<SHUISystem>();
|
||||||
|
SHSystemManager::CreateSystem<SHNavigationSystem>();
|
||||||
|
|
||||||
//std::system("FontCompiler.exe ../../Assets/Fonts/SegoeUI.ttf");
|
//std::system("FontCompiler.exe ../../Assets/Fonts/SegoeUI.ttf");
|
||||||
//std::system("FontCompiler.exe ../../Assets/Fonts/ALGER.ttf");
|
//std::system("FontCompiler.exe ../../Assets/Fonts/ALGER.ttf");
|
||||||
|
@ -127,6 +129,7 @@ namespace Sandbox
|
||||||
|
|
||||||
#ifdef SHEDITOR
|
#ifdef SHEDITOR
|
||||||
SHSystemManager::RegisterRoutine<SHPhysicsDebugDrawSystem, SHPhysicsDebugDrawSystem::PhysicsDebugDraw>();
|
SHSystemManager::RegisterRoutine<SHPhysicsDebugDrawSystem, SHPhysicsDebugDrawSystem::PhysicsDebugDraw>();
|
||||||
|
SHSystemManager::RegisterRoutine<SHNavigationSystem, SHNavigationSystem::NavigationSystemGenerateRoutine>();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SHSystemManager::RegisterRoutine<SHTransformSystem, SHTransformSystem::TransformPostPhysicsUpdate>();
|
SHSystemManager::RegisterRoutine<SHTransformSystem, SHTransformSystem::TransformPostPhysicsUpdate>();
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
#include "SHpch.h"
|
||||||
|
#include "SHNavigationSystem.h"
|
||||||
|
#include "ECS_Base/Managers/SHSystemManager.h"
|
||||||
|
#include "Physics/System/SHPhysicsSystem.h"
|
||||||
|
#include "Math/Geometry/SHAABB.h"
|
||||||
|
#include "Input/SHInputManager.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
void SHNavigationSystem::Init()
|
||||||
|
{
|
||||||
|
SystemID i = SystemFamily::GetID<SHNavigationSystem>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHNavigationSystem::Exit()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t SHNavigationSystem::GetIndex(uint16_t row, uint16_t col) noexcept
|
||||||
|
{
|
||||||
|
size_t rowOffset = numRows / sizeof(GridDataType);
|
||||||
|
return row * rowOffset + (col / sizeof(GridDataType));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool SHNavigationSystem::GetCollisionData(uint16_t row, uint16_t col) noexcept
|
||||||
|
{
|
||||||
|
|
||||||
|
size_t index = GetIndex(row, col);
|
||||||
|
|
||||||
|
GridDataType bitMask = 1 << (col % NumGridDataTypeBits);
|
||||||
|
|
||||||
|
if (collisionGrid.size() < index)
|
||||||
|
{
|
||||||
|
return collisionGrid[index] & bitMask;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SHVec2 SHNavigationSystem::GetGridSize() noexcept
|
||||||
|
{
|
||||||
|
return SHVec2{size.x / numRows, size.y / numCols};
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHNavigationSystem::GenerateCollisionGridData(SHVec3 origin, SHVec2 size, uint16_t nr, uint16_t nc, float gridHeight) noexcept
|
||||||
|
{
|
||||||
|
if (size.x <= 0.0f || size.y <= 0.0f || nr == 0 || nc == 0 || gridHeight <= 0.0f)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this->origin = origin;
|
||||||
|
this->size = size;
|
||||||
|
numRows = nr;
|
||||||
|
numCols = nc;
|
||||||
|
collisionGrid.clear();
|
||||||
|
|
||||||
|
|
||||||
|
GridDataType temp = 0;
|
||||||
|
|
||||||
|
for (size_t r = 0; r < numRows; ++r)
|
||||||
|
{
|
||||||
|
for (size_t c = 0; c < numCols; ++c)
|
||||||
|
{
|
||||||
|
GridDataType bitmask = 1 << (c % NumGridDataTypeBits);
|
||||||
|
auto physics = SHSystemManager::GetSystem<SHPhysicsSystem>();
|
||||||
|
|
||||||
|
//Does the AABB calculation
|
||||||
|
if (physics != nullptr)
|
||||||
|
{
|
||||||
|
//Get the top left position
|
||||||
|
SHVec3 topleft{ origin.x - (size.x / 2.0f), origin.y, origin.z - (size.y / 2.0f) };
|
||||||
|
SHVec2 halfGridSize = GetGridSize() * 0.5f;
|
||||||
|
|
||||||
|
//offset it by row and column and center it with half grid size.
|
||||||
|
topleft += SHVec3{ c * GetGridSize().x, 0.0f, r * GetGridSize().y} + SHVec3{halfGridSize.x,0.0f,halfGridSize.y};
|
||||||
|
|
||||||
|
//Get half extents.
|
||||||
|
|
||||||
|
SHVec3 halfExtents{ halfGridSize.x, gridHeight, halfGridSize.y };
|
||||||
|
|
||||||
|
SHAABB aabb{ topleft,halfExtents };
|
||||||
|
|
||||||
|
if (physics->TestAABBOverlap(aabb))
|
||||||
|
{
|
||||||
|
temp |= bitmask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ((c % NumGridDataTypeBits) == NumGridDataTypeBits - 1)
|
||||||
|
{
|
||||||
|
collisionGrid.push_back(temp);
|
||||||
|
temp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//if the number of column dont fit perfectly to the NumGridDataTypeBits. We push in what we have with the rest as 0s.
|
||||||
|
if (numCols % NumGridDataTypeBits != 0)
|
||||||
|
{
|
||||||
|
collisionGrid.push_back(temp);
|
||||||
|
temp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void SHNavigationSystem::NavigationSystemGenerateRoutine::Execute(double dt) noexcept
|
||||||
|
{
|
||||||
|
SHNavigationSystem* system = static_cast<SHNavigationSystem*>(GetSystem());
|
||||||
|
if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::H))
|
||||||
|
{
|
||||||
|
system->GenerateCollisionGridData(SHVec3{ 0.0f }, SHVec2{ 25.6f }, 128, 128, 10.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ECS_Base/System/SHSystem.h"
|
||||||
|
#include "ECS_Base/System/SHSystemRoutine.h"
|
||||||
|
#include "Math/Vector/SHVec2.h"
|
||||||
|
#include "Math/Vector/SHVec3.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "SH_API.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class SH_API SHNavigationSystem final: public SHSystem
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
using GridDataType = uint8_t;
|
||||||
|
|
||||||
|
const size_t NumGridDataTypeBits = sizeof(GridDataType) * CHAR_BIT;
|
||||||
|
|
||||||
|
std::vector<uint8_t> collisionGrid;
|
||||||
|
|
||||||
|
//Number of subdivision on the x axis
|
||||||
|
uint16_t numRows{0};
|
||||||
|
//Number of subdivision on the z axis
|
||||||
|
uint16_t numCols{0};
|
||||||
|
|
||||||
|
//The center of the collision area.
|
||||||
|
SHVec3 origin{0.0f};
|
||||||
|
|
||||||
|
//Size of the collision area
|
||||||
|
SHVec2 size{0.0f};
|
||||||
|
|
||||||
|
SHVec2 GetGridSize() noexcept;
|
||||||
|
uint16_t GetIndex(uint16_t row, uint16_t col) noexcept;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
SHNavigationSystem() = default;
|
||||||
|
virtual ~SHNavigationSystem() = default;
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
void Exit();
|
||||||
|
|
||||||
|
void SaveNavigationData() noexcept;
|
||||||
|
void GenerateCollisionGridData(SHVec3 origin, SHVec2 size, uint16_t numRow, uint16_t numCol, float gridHeight = 10.0f) noexcept;
|
||||||
|
bool GetCollisionData(uint16_t row, uint16_t col) noexcept;
|
||||||
|
|
||||||
|
|
||||||
|
class SH_API NavigationSystemGenerateRoutine final: public SHSystemRoutine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NavigationSystemGenerateRoutine() : SHSystemRoutine("Navigation System Generate", true) {};
|
||||||
|
virtual void Execute(double dt)noexcept override final;
|
||||||
|
};
|
||||||
|
friend class NavigationSystemGenerateRoutine;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue