Team indicators added.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/soccer@13167 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
c22941d354
commit
d16a5a0552
BIN
data/gui/soccer_player_blue.png
Normal file
BIN
data/gui/soccer_player_blue.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
BIN
data/gui/soccer_player_red.png
Normal file
BIN
data/gui/soccer_player_red.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
@ -283,39 +283,7 @@ scene::ISceneNode* KartModel::attachModel(bool animated_models)
|
|||||||
lod_node->add(500, static_model, true);
|
lod_node->add(500, static_model, true);
|
||||||
m_animated_node = static_cast<scene::IAnimatedMeshSceneNode*>(node);
|
m_animated_node = static_cast<scene::IAnimatedMeshSceneNode*>(node);
|
||||||
|
|
||||||
m_hat_node = NULL;
|
attachHat();
|
||||||
if(m_hat_name.size()>0)
|
|
||||||
{
|
|
||||||
scene::IBoneSceneNode *bone = m_animated_node->getJointNode("Head");
|
|
||||||
if(!bone)
|
|
||||||
bone = m_animated_node->getJointNode("head");
|
|
||||||
if(bone)
|
|
||||||
{
|
|
||||||
|
|
||||||
// Till we have all models fixed, accept Head and head as bone naartme
|
|
||||||
scene::IMesh *hat_mesh =
|
|
||||||
irr_driver->getAnimatedMesh(
|
|
||||||
file_manager->getModelFile(m_hat_name));
|
|
||||||
m_hat_node = irr_driver->addMesh(hat_mesh);
|
|
||||||
bone->addChild(m_hat_node);
|
|
||||||
m_animated_node->setCurrentFrame((float)m_animation_frame[AF_STRAIGHT]);
|
|
||||||
m_animated_node->OnAnimate(0);
|
|
||||||
bone->updateAbsolutePosition();
|
|
||||||
|
|
||||||
// With the hat node attached to the head bone, we have to
|
|
||||||
// reverse the transformation of the bone, so that the hat
|
|
||||||
// is still properly placed. Esp. the hat offset needs
|
|
||||||
// to be rotated.
|
|
||||||
const core::matrix4 mat = bone->getAbsoluteTransformation();
|
|
||||||
core::matrix4 inv;
|
|
||||||
mat.getInverse(inv);
|
|
||||||
core::vector3df rotated_offset;
|
|
||||||
inv.rotateVect(rotated_offset, m_hat_offset);
|
|
||||||
m_hat_node->setPosition(rotated_offset);
|
|
||||||
m_hat_node->setScale(inv.getScale());
|
|
||||||
m_hat_node->setRotation(inv.getRotationDegrees());
|
|
||||||
} // if bone
|
|
||||||
} // if(m_hat_name)
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
std::string debug_name = m_model_filename+" (animated-kart-model)";
|
std::string debug_name = m_model_filename+" (animated-kart-model)";
|
||||||
@ -701,4 +669,40 @@ void KartModel::update(float rotation_dt, float steer, const float suspension[4]
|
|||||||
|
|
||||||
m_animated_node->setCurrentFrame(frame);
|
m_animated_node->setCurrentFrame(frame);
|
||||||
} // update
|
} // update
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void KartModel::attachHat(){
|
||||||
|
m_hat_node = NULL;
|
||||||
|
if(m_hat_name.size()>0)
|
||||||
|
{
|
||||||
|
scene::IBoneSceneNode *bone = m_animated_node->getJointNode("Head");
|
||||||
|
if(!bone)
|
||||||
|
bone = m_animated_node->getJointNode("head");
|
||||||
|
if(bone)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Till we have all models fixed, accept Head and head as bone naartme
|
||||||
|
scene::IMesh *hat_mesh =
|
||||||
|
irr_driver->getAnimatedMesh(
|
||||||
|
file_manager->getModelFile(m_hat_name));
|
||||||
|
m_hat_node = irr_driver->addMesh(hat_mesh);
|
||||||
|
bone->addChild(m_hat_node);
|
||||||
|
m_animated_node->setCurrentFrame((float)m_animation_frame[AF_STRAIGHT]);
|
||||||
|
m_animated_node->OnAnimate(0);
|
||||||
|
bone->updateAbsolutePosition();
|
||||||
|
|
||||||
|
// With the hat node attached to the head bone, we have to
|
||||||
|
// reverse the transformation of the bone, so that the hat
|
||||||
|
// is still properly placed. Esp. the hat offset needs
|
||||||
|
// to be rotated.
|
||||||
|
const core::matrix4 mat = bone->getAbsoluteTransformation();
|
||||||
|
core::matrix4 inv;
|
||||||
|
mat.getInverse(inv);
|
||||||
|
core::vector3df rotated_offset;
|
||||||
|
inv.rotateVect(rotated_offset, m_hat_offset);
|
||||||
|
m_hat_node->setPosition(rotated_offset);
|
||||||
|
m_hat_node->setScale(inv.getScale());
|
||||||
|
m_hat_node->setRotation(inv.getRotationDegrees());
|
||||||
|
} // if bone
|
||||||
|
} // if(m_hat_name)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -229,8 +229,14 @@ public:
|
|||||||
/** Name of the hat mesh to use. */
|
/** Name of the hat mesh to use. */
|
||||||
void setHatMeshName(const std::string &name) {m_hat_name = name; }
|
void setHatMeshName(const std::string &name) {m_hat_name = name; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
void attachHat();
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
/** Returns the array of wheel nodes. */
|
/** Returns the array of wheel nodes. */
|
||||||
scene::ISceneNode** getWheelNodes() { return m_wheel_node; }
|
scene::ISceneNode** getWheelNodes() { return m_wheel_node; }
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
scene::IAnimatedMeshSceneNode* getAnimatedNode(){ return m_animated_node; }
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
core::vector3df getHatOffset() { return m_hat_offset; }
|
||||||
|
|
||||||
}; // KartModel
|
}; // KartModel
|
||||||
#endif
|
#endif
|
||||||
|
@ -313,6 +313,23 @@ void SoccerWorld::initKartList()
|
|||||||
}// next kart
|
}// next kart
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Loading the indicator textures
|
||||||
|
irr::video::ITexture *redTeamTexture = irr_driver->getTexture(
|
||||||
|
file_manager->getTextureFile("soccer_player_red.png"));
|
||||||
|
irr::video::ITexture *blueTeamTexture = irr_driver->getTexture(
|
||||||
|
file_manager->getTextureFile("soccer_player_blue.png"));
|
||||||
|
//Assigning indicators
|
||||||
|
for(int i=0; i<kart_amount; i++){
|
||||||
|
scene::ISceneNode *hatNode;
|
||||||
|
if(race_manager->getLocalKartInfo(i).getSoccerTeam() == SOCCER_TEAM_RED)
|
||||||
|
hatNode = irr_driver->addBillboard(core::dimension2d<irr::f32>(0.3,0.3)
|
||||||
|
,redTeamTexture,m_karts[i]->getKartModel()->getAnimatedNode()->getJointNode("Head"));
|
||||||
|
else
|
||||||
|
hatNode = irr_driver->addBillboard(core::dimension2d<irr::f32>(0.3,0.3)
|
||||||
|
,blueTeamTexture,m_karts[i]->getKartModel()->getAnimatedNode()->getJointNode("Head"));
|
||||||
|
hatNode->setPosition(m_karts[i]->getKartModel()->getHatOffset());
|
||||||
|
}
|
||||||
|
|
||||||
// Compute start positions for each team
|
// Compute start positions for each team
|
||||||
int team_cur_position[NB_SOCCER_TEAMS];
|
int team_cur_position[NB_SOCCER_TEAMS];
|
||||||
team_cur_position[0] = 1;
|
team_cur_position[0] = 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user