Add first version on intro cutscene. Still incomplete but goes somewhere :) Ask me for the menu patch if you want to look at it

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@11276 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria
2012-06-05 00:27:34 +00:00
parent b1a24a78a9
commit dae00f0828
8 changed files with 40 additions and 27 deletions

View File

@@ -31,7 +31,7 @@
#include "physics/triangle_mesh.hpp"
#include "tracks/bezier_curve.hpp"
#include "utils/constants.hpp"
#include <ISceneManager.h>
#include <IMeshSceneNode.h>
ThreeDAnimation::ThreeDAnimation(const XMLNode &node)
@@ -58,6 +58,10 @@ ThreeDAnimation::ThreeDAnimation(const XMLNode &node)
{
createPhysicsBody(shape);
}
if (m_node == NULL)
{
m_node = irr_driver->getSceneManager()->addEmptySceneNode();
}
} // ThreeDAnimation
// ----------------------------------------------------------------------------

View File

@@ -30,8 +30,10 @@
#include "physics/physics.hpp"
#include "states_screens/race_gui_base.hpp"
#include "tracks/track.hpp"
#include "tracks/track_object.hpp"
#include "tracks/track_object_manager.hpp"
#include "utils/constants.hpp"
#include "utils/ptr_vector.hpp"
//-----------------------------------------------------------------------------
/** Constructor. Sets up the clock mode etc.
@@ -49,9 +51,11 @@ CutsceneWorld::CutsceneWorld() : World()
void CutsceneWorld::init()
{
World::init();
m_camera = irr_driver->getSceneManager()->addCameraSceneNode(NULL, core::vector3df(-80.0f, 2.0f, 75.0f),
core::vector3df(-97.230003, -0.010000, 50.610001));
const btTransform &s = getTrack()->getStartTransform(0);
const Vec3 &v = s.getOrigin();
m_camera = irr_driver->getSceneManager()->addCameraSceneNode(NULL, v.toIrrVector(),
core::vector3df(-97.230003, 3.0f, 50.610001));
m_camera->setFOV(0.61f);
} // CutsceneWorld
//-----------------------------------------------------------------------------
@@ -86,6 +90,19 @@ void CutsceneWorld::update(float dt)
{
World::update(dt);
World::updateTrack(dt);
const PtrVector<TrackObject>& objects = m_track->getTrackObjectManager()->getObjects();
const TrackObject* curr;
for_in(curr, objects)
{
if (curr->getType() == "cutscene_camera")
{
m_camera->setPosition(curr->getNode()->getPosition());
m_camera->setRotation(curr->getNode()->getRotation());
break;
//printf("Camera %f %f %f\n", curr->getNode()->getPosition().X, curr->getNode()->getPosition().Y, curr->getNode()->getPosition().Z);
}
}
} // update
//-----------------------------------------------------------------------------

View File

@@ -543,15 +543,11 @@ void NetworkManager::setupPlayerKartInfo()
for(unsigned int i=0; i<race_manager->getNumLocalPlayers(); i++)
m_kart_info.push_back(race_manager->getLocalKartInfo(i));
printf("[setupPlayerKartInfo] m_num_karts = %i\n", race_manager->getNumberOfKarts());
// Now sort by (hostid, playerid)
std::sort(m_kart_info.begin(), m_kart_info.end());
// Set the player kart information
race_manager->setNumPlayers(m_kart_info.size());
printf("[setupPlayerKartInfo2] m_num_karts = %i\n", race_manager->getNumberOfKarts());
// Set the global player ID for each player
for(unsigned int i=0; i<m_kart_info.size(); i++)
@@ -560,8 +556,6 @@ void NetworkManager::setupPlayerKartInfo()
race_manager->setPlayerKart(i, m_kart_info[i]);
}
printf("[setupPlayerKartInfo3] m_num_karts = %i\n", race_manager->getNumberOfKarts());
// Compute the id of the first kart from each host
m_kart_id_offset.resize(m_num_clients+1);
m_kart_id_offset[0]=0;
@@ -569,8 +563,6 @@ void NetworkManager::setupPlayerKartInfo()
m_kart_id_offset[i]=m_kart_id_offset[i-1]+m_num_local_players[i-1];
race_manager->computeRandomKartList();
printf("[setupPlayerKartInfo4] m_num_karts = %i\n", race_manager->getNumberOfKarts());
} // setupPlayerKartInfo
// ----------------------------------------------------------------------------

View File

@@ -251,7 +251,6 @@ void RaceManager::computeRandomKartList()
void RaceManager::startNew(bool from_overworld)
{
printf("Start New, m_num_karts = %i\n", m_num_karts);
m_started_from_overworld = from_overworld;
if(m_major_mode==MAJOR_MODE_GRAND_PRIX)
@@ -268,8 +267,6 @@ void RaceManager::startNew(bool from_overworld)
if((size_t)m_num_karts < m_player_karts.size())
m_num_karts = (int)m_player_karts.size();
printf("Start New 2, m_num_karts = %i\n", m_num_karts);
// Create the kart status data structure to keep track of scores, times, ...
// ==========================================================================
m_kart_status.clear();
@@ -296,9 +293,7 @@ void RaceManager::startNew(bool from_overworld)
m_ai_kart_list[i].c_str());
}
}
printf("Start New 3, m_num_karts = %i\n", m_num_karts);
// Then the players, which start behind the AI karts
// -------------------------------------------------
for(int i=m_player_karts.size()-1; i>=0; i--)
@@ -334,8 +329,6 @@ void RaceManager::startNextRace()
// Uncomment to debug audio leaks
// sfx_manager->dump();
printf("startNextRace, m_num_karts = %i\n", m_num_karts);
stk_config->getAllScores(&m_score_for_position, m_num_karts);
IrrlichtDevice* device = irr_driver->getDevice();
GUIEngine::renderLoading();
@@ -374,8 +367,6 @@ void RaceManager::startNextRace()
m_kart_status.end() - player_last_offset);
}
} // not first race
printf("startNextRace 2, m_num_karts = %i\n", m_num_karts);
// the constructor assigns this object to the global
// variable world. Admittedly a bit ugly, but simplifies
@@ -402,8 +393,6 @@ void RaceManager::startNextRace()
assert(0);
}
printf("startNextRace 3, m_num_karts = %i\n", m_num_karts);
World::getWorld()->init();
// Save the current score and set last time to zero. This is necessary
// if someone presses esc after finishing a gp, and selects restart:
@@ -670,12 +659,9 @@ void RaceManager::startSingleRace(const std::string trackIdent,
setMajorMode(RaceManager::MAJOR_MODE_SINGLE);
printf("[startSingleRace3] m_num_karts = %i\n", m_num_karts);
setCoinTarget( 0 ); // Might still be set from a previous challenge
network_manager->setupPlayerKartInfo();
printf("[startSingleRace4] m_num_karts = %i\n", m_num_karts);
startNew(from_overworld);
}

View File

@@ -65,6 +65,8 @@ TrackObject::TrackObject(const XMLNode &xml_node)
std::string type;
xml_node.get("type", &type );
m_type = type;
bool trigger_when_near = false;
float trigger_distance = 1.0f;

View File

@@ -93,6 +93,8 @@ protected:
std::string m_interaction;
std::string m_type;
public:
TrackObject(const XMLNode &xml_node);
TrackObject();
@@ -110,6 +112,7 @@ public:
void setEnable(bool mode);
scene::ISceneNode* getNode() { return m_node; }
const scene::ISceneNode* getNode() const { return m_node; }
/** 2-step construction */
void setNode(scene::ISceneNode* node)
@@ -123,6 +126,8 @@ public:
const std::string& getLodGroup() const { return m_lod_group; }
const std::string& getType() const { return m_type; }
virtual void onTriggerItemApproached(Item* who);
}; // TrackObject

View File

@@ -86,6 +86,10 @@ void TrackObjectManager::add(const XMLNode &xml_node)
{
m_all_objects.push_back(new TrackObject(xml_node));
}
else if(type=="cutscene_camera")
{
m_all_objects.push_back(new ThreeDAnimation(xml_node));
}
else if(type=="action-trigger")
{
m_all_objects.push_back(new TrackObject(xml_node));

View File

@@ -78,6 +78,9 @@ public:
}
void assingLodNodes(const std::vector<LODNode*>& lod);
const PtrVector<TrackObject>& getObjects() const { return m_all_objects; }
}; // class TrackObjectManager
#endif