/* ************************************************************************** */ /* _____ _ __ ___ __ */ /* Object.cpp | ___(_)/ _| ___ ( _ ) / /_ */ /* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */ /* | _| | | _| __/ (_) | (_) | */ /* Author: Fife |_| |_|_| \___|\___/ \___/ */ /* */ /* ************************************************************************** */ #include "..\C-Engine\include\Object.hpp" Object::Object() { OTransform = new Transform(this); ORender = new Render(this); tag = new char[20]; enable = true; ORigidBody = NULL; OScript = NULL; Conteneur = NULL; } Object::~Object() { delete OTransform; delete ORender; delete ORigidBody; delete OScript; delete []tag; } void Object::AffectEngine(Engine * EV) { Conteneur = EV; } void Object::AffectScript(Script * SV) { OScript = SV; OScript->AffectObject(this); } void Object::AffectTag(char * v) { strcpy( tag , v );//Copie v dans tag. } void Object::Enable() { enable = true; } void Object::Disable() { enable = false; } void Object::AddRigidBody() { ORigidBody = new RigidBody(this); } Engine * Object::GetEngine() { return Conteneur; } Transform * Object::GetTransform() { return OTransform; } RigidBody * Object::GetRigidBody() { return ORigidBody; } Render * Object::GetRender() { return ORender; } Script * Object::GetScript() { return OScript; } char * Object::GetTag() { return tag; } bool Object::GetEnable() { return enable; } bool Object::IsOnScreen() { if(OTransform->GetX() < Conteneur->GetScreen()->max.x && OTransform->GetX() + ORender->GetSizeX() > Conteneur->GetScreen()->min.x && OTransform->GetY() < Conteneur->GetScreen()->max.y && OTransform->GetY() + ORender->GetSizeY() > Conteneur->GetScreen()->min.y ) return true; else return false; return true; } Object * Object::GetObjectCollisionTag( char* v, int x , int y) { if(Conteneur->GetCurrentLevel()) { for( int i = 0; i < Conteneur->GetCurrentLevel()->GetNbObject(); i++ ) { if(Conteneur->GetCurrentLevel()->GetListeObject()[i] != this) { if( Conteneur->GetCurrentLevel()->GetListeObject()[i]->TestTag(v) && Conteneur->GetCurrentLevel()->GetListeObject()[i]->enable) { if(Collision(i , Conteneur->GetCurrentLevel()))return Conteneur->GetCurrentLevel()->GetListeObject()[i]; } } } } else { for( int i = 0; i < Conteneur->GetNbObject(); i++ ) { if(Conteneur->GetListeObject()[i] != this) { if( Conteneur->GetCurrentLevel()->GetListeObject()[i]->TestTag(v) && Conteneur->GetListeObject()[i]->enable) { if(Collision(i))return Conteneur->GetListeObject()[i]; } } } } return NULL; } bool Object::GetCollisionTag(char* v , int x , int y) { if(GetObjectCollisionTag(v,x,y))return true; return false; } bool Object::Collision(int id , Level * l) { Object * buffer; if(l)buffer = Conteneur->GetCurrentLevel()->GetListeObject()[id]; else buffer = Conteneur->GetListeObject()[id]; int widht1 = ORender->GetSizeX(); int height1 = ORender->GetSizeY(); int widht2 = buffer->ORender->GetSizeX(); int height2 = buffer->ORender->GetSizeY(); if(ORigidBody) { if(ORigidBody->GetStat()) { widht1 = ORigidBody->GetWidht(); height1 = ORigidBody->GetHeight(); } } if(buffer->ORigidBody) { if(buffer->ORigidBody->GetStat()) { widht2 = buffer->ORigidBody->GetWidht(); height2 = buffer->ORigidBody->GetHeight(); } } if( (( buffer->OTransform->GetX() + buffer->ORender->GetBlitX() >= OTransform->GetX() + ORender->GetBlitX() + widht1) || (buffer->OTransform->GetX() + buffer->ORender->GetBlitX() + widht2 <= OTransform->GetX() + ORender->GetBlitX()) || (buffer->OTransform->GetY() + buffer->ORender->GetBlitY()>= OTransform->GetY() + ORender->GetBlitY() + height1) || (buffer->OTransform->GetY() + buffer->ORender->GetBlitY() + height2 <= OTransform->GetY() + ORender->GetBlitY()) ) == false )return true; return false; } bool Object::TestTag(char * v) { if(!strcmp(tag , v)) return true; return false; }