I give up, I'm just using the stop-dead system for now.
This commit is contained in:
@@ -21,3 +21,15 @@
|
|||||||
*/
|
*/
|
||||||
#include "local_character.hpp"
|
#include "local_character.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
bool LocalCharacter::ProcessCollisionGrid(std::list<BoundingBox> boxList) {
|
||||||
|
for(auto& box : boxList) {
|
||||||
|
if (box.CheckOverlap(origin + bounds)) {
|
||||||
|
origin -= motion;
|
||||||
|
motion = {0, 0};
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
@@ -23,12 +23,18 @@
|
|||||||
#define LOCALCHARACTER_HPP_
|
#define LOCALCHARACTER_HPP_
|
||||||
|
|
||||||
#include "base_character.hpp"
|
#include "base_character.hpp"
|
||||||
|
#include "bounding_box.hpp"
|
||||||
|
#include "vector2.hpp"
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
class LocalCharacter: public BaseCharacter {
|
class LocalCharacter: public BaseCharacter {
|
||||||
public:
|
public:
|
||||||
LocalCharacter() = default;
|
LocalCharacter() = default;
|
||||||
virtual ~LocalCharacter() = default;
|
virtual ~LocalCharacter() = default;
|
||||||
|
|
||||||
|
bool ProcessCollisionGrid(std::list<BoundingBox>);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//NOTE: NO MEMBERS
|
//NOTE: NO MEMBERS
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -157,7 +157,10 @@ void InWorld::Update() {
|
|||||||
std::list<BoundingBox> boxList = GenerateCollisionGrid(localCharacter, tileSheet.GetTileW(), tileSheet.GetTileH());
|
std::list<BoundingBox> boxList = GenerateCollisionGrid(localCharacter, tileSheet.GetTileW(), tileSheet.GetTileH());
|
||||||
|
|
||||||
//process the collisions
|
//process the collisions
|
||||||
std::cout << "boxList.size(): " << boxList.size() << std::endl;
|
if (localCharacter->ProcessCollisionGrid(boxList)) {
|
||||||
|
localCharacter->CorrectSprite();
|
||||||
|
SendLocalCharacterMotion();
|
||||||
|
}
|
||||||
|
|
||||||
//update the camera
|
//update the camera
|
||||||
camera.x = localCharacter->GetOrigin().x - camera.marginX;
|
camera.x = localCharacter->GetOrigin().x - camera.marginX;
|
||||||
@@ -672,6 +675,11 @@ void InWorld::HandleCharacterSetRoom(CharacterPacket* const argPacket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterSetOrigin(CharacterPacket* const argPacket) {
|
void InWorld::HandleCharacterSetOrigin(CharacterPacket* const argPacket) {
|
||||||
|
//TODO: Authentication
|
||||||
|
if (argPacket->characterIndex == characterIndex) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//check that this character exists
|
//check that this character exists
|
||||||
std::map<int, BaseCharacter>::iterator characterIt = characterMap.find(argPacket->characterIndex);
|
std::map<int, BaseCharacter>::iterator characterIt = characterMap.find(argPacket->characterIndex);
|
||||||
if (characterIt != characterMap.end()) {
|
if (characterIt != characterMap.end()) {
|
||||||
@@ -683,6 +691,11 @@ void InWorld::HandleCharacterSetOrigin(CharacterPacket* const argPacket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandleCharacterSetMotion(CharacterPacket* const argPacket) {
|
void InWorld::HandleCharacterSetMotion(CharacterPacket* const argPacket) {
|
||||||
|
//TODO: Authentication
|
||||||
|
if (argPacket->characterIndex == characterIndex) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//check that this character exists
|
//check that this character exists
|
||||||
std::map<int, BaseCharacter>::iterator characterIt = characterMap.find(argPacket->characterIndex);
|
std::map<int, BaseCharacter>::iterator characterIt = characterMap.find(argPacket->characterIndex);
|
||||||
if (characterIt != characterMap.end()) {
|
if (characterIt != characterMap.end()) {
|
||||||
@@ -719,10 +732,10 @@ std::list<BoundingBox> InWorld::GenerateCollisionGrid(Entity* ptr, int tileWidth
|
|||||||
//NOTE: for loops were too dense to work with, so I've just used while loops
|
//NOTE: for loops were too dense to work with, so I've just used while loops
|
||||||
|
|
||||||
//outer loop
|
//outer loop
|
||||||
wallBounds.x = snapToBase((double)wallBounds.w, ptr->GetOrigin().x) - wallBounds.w;
|
wallBounds.x = snapToBase((double)wallBounds.w, ptr->GetOrigin().x);
|
||||||
while(wallBounds.x < (ptr->GetOrigin() + ptr->GetBounds()).x + ptr->GetBounds().w) {
|
while(wallBounds.x < (ptr->GetOrigin() + ptr->GetBounds()).x + ptr->GetBounds().w) {
|
||||||
//inner loop
|
//inner loop
|
||||||
wallBounds.y = snapToBase((double)wallBounds.h, ptr->GetOrigin().y) - wallBounds.h;
|
wallBounds.y = snapToBase((double)wallBounds.h, ptr->GetOrigin().y);
|
||||||
while(wallBounds.y < (ptr->GetOrigin() + ptr->GetBounds()).y + ptr->GetBounds().h) {
|
while(wallBounds.y < (ptr->GetOrigin() + ptr->GetBounds()).y + ptr->GetBounds().h) {
|
||||||
//check to see if this tile is solid
|
//check to see if this tile is solid
|
||||||
if (regionPager.GetSolid(wallBounds.x / wallBounds.w, wallBounds.y / wallBounds.h)) {
|
if (regionPager.GetSolid(wallBounds.x / wallBounds.w, wallBounds.y / wallBounds.h)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user