Tux now has wheels in the kart selection screen
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3655 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
708b65b0af
commit
7a2e67505f
@ -277,14 +277,30 @@ scene::ISceneNode *IrrDriver::addMesh(scene::IMesh *mesh)
|
||||
return m_scene_manager->addMeshSceneNode(mesh);
|
||||
} // addMesh
|
||||
|
||||
void IrrDriver::renderToTexture(scene::IMesh *mesh, ITexture* target, float angle)
|
||||
{
|
||||
scene::ISceneNode* node = addMesh(mesh);
|
||||
node->setScale( core::vector3df(50.0f, 50.0f, 50.0f) );
|
||||
node->setPosition( core::vector3df(0,0,0) );
|
||||
node->updateAbsolutePosition();
|
||||
void IrrDriver::renderToTexture(ptr_vector<scene::IMesh, REF>& mesh, std::vector<Vec3>& mesh_location, ITexture* target, float angle)
|
||||
{
|
||||
scene::ISceneNode* main_node = NULL;
|
||||
|
||||
const int mesh_amount = mesh.size();
|
||||
for(int n=0; n<mesh_amount; n++)
|
||||
{
|
||||
scene::ISceneNode* node = addMesh(mesh.get(n));
|
||||
|
||||
if(main_node == NULL)
|
||||
{
|
||||
main_node = node;
|
||||
}
|
||||
else
|
||||
{
|
||||
node->setParent(main_node);
|
||||
}
|
||||
|
||||
node->setPosition( mesh_location[n].toIrrVector() );
|
||||
node->updateAbsolutePosition();
|
||||
}
|
||||
|
||||
node->setRotation( core::vector3df(0, angle, 0) );
|
||||
main_node->setScale( core::vector3df(50.0f, 50.0f, 50.0f) );
|
||||
main_node->setRotation( core::vector3df(0, angle, 0) );
|
||||
|
||||
//vector3d< f32 > modelsize = mesh->getBoundingBox().getExtent();
|
||||
//std::cout << "box size " << modelsize.X*50.0 << ", " << modelsize.Y*50.0 << ", " << modelsize.Z*50.0 << std::endl;
|
||||
@ -299,22 +315,22 @@ void IrrDriver::renderToTexture(scene::IMesh *mesh, ITexture* target, float angl
|
||||
light->getLightData().DiffuseColor = irr::video::SColorf(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
light->getLightData().SpecularColor = irr::video::SColorf(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
|
||||
node->setMaterialFlag(EMF_GOURAUD_SHADING , true);
|
||||
node->setMaterialFlag(EMF_LIGHTING, true);
|
||||
main_node->setMaterialFlag(EMF_GOURAUD_SHADING , true);
|
||||
main_node->setMaterialFlag(EMF_LIGHTING, true);
|
||||
// node->setMaterialFlag(EMF_LIGHTING, true);
|
||||
|
||||
const int materials = node->getMaterialCount();
|
||||
const int materials = main_node->getMaterialCount();
|
||||
for(int n=0; n<materials; n++)
|
||||
{
|
||||
node->getMaterial(n).setFlag(EMF_LIGHTING, true);
|
||||
main_node->getMaterial(n).setFlag(EMF_LIGHTING, true);
|
||||
|
||||
node->getMaterial(n).Shininess = 200.0f; // set size of specular highlights
|
||||
node->getMaterial(n).SpecularColor.set(255,150,150,150);
|
||||
node->getMaterial(n).DiffuseColor.set(255,150,150,150);
|
||||
main_node->getMaterial(n).Shininess = 200.0f; // set size of specular highlights
|
||||
main_node->getMaterial(n).SpecularColor.set(255,150,150,150);
|
||||
main_node->getMaterial(n).DiffuseColor.set(255,150,150,150);
|
||||
|
||||
//node->getMaterial(n).setFlag(EMF_NORMALIZE_NORMALS , true);
|
||||
node->getMaterial(n).setFlag(EMF_GOURAUD_SHADING , true);
|
||||
node->getMaterial(n).GouraudShading = true;
|
||||
main_node->getMaterial(n).setFlag(EMF_GOURAUD_SHADING , true);
|
||||
main_node->getMaterial(n).GouraudShading = true;
|
||||
}
|
||||
|
||||
ICameraSceneNode* camera = m_scene_manager->addCameraSceneNode();
|
||||
@ -329,7 +345,7 @@ void IrrDriver::renderToTexture(scene::IMesh *mesh, ITexture* target, float angl
|
||||
m_scene_manager->drawAll();
|
||||
//m_device->getVideoDriver()->endScene();
|
||||
|
||||
removeNode(node);
|
||||
removeNode(main_node);
|
||||
removeNode(camera);
|
||||
removeNode(light);
|
||||
|
||||
|
@ -23,6 +23,9 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "utils/ptr_vector.hpp"
|
||||
#include "utils/vec3.hpp"
|
||||
|
||||
#include "irrlicht.h"
|
||||
using namespace irr;
|
||||
|
||||
@ -86,7 +89,7 @@ public:
|
||||
void showPointer();
|
||||
void hidePointer();
|
||||
|
||||
void renderToTexture(scene::IMesh *mesh, irr::video::ITexture* target, float angle);
|
||||
void renderToTexture(ptr_vector<scene::IMesh, REF>& mesh, std::vector<Vec3>& mesh_location, video::ITexture* target, float angle);
|
||||
}; // IrrDriver
|
||||
|
||||
extern IrrDriver *irr_driver;
|
||||
|
@ -128,12 +128,13 @@ namespace StateManager
|
||||
assert( w3 != NULL );
|
||||
|
||||
// set kart model - FIXME - doesn't work very much
|
||||
IMesh* mesh = kart_properties_manager->getKart("tux")->getKartModel()->getModel();
|
||||
SAnimatedMesh* test = new SAnimatedMesh(); // FIXME - memory management
|
||||
test->addMesh(mesh);
|
||||
//test->setMaterialFlag(EMF_LIGHTING , false);
|
||||
KartModel* kartModel = kart_properties_manager->getKart("tux")->getKartModel();
|
||||
|
||||
w3->setModel(test);
|
||||
w3->addModel( kartModel->getModel() );
|
||||
w3->addModel( kartModel->getWheelModel(0), kartModel->getWheelGraphicsPosition(0) );
|
||||
w3->addModel( kartModel->getWheelModel(1), kartModel->getWheelGraphicsPosition(1) );
|
||||
w3->addModel( kartModel->getWheelModel(2), kartModel->getWheelGraphicsPosition(2) );
|
||||
w3->addModel( kartModel->getWheelModel(3), kartModel->getWheelGraphicsPosition(3) );
|
||||
w3->update(0);
|
||||
|
||||
getCurrentScreen()->m_inited = true;
|
||||
|
@ -1273,9 +1273,10 @@ void ModelViewWidget::add()
|
||||
m_texture = GUIEngine::getDriver()->addTexture( core::dimension2d< s32 >(512, 512), name.c_str() );
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
void ModelViewWidget::setModel(IMesh* mesh)
|
||||
void ModelViewWidget::addModel(irr::scene::IMesh* mesh, const Vec3& location)
|
||||
{
|
||||
m_model = mesh;
|
||||
m_models.push_back(mesh);
|
||||
m_model_location.push_back(location);
|
||||
|
||||
/*
|
||||
((IGUIMeshViewer*)m_element)->setMesh( mesh );
|
||||
@ -1292,7 +1293,7 @@ void ModelViewWidget::update(float delta)
|
||||
angle += delta*10;
|
||||
if(angle > 360) angle -= 360;
|
||||
|
||||
irr_driver->renderToTexture(m_model, m_texture, angle);
|
||||
irr_driver->renderToTexture(m_models, m_model_location, m_texture, angle);
|
||||
((IGUIImage*)m_element)->setImage(m_texture);
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <map>
|
||||
|
||||
#include "utils/ptr_vector.hpp"
|
||||
#include "utils/vec3.hpp"
|
||||
|
||||
using namespace irr;
|
||||
using namespace gui;
|
||||
@ -344,14 +345,17 @@ namespace GUIEngine
|
||||
|
||||
class ModelViewWidget : public Widget
|
||||
{
|
||||
scene::IMesh* m_model;
|
||||
|
||||
ptr_vector<scene::IMesh, REF> m_models;
|
||||
std::vector<Vec3> m_model_location;
|
||||
|
||||
video::ITexture* m_texture;
|
||||
float angle;
|
||||
public:
|
||||
~ModelViewWidget();
|
||||
|
||||
void add();
|
||||
void setModel(irr::scene::IMesh* mesh);
|
||||
void addModel(irr::scene::IMesh* mesh, const Vec3& location = Vec3(0,0,0));
|
||||
void update(float delta);
|
||||
};
|
||||
|
||||
|
@ -105,6 +105,8 @@ public:
|
||||
void attachModel(scene::IAnimatedMeshSceneNode **node);
|
||||
scene::IAnimatedMesh* getModel() const { return m_mesh; }
|
||||
|
||||
scene::IMesh* getWheelModel(const int wheelID) const { return m_wheel_model[wheelID]; }
|
||||
|
||||
/** Returns the position of a wheel relative to the kart.
|
||||
* \param i Index of the wheel: 0=front right, 1 = front left, 2 = rear
|
||||
* right, 3 = rear left. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user