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 "ExCMeshFireEffect.h"
00025
00026 ExCMeshFireEffect::ExCMeshFireEffect()
00027 {
00028 Guard(ExCMeshFireEffect::ExCMeshFireEffect())
00029 SetName("ExCMeshFireEffect");
00030 SetType(typeid(this).name());
00031 m_CurrentAnimationTexture=0;
00032 m_LastTime=0;
00033 m_DelayNextFrame=75;
00034 UnGuard
00035 }
00036
00037 ExCMeshFireEffect::~ExCMeshFireEffect()
00038 {
00039 Guard(ExCMeshFireEffect::~ExCMeshFireEffect())
00040 UnGuard
00041 }
00042
00043 void ExCMeshFireEffect::Draw(void)
00044 {
00045 Guard(void ExCMeshFireEffect::Draw(void))
00046 if(!m_Visible)return;
00047
00048 ExCVec3D v1,v2,v3,v4,up,right,CollisionResult;
00049 GLfloat viewMatrix[16];
00050
00051
00052 glGetFloatv(GL_MODELVIEW_MATRIX, viewMatrix);
00053
00054 right.SetValue(viewMatrix[0],viewMatrix[4],viewMatrix[8]);
00055 up.SetValue(viewMatrix[1],viewMatrix[5],viewMatrix[9]);
00056
00057 glEnable(GL_BLEND);
00058 glBlendFunc(GL_SRC_ALPHA,GL_ONE);
00059 glEnable(GL_TEXTURE_2D);
00060 glDisable(GL_LIGHTING);
00061 glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
00062 ManagerTexture->SetCurrentObject(m_VecAnimTexture.at(m_CurrentAnimationTexture));
00063
00064 glColor4f(1.0f,1.0f,1.0f,1.0f);
00065
00066 v1=m_Position+(right+up)*-m_Size;
00067 v2=m_Position+(right-up)*m_Size;
00068 v3=m_Position+(right+up)*m_Size;
00069 v4=m_Position+(up-right)*m_Size;
00070
00071 glBegin(GL_QUADS);
00072 glTexCoord2f(0.0f, 0.0f); glVertex3fv(v1.m_Vector);
00073 glTexCoord2f(1.0f, 0.0f); glVertex3fv(v2.m_Vector);
00074 glTexCoord2f(1.0f, 1.0f); glVertex3fv(v3.m_Vector);
00075 glTexCoord2f(0.0f, 1.0f); glVertex3fv(v4.m_Vector);
00076 glEnd();
00077
00078 glDisable(GL_TEXTURE_2D);
00079 glDisable(GL_BLEND);
00080
00081
00082 if(m_LastTime+m_DelayNextFrame<glutGet(GLUT_ELAPSED_TIME))
00083 {
00084 if (m_CurrentAnimationTexture<m_VecAnimTexture.size()-1)
00085 {
00086 m_CurrentAnimationTexture++;
00087 }else m_CurrentAnimationTexture=0;
00088 m_LastTime=glutGet(GLUT_ELAPSED_TIME);
00089 }
00090
00091 UnGuard
00092 }
00093
00094 bool ExCMeshFireEffect::Load(std::string FileName)
00095 {
00096 Guard(bool ExCMeshFireEffect::Load(std::string FileName))
00097 char buffer[255];
00098 #ifdef UNIX_SRC
00099 sprintf(buffer, PREFIX "/ExNihilo/Data/Mesh/%s", FileName.data());
00100 #else
00101 sprintf(buffer, "../Data/Mesh/%s", FileName.data());
00102 #endif
00103 std::ifstream fin;
00104 std::string buffstring;
00105 char b[256];
00106 fin.open(buffer,std::ios::in);
00107 if(fin.is_open())
00108 {
00109 try
00110 {
00111
00112 memset(b,0,255);
00113 fin.getline(b,256,'\n');
00114
00115
00116 memset(b,0,255);
00117 fin.getline(b,256,'\n');
00118 m_Size=ExNihilo::ExtractFloatValueFromSring(b,"<Size>","<#Size>");
00119
00120 do
00121 {
00122 memset(b,0,255);
00123 fin.getline(b,256,'\n');
00124 try
00125 {
00126 buffstring=ExNihilo::ExtracValueFromSring(b,"<Frame>","<#Frame>");
00127
00128 m_VecAnimTexture.push_back(buffstring);
00129
00130 }catch(ExCExpStringNotFound){}
00131 }while(!fin.eof());
00132 fin.close();
00133 }catch(...){throw ExCExpFileReadError();}
00134 }else throw ExCExpFileNotFound();
00135 return true;
00136 UnGuard
00137 }