Skip to content

Commit 9f2dadc

Browse files
committed
Updated for Tutorial 27
1 parent 5affc39 commit 9f2dadc

File tree

3 files changed

+80
-29
lines changed

3 files changed

+80
-29
lines changed

src/game.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,23 @@ class TestInteraction : public Interaction
1414
public:
1515
TestInteraction() : Interaction()
1616
{
17-
// addInteractorComponentType();
18-
// addInteracteeComponentType();
17+
addInteractorComponentType(TransformComponent::ID);
18+
addInteractorComponentType(ColliderComponent::ID);
19+
addInteractorComponentType(MotionComponent::ID);
20+
addInteracteeComponentType(TransformComponent::ID);
21+
addInteracteeComponentType(ColliderComponent::ID);
22+
addInteracteeComponentType(MotionComponent::ID);
1923
}
2024

2125
virtual void interact(float delta, BaseECSComponent** interactorComponents, BaseECSComponent** interacteeComponents)
2226
{
23-
DEBUG_LOG_TEMP2("Interacting!!");
27+
Transform& transform = ((TransformComponent*)interactorComponents[0])->transform;
28+
MotionComponent* motionComponent = ((MotionComponent*)interactorComponents[2]);
29+
30+
motionComponent->velocity = motionComponent->velocity * -1.1f;
31+
32+
// transform.setRotation((transform.getRotation()*Quaternion(Vector3f(0.0f,0.0f,1.0f), delta)).normalized());
33+
// DEBUG_LOG_TEMP2("Interacting!!");
2434
}
2535
};
2636

@@ -139,8 +149,8 @@ int Game::loadAndRunScene(RenderDevice& device)
139149
transformComponent.transform.setTranslation(Vector3f(0.0f, 0.0f, 20.0f));
140150

141151
MovementControlComponent movementControl;
142-
movementControl.movementControls.push_back(std::make_pair(Vector3f(1.0f,0.0f,0.0f) * 10.0f, &horizontal));
143-
movementControl.movementControls.push_back(std::make_pair(Vector3f(0.0f,1.0f,0.0f) * 10.0f, &vertical));
152+
movementControl.movementControls.push_back(MovementControl(Vector3f(1.0f,0.0f,0.0f) * 30.0f, &horizontal));
153+
movementControl.movementControls.push_back(MovementControl(Vector3f(0.0f,1.0f,0.0f) * 30.0f, &vertical));
144154

145155
RenderableMeshComponent renderableMesh;
146156
renderableMesh.vertexArray = &vertexArray;
@@ -149,7 +159,7 @@ int Game::loadAndRunScene(RenderDevice& device)
149159
MotionComponent motionComponent;
150160
MegaCubeComponent megaCubeComp;
151161
// Create entities
152-
ecs.makeEntity(transformComponent, movementControl, renderableMesh, colliderComponent);
162+
ecs.makeEntity(transformComponent, movementControl, motionComponent, renderableMesh, colliderComponent);
153163
for(uint32 i = 0; i < 1; i++) {
154164
transformComponent.transform.setTranslation(Vector3f(Math::randf()*10.0f-5.0f, Math::randf()*10.0f-5.0f, 20.0f));
155165
//Math::randf()*10.0f-5.0f + 20.0f));
@@ -159,16 +169,16 @@ int Game::loadAndRunScene(RenderDevice& device)
159169

160170
float vf = -4.0f;
161171
float af = 5.0f;
162-
motionComponent.acceleration = Vector3f(Math::randf(-af, af), Math::randf(-af, af), Math::randf(-af, af));
163-
motionComponent.velocity = motionComponent.acceleration * vf;
172+
// motionComponent.acceleration = Vector3f(Math::randf(-af, af), Math::randf(-af, af), Math::randf(-af, af));
173+
// motionComponent.velocity = motionComponent.acceleration * vf;
164174
// for(uint32 i = 0; i < 3; i++) {
165175
// megaCubeComp.pos[i] = transformComponent.transform.getTranslation()[i];
166176
// megaCubeComp.vel[i] = motionComponent.velocity[i];
167177
// megaCubeComp.acc[i] = motionComponent.acceleration[i];
168178
// megaCubeComp.texIndex = Math::randf() > 0.5f ? 0 : 1;
169179
// }
170180
//ecs.makeEntity(megaCubeComp);
171-
ecs.makeEntity(transformComponent, renderableMesh, colliderComponent);
181+
ecs.makeEntity(transformComponent, renderableMesh, motionComponent, colliderComponent);
172182
}
173183

174184
// Create the systems

src/gameCS/movementControl.hpp

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,46 @@
22

33
#include "ecs/ecs.hpp"
44
#include "utilComponents.hpp"
5+
#include "motion.hpp"
56
#include "math/transform.hpp"
67

8+
struct MovementControl
9+
{
10+
Vector3f movement;
11+
InputControl* inputControl;
12+
float lastInputAmt;
13+
14+
MovementControl(const Vector3f& movementIn, InputControl* inputControlIn) :
15+
movement(movementIn), inputControl(inputControlIn), lastInputAmt(inputControlIn->getAmt()) {}
16+
};
17+
718
struct MovementControlComponent : public ECSComponent<MovementControlComponent>
819
{
9-
Array<std::pair<Vector3f, InputControl*> > movementControls;
20+
Array<MovementControl> movementControls;
1021
};
1122

1223
class MovementControlSystem : public BaseECSSystem
1324
{
1425
public:
1526
MovementControlSystem() : BaseECSSystem()
1627
{
17-
addComponentType(TransformComponent::ID);
1828
addComponentType(MovementControlComponent::ID);
29+
addComponentType(MotionComponent::ID);
1930
}
2031

2132
virtual void updateComponents(float delta, BaseECSComponent** components)
2233
{
23-
TransformComponent* transform = (TransformComponent*)components[0];
24-
MovementControlComponent* movementControl = (MovementControlComponent*)components[1];
34+
MovementControlComponent* movementControl = (MovementControlComponent*)components[0];
35+
MotionComponent* motionComponent = (MotionComponent*)components[1];
2536

2637
for(uint32 i = 0; i < movementControl->movementControls.size(); i++) {
27-
Vector3f movement = movementControl->movementControls[i].first;
28-
InputControl* input = movementControl->movementControls[i].second;
29-
30-
Vector3f newPos = transform->transform.getTranslation()
31-
+ movement * input->getAmt() * delta;
32-
transform->transform.setTranslation(newPos);
38+
Vector3f movement = movementControl->movementControls[i].movement;
39+
float inputAmt = movementControl->movementControls[i].inputControl->getAmt();
40+
float inputDelta = inputAmt - movementControl->movementControls[i].lastInputAmt;
41+
motionComponent->acceleration += movement * inputDelta;
42+
movementControl->movementControls[i].lastInputAmt = inputAmt;
3343
}
44+
// TODO: This is a cheap hack to get resistance for now! Replace with a proper system later
45+
motionComponent->velocity = motionComponent->velocity * 0.95f;
3446
}
3547
};

src/math/aabb.cpp

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,46 @@ AABB::AABB(float* points, uint32 amt, uint32 stride)
3737

3838
AABB AABB::transform(const Matrix& transform) const
3939
{
40-
Vector center(getCenter().toVector(1.0f));
41-
Vector extents(getExtents().toVector(0.0f));
42-
Vector absExtents = extents.abs();
43-
Matrix absMatrix(transform);
44-
for(uint32 i = 0; i < 4; i++) {
45-
absMatrix[i]=absMatrix[i].abs();
46-
}
40+
Vector p000 = extents[0].toVector(1.0f);
41+
Vector p111 = extents[1].toVector(1.0f);
42+
43+
Vector p100 = p000.select(VectorConstants::MASK_X, p111);
44+
Vector p010 = p000.select(VectorConstants::MASK_Y, p111);
45+
Vector p001 = p000.select(VectorConstants::MASK_Z, p111);
46+
Vector p011 = p111.select(VectorConstants::MASK_X, p000);
47+
Vector p101 = p111.select(VectorConstants::MASK_Y, p000);
48+
Vector p110 = p111.select(VectorConstants::MASK_Z, p000);
49+
50+
p000 = transform.transform(p000);
51+
p001 = transform.transform(p001);
52+
p010 = transform.transform(p010);
53+
p011 = transform.transform(p011);
54+
p100 = transform.transform(p100);
55+
p101 = transform.transform(p101);
56+
p110 = transform.transform(p110);
57+
p111 = transform.transform(p111);
4758

48-
Vector newCenter = transform.transform(center);
49-
Vector newExtents = absMatrix.transform(absExtents);
50-
return AABB(newCenter-newExtents, newCenter+newExtents);
59+
Vector newMin =
60+
(p000.min(p001)).min(p010.min(p011)).min(
61+
(p100.min(p101)).min(p110.min(p111)));
62+
Vector newMax =
63+
(p000.max(p001)).max(p010.max(p011)).max(
64+
(p100.max(p101)).max(p110.max(p111)));
65+
return AABB(newMin, newMax);
66+
// Vector center(getCenter().toVector(1.0f));
67+
// Vector extents(getExtents().toVector(0.0f));
68+
// Vector absExtents = extents.abs();
69+
// Matrix absMatrix(transform);
70+
// for(uint32 i = 0; i < 4; i++) {
71+
// absMatrix[i]=absMatrix[i].abs();
72+
// }
73+
//
74+
// Vector newCenter = transform.transform(center);
75+
// Vector newExtents = absMatrix.transform(absExtents);
76+
//
77+
// Vector newMinExtents = newCenter-newExtents;
78+
// Vector newMaxExtents = newCenter+newExtents;
79+
// return AABB(newMinExtents.min(newMaxExtents), newMaxExtents.max(newMinExtents));
5180
}
5281

5382
bool AABB::intersectRay(const Vector3f& start, const Vector3f& rayDir, float& point1, float& point2) const

0 commit comments

Comments
 (0)