From 7c02c23663ebe39fd44faf338df0596ac80911aa Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Thu, 12 Apr 2012 17:00:05 +0100 Subject: [PATCH] [Add] Added a TileCollision class to store some collision data. --- LibDQt/LibDQt.pro | 3 ++- src/Actor/Player.cpp | 29 +++++++++++------------------ src/Actor/Player.h | 8 ++++---- src/Collision/AABB.cpp | 4 ++-- src/Collision/TileCollision.h | 25 +++++++++++++++++++++++++ 5 files changed, 44 insertions(+), 25 deletions(-) create mode 100644 src/Collision/TileCollision.h diff --git a/LibDQt/LibDQt.pro b/LibDQt/LibDQt.pro index 665f0f7..0fac0c0 100644 --- a/LibDQt/LibDQt.pro +++ b/LibDQt/LibDQt.pro @@ -48,7 +48,8 @@ HEADERS += ../src/Actor/Player.h \ ../src/TMXParser/TmxMap.h \ ../src/TMXParser/TmxLayer.h \ ../src/TMXParser/Tmx.h \ - ../src/TMXParser/base64.h + ../src/TMXParser/base64.h \ + ../src/Collision/TileCollision.h SOURCES += ../src/Actor/Player.cpp \ ../src/Collision/AABB.cpp \ ../src/Global/Globals.cpp \ diff --git a/src/Actor/Player.cpp b/src/Actor/Player.cpp index eac90b1..0c0d634 100644 --- a/src/Actor/Player.cpp +++ b/src/Actor/Player.cpp @@ -14,9 +14,9 @@ Player::Player(void) { _collisionBound = new AABB(); _collisionBound->CreateAABBFromSprite("../Data/Img/Player"); - //_environmentCollisionBound = new AABB(); - //_environmentCollisionBound->SetMin(_collisionBound->GetMin().x, _collisionBound->GetMax().y - 50.0f); - //_environmentCollisionBound->SetMax(_collisionBound->GetMax()); + _environmentCollisionBound = new AABB(); + _environmentCollisionBound->SetMin(_collisionBound->GetMin().x, _collisionBound->GetMax().y - 50.0f); + _environmentCollisionBound->SetMax(_collisionBound->GetMax().x, _collisionBound->GetMax().y); } Player::~Player(void) { @@ -26,11 +26,11 @@ Player::~Player(void) { void Player::Update(void) { // Position and collision bound with the player. - //_collisionBound->SetPositionOffset(_player->GetX(), _player->GetY()); - //_environmentCollisionBound->SetPositionOffset(_player->GetX, _player->GetY()); + _collisionBound->SetPositionOffset(_player->GetX(), _player->GetY()); + _environmentCollisionBound->SetPositionOffset(_player->GetPosition().x, _player->GetPosition().y); // Time to process the collisions. - //ProcessCollisions(); + ProcessCollisions(); // Process events here. ProcessEvents(); @@ -44,22 +44,15 @@ void Player::Render(void) { void Player::ProcessCollisions(void) { // Process collisions with entities and actors. // We should ensure we are not dead. - //EntityCollisionTest(); - //ActorCollisionTest(); + EntityCollisionTest(); + ActorCollisionTest(); // Set all collision flags to false conditions // then they will need to be proven in the test. _notColliding = true; _blueCollision = false; - bool onFloor = false; - // This is going to get messy, and I am going to have to play - // in KonoM's level stuff. - - // We need a level manager class that will create a list of collidable - // entites/actors. - - // I'll do this tomorrow now. + //if(_environmentCollisionBound->InCollision()) } void Player::EntityCollisionTest(void) { @@ -91,5 +84,5 @@ void Player::ProcessEvents(void) { } } -int Player::GetWidth() { return _player->GetWidth(); } -int Player::GetHeight() { return _player->GetWidth(); } +int Player::GetWidth(void) { return _player->GetWidth(); } +int Player::GetHeight(void) { return _player->GetWidth(); } diff --git a/src/Actor/Player.h b/src/Actor/Player.h index 7d7dd78..8644d83 100644 --- a/src/Actor/Player.h +++ b/src/Actor/Player.h @@ -30,10 +30,10 @@ public: void ProcessEvents(void); - int GetX() { return x; } - int GetY() { return y; } - int GetWidth(); - int GetHeight(); + int GetX(void) { return x; } + int GetY(void) { return y; } + int GetWidth(void); + int GetHeight(void); private: float x; diff --git a/src/Collision/AABB.cpp b/src/Collision/AABB.cpp index 682d8d2..babd81e 100644 --- a/src/Collision/AABB.cpp +++ b/src/Collision/AABB.cpp @@ -62,8 +62,8 @@ void AABB::CreateAABBFromSprite(const char* filename) { // I have no methods here, hopefully KonoM will have it // implemented real soon... - float spriteWidth = _sprite->w; - float spriteHeight = _sprite->h; + //float spriteWidth = _sprite->w; + //float spriteHeight = _sprite->h; // Find the min, look through until we find a first instance of a white color. bool found = false; diff --git a/src/Collision/TileCollision.h b/src/Collision/TileCollision.h new file mode 100644 index 0000000..dad9f06 --- /dev/null +++ b/src/Collision/TileCollision.h @@ -0,0 +1,25 @@ +#pragma once +#include "../Math/Vec2.h" +#include "AABB.h" + +// TileCollision stores collision data loaded from an +// an external collision map file. It stores the AABB, +// tile ID and chosen color. + +class TileCollision { +public: + TileCollision(void) {} + ~TileCollision(void) {} + + void SetAABB(AABB* aabb) { _AABB.SetMax(aabb->GetMax()); _AABB.SetMin(aabb->GetMin()); } + void SetAABB(Vec2 &min, Vec2 &max) { _AABB.SetMax(max); _AABB.SetMin(min); } + AABB* GetAABB(void) { return &_AABB; } + void SetTileNumber(int tileID) { _tileID = tileID; } + int SetColor(int color) { _color = color; } + int GetColor(void) { return _color; } + +private: + int _tileID; + int _color; + AABB _AABB; +};