int MineBoisage::generatePoutre(float diameter, vector3df &pt1, vector3df &pt2, SMeshBuffer * buffer, vector3df vecteurGalerie) { vecteurGalerie.normalize(); vecteurGalerie*=diameter/2.0f; int n = buffer->Vertices.size(); // vertices buffer->Vertices.push_back( makeS3DVertex(pt1+vecteurGalerie, vector3df(0,+diameter/2.0f, 0), dimension2d<f32>(0,1),pt1)); // 0 buffer->Vertices.push_back( makeS3DVertex(pt1+vecteurGalerie, vector3df(0,-diameter/2.0f, 0), dimension2d<f32>(0,0),pt1)); // 1 buffer->Vertices.push_back( makeS3DVertex(pt1-vecteurGalerie, vector3df(0,-diameter/2.0f, 0), dimension2d<f32>(0,1),pt1)); // 2 buffer->Vertices.push_back( makeS3DVertex(pt1-vecteurGalerie, vector3df(0,+diameter/2.0f, 0), dimension2d<f32>(0,0),pt1)); // 3 buffer->Vertices.push_back( makeS3DVertex(pt2+vecteurGalerie, vector3df(0,+diameter/2.0f, 0), dimension2d<f32>(1,1),pt2)); // 4 buffer->Vertices.push_back( makeS3DVertex(pt2+vecteurGalerie, vector3df(0,-diameter/2.0f, 0), dimension2d<f32>(1,0),pt2)); // 5 buffer->Vertices.push_back( makeS3DVertex(pt2-vecteurGalerie, vector3df(0,-diameter/2.0f, 0), dimension2d<f32>(1,1),pt2)); // 6 buffer->Vertices.push_back( makeS3DVertex(pt2-vecteurGalerie, vector3df(0,+diameter/2.0f, 0), dimension2d<f32>(1,0),pt2)); // 7 // indices pushPoly(buffer, n+0, n+2, n+1); pushPoly(buffer, n+0, n+3, n+1); pushPoly(buffer, n+0, n+4, n+7); pushPoly(buffer, n+0, n+7, n+3); pushPoly(buffer, n+0, n+1, n+4); pushPoly(buffer, n+1, n+5, n+4); pushPoly(buffer, n+5, n+6, n+7); pushPoly(buffer, n+4, n+5, n+7); pushPoly(buffer, n+3, n+7, n+2); pushPoly(buffer, n+7, n+6, n+2); pushPoly(buffer, n+6, n+1, n+2); pushPoly(buffer, n+6, n+5, n+1); return 0; }
MineBoisage::MineBoisage(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id, MineProfil * profil, MineBloc * pMineBloc, vector3df vecteurGalerie) : scene::ISceneNode(parent, mgr, id) { m_profil=*profil; m_pMineBloc=pMineBloc; m_buffer=NULL; m_mesh=NULL; vecteurGalerie.Y=0; vecteurGalerie.normalize(); vector3df verticale(0.0, 1.0, 0.0); vector3df vecteurNormal = vecteurGalerie.crossProduct(verticale); m_buffer = new SMeshBuffer(); m_mesh = new SMesh(); // base du bois gauche : generateCylinder(10, m_profil.m_s1, m_profil.m_s4, m_buffer,0,false); generateCylinder(10, m_profil.m_s2, m_profil.m_s3, m_buffer,0,false); generatePoutre(3.0, m_profil.m_s4, m_profil.m_s3, m_buffer,vecteurGalerie); /* // recalculate normals s32 n = (s32)m_buffer->Indices.size(); for (s32 i=0; i<n-3; i+=3) { core::plane3d<f32> p( m_buffer->Vertices[m_buffer->Indices[i+0]].Pos, m_buffer->Vertices[m_buffer->Indices[i+1]].Pos, m_buffer->Vertices[m_buffer->Indices[i+2]].Pos); p.Normal.normalize(); m_buffer->Vertices[m_buffer->Indices[i+0]].Normal = p.Normal; m_buffer->Vertices[m_buffer->Indices[i+1]].Normal = p.Normal; m_buffer->Vertices[m_buffer->Indices[i+2]].Normal = p.Normal; } */ video::IVideoDriver* driver = g_data.driver; m_buffer->Material.Wireframe = false; //true; m_buffer->Material.BackfaceCulling = true; m_buffer->Material.Lighting = true; m_buffer->Material.EmissiveColor=SColor(255,0,0,0); m_buffer->Material.AmbientColor=SColor(255,255,255,255); m_buffer->Material.DiffuseColor=SColor(255,255,255,255); //m_buffer->Material.NormalizeNormals=true; m_buffer->Material.FogEnable=false; m_buffer->Material.MaterialType=EMT_SOLID; m_buffer->Material.Shininess=0.0f; m_buffer->Material.Texture1= driver->getTexture("media/wood.jpg"); // m_buffer->recalculateBoundingBox(); setDebugDataVisible(false); m_mesh->addMeshBuffer(m_buffer); // m_mesh->recalculateBoundingBox(); // creation de la bbox Box.reset(m_profil.m_s1); Box.addInternalPoint(m_profil.m_s2); Box.addInternalPoint(m_profil.m_s3); Box.addInternalPoint(m_profil.m_s4); }
void CSPhysXObject_Character::addForce(vector3df dir, float force) { // if (!m_Controller) return; // if (!m_Controller->getActor()) return; dir.normalize(); PxVec3 disp = PxVec3(dir.X, dir.Y, dir.Z) * force; m_TotalForce += vector3df(disp.x, disp.y, disp.z); }
S3DVertex&TrackVertex::makeS3DVertex() { static S3DVertex v=S3DVertex(); static vector3df default_normal(1.0,1.0,1.0); default_normal.normalize(); static vector2df default_texture_coords(0.0,0.0); v.TCoords=default_texture_coords; v.Pos=xyz; v.Color=this->color; v.Normal=default_normal; return v; }
void ZombieInstance :: Damage(int amount, vector3df force) { currentHealth -= amount; // Brief stun: ChangeState(IDLE); timer = amount; force.normalize(); velocity += force * (amount / 100.0f); CheckDeath(); }