00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ExManagerCollision.h"
00025
00026 bool ExManagerCollision::m_flag = false;
00027 ExManagerCollision* ExManagerCollision::m_instance = NULL;
00028
00029 ExManagerCollision* ExManagerCollision::CreateSingleton(void){
00030 Guard(ExManagerCollision* ExManagerCollision::CreateSingleton(void))
00031 if(!m_flag)
00032 {
00033 m_flag = true;
00034 m_instance = new ExManagerCollision;
00035 }else
00036 {
00037 std::cout<<"Error singleton already created"<<std::endl;
00038 }
00039 return m_instance;
00040 UnGuard
00041 }
00042
00043 ExManagerCollision::ExManagerCollision(void)
00044 {
00045 }
00046
00047 ExManagerCollision::~ExManagerCollision(void)
00048 {
00049 }
00050
00051 void ExManagerCollision::Reset(void)
00052 {
00053 }
00054
00055 void ExManagerCollision::Reload(void)
00056 {
00057 }
00058
00059 void ExManagerCollision::ResolveCollision(void)
00060 {
00061 Guard(void ExManagerCollision::ResolveCollision(void))
00062
00063
00064
00065 ExCVec3D Nev,CurrentVec;
00066 ExCModel *CurrentModel,*ModelToCompare;
00067 float lowlestradius;
00068 bool Collision;
00069 for(unsigned int i=0;i<ManagerModel->GetNumberObject();i++)
00070 {
00071 CurrentModel=ManagerModel->GetCurrentObject();
00072 Collision=false;
00073 for(unsigned int j=i+1;j<ManagerModel->GetNumberObject();j++)
00074 {
00075 ManagerModel->NextObject();
00076 ModelToCompare=ManagerModel->GetCurrentObject();
00077 ModelToCompare->ResetCollisionCouter();
00078 ModelToCompare->GetCollisionGizmo()->SetColor(ExCVec3D(1.0f,1.0f,1.0f));
00079
00080
00081 if(strcmp(ModelToCompare->GetCollisionGizmo()->GetType().data(),"class ExCGizmoSphere *")==0
00082 &&strcmp(CurrentModel->GetCollisionGizmo()->GetType().data(),"class ExCGizmoSphere *")==0)
00083 {
00084
00085 if(ModelToCompare->m_SphereRadius<CurrentModel->m_SphereRadius)
00086 {
00087 lowlestradius=ModelToCompare->m_SphereRadius;
00088 }else{
00089 lowlestradius=CurrentModel->m_SphereRadius;
00090 }
00091 Nev=ModelToCompare->GetPosition()-CurrentModel->GetPosition();
00092 if(Nev.GetX()<lowlestradius&&Nev.GetX()>-lowlestradius)
00093 {
00094 if(Nev.GetZ()<lowlestradius&&Nev.GetZ()>-lowlestradius)
00095 {
00096 std::cout<<CurrentModel->GetName()<<" Collision SPHERE/SPHERE with "<<ModelToCompare->GetName()<<std::endl;
00097 if(Nev.GetY()<lowlestradius&&Nev.GetY()>-lowlestradius)
00098 {
00099 ExCVec3D tmpvel,tmptrgt;
00100 tmpvel=CurrentModel->GetVelocity()+ModelToCompare->GetVelocity();
00101 tmptrgt=CurrentModel->GetTarget()+ModelToCompare->GetTarget();
00102
00103 CurrentModel->SetVelocity(tmpvel/2);
00104 CurrentModel->SetTarget(tmptrgt/2);
00105 ModelToCompare->SetVelocity(tmpvel/2);
00106 ModelToCompare->SetTarget(tmptrgt/2);
00107 CurrentModel->GetCollisionGizmo()->SetColor(ExCVec3D(1.0f,0.0f,0.0f));
00108 ModelToCompare->GetCollisionGizmo()->SetColor(ExCVec3D(0.0f,1.0f,0.0f));
00109 Collision=true;
00110 CurrentModel->IncreaseCollisionCouter();
00111 ModelToCompare->IncreaseCollisionCouter();
00112
00113 }
00114 }
00115 }
00116 }
00117
00118 if(strcmp(ModelToCompare->GetCollisionGizmo()->GetType().data(),"class ExCGizmoSphere *")==0
00119 &&strcmp(CurrentModel->GetCollisionGizmo()->GetType().data(),"class ExCGizmoRectangle*")==0)
00120 {
00121
00122 }
00123
00124 if(strcmp(ModelToCompare->GetCollisionGizmo()->GetType().data(),"class ExCGizmoRectangle *")==0
00125 &&strcmp(CurrentModel->GetCollisionGizmo()->GetType().data(),"class ExCGizmoSphere *")==0)
00126 {
00127
00128 }
00129
00130 if(strcmp(ModelToCompare->GetCollisionGizmo()->GetType().data(),"class ExCGizmoRectangle *")==0
00131 &&strcmp(CurrentModel->GetCollisionGizmo()->GetType().data(),"class ExCGizmoRectangle *")==0)
00132 {
00133
00134 }
00135 }
00136 if(!Collision)
00137 {
00138
00139 }
00140 ManagerModel->NextObject();
00141 }
00142 UnGuard
00143 }
00144
00145 void ExManagerCollision::Clear(void)
00146 {
00147
00148 }