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:
@@ -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
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -78,6 +78,9 @@ public:
|
||||
}
|
||||
|
||||
void assingLodNodes(const std::vector<LODNode*>& lod);
|
||||
|
||||
const PtrVector<TrackObject>& getObjects() const { return m_all_objects; }
|
||||
|
||||
}; // class TrackObjectManager
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user