Added more textures (by putting them for now in the same directory as the

model), fixed detection of terrain (e.g. triggering rescue when trying to
drive on water).


git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3245 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hikerstk 2009-03-12 23:35:15 +00:00
parent ef3f73ad0b
commit 921d9a34d5
32 changed files with 50 additions and 457 deletions

BIN
data/items/banana.b3d Executable file

Binary file not shown.

BIN
data/items/banana.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -9,7 +9,7 @@ OBJECT poly
name "GiftBox_0" name "GiftBox_0"
data 7 data 7
GiftBox GiftBox
texture "gift-loop.rgb" texture "gift-loop.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 158 numvert 158
@ -1188,7 +1188,7 @@ OBJECT poly
name "GiftBox_1" name "GiftBox_1"
data 7 data 7
GiftBox GiftBox
texture "gift-box.rgb" texture "gift-box.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 28 numvert 28

BIN
data/items/gift-box.b3d Executable file

Binary file not shown.

BIN
data/items/gift-box.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
data/items/gift-loop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
data/items/nitro-tank.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -9,7 +9,7 @@ OBJECT poly
name "BigTank_0" name "BigTank_0"
data 7 data 7
BigTank BigTank
texture "tank-blue.rgb" texture "tank-blue.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 37 numvert 37
@ -434,7 +434,7 @@ OBJECT poly
name "BigTank_1" name "BigTank_1"
data 7 data 7
BigTank BigTank
texture "nitro-tank.rgb" texture "nitro-tank.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 67 numvert 67
@ -999,7 +999,7 @@ OBJECT poly
name "BigTank_2" name "BigTank_2"
data 7 data 7
BigTank BigTank
texture "tank-green.rgb" texture "tank-green.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 46 numvert 46

BIN
data/items/nitrotank-big.b3d Executable file

Binary file not shown.

View File

@ -9,7 +9,7 @@ OBJECT poly
name "SmallTank_0" name "SmallTank_0"
data 9 data 9
SmallTank SmallTank
texture "nitro-tank.rgb" texture "nitro-tank.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 59 numvert 59
@ -558,7 +558,7 @@ OBJECT poly
name "SmallTank_1" name "SmallTank_1"
data 9 data 9
SmallTank SmallTank
texture "tank-cyan.rgb" texture "tank-cyan.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 46 numvert 46
@ -1100,7 +1100,7 @@ OBJECT poly
name "SmallTank_2" name "SmallTank_2"
data 9 data 9
SmallTank SmallTank
texture "tank-blue.rgb" texture "tank-blue.png"
texrep 1 1 texrep 1 1
crease 70.000000 crease 70.000000
numvert 37 numvert 37

BIN
data/items/nitrotank-small.b3d Executable file

Binary file not shown.

BIN
data/items/tank-blue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
data/items/tank-cyan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
data/items/tank-green.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
data/models/bowling.b3d Executable file

Binary file not shown.

BIN
data/models/bowling.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -17,21 +17,17 @@
// along with this program; if not, write to the Free Software // along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <plib/ssg.h>
#include "explosion.hpp" #include "explosion.hpp"
#include "items/projectile_manager.hpp" #include "items/projectile_manager.hpp"
#include "audio/sfx_base.hpp" #include "audio/sfx_base.hpp"
#include "audio/sfx_manager.hpp" #include "audio/sfx_manager.hpp"
#include "graphics/scene.hpp" #include "graphics/scene.hpp"
#include "utils/vec3.hpp" #include "utils/vec3.hpp"
Explosion::Explosion(const Vec3& coord, const int explosion_sound) : ssgTransform() Explosion::Explosion(const Vec3& coord, const int explosion_sound)
{ {
this->ref(); m_mesh = projectile_manager->getExplosionModel();
ssgCutout *cut = new ssgCutout();
addKid(cut); // derefing the explosion will free the cutout
m_seq = projectile_manager->getExplosionModel();
cut->addKid(m_seq);
m_explode_sound = sfx_manager->newSFX( (SFXManager::SFXType)explosion_sound ); m_explode_sound = sfx_manager->newSFX( (SFXManager::SFXType)explosion_sound );
init(coord); init(coord);
} // Explosion } // Explosion
@ -54,15 +50,16 @@ void Explosion::init(const Vec3& coord)
sgCoord c; sgCoord c;
c.xyz[0]=coord[0];c.xyz[1]=coord[1];c.xyz[2]=coord[2]; c.xyz[0]=coord[0];c.xyz[1]=coord[1];c.xyz[2]=coord[2];
c.hpr[0]=0; c.hpr[1]=0; c.hpr[2]=0; c.hpr[0]=0; c.hpr[1]=0; c.hpr[2]=0;
setTransform(&c); //setTransform(&c);
m_step = -1; m_step = -1;
stk_scene->add(this); //stk_scene->add(this);
m_has_ended = false; m_has_ended = false;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void Explosion::update(float dt) void Explosion::update(float dt)
{ {
#ifndef HAVE_IRRLICHT
//fprintf(stderr, "Explosion: update: "); //fprintf(stderr, "Explosion: update: ");
if(++m_step >= m_seq->getNumKids()) if(++m_step >= m_seq->getNumKids())
{ {
@ -85,4 +82,5 @@ void Explosion::update(float dt)
//fprintf(stderr, "Step.\n"); //fprintf(stderr, "Step.\n");
m_seq->selectStep(m_step); m_seq->selectStep(m_step);
} }
#endif
} }

View File

@ -17,23 +17,30 @@
// along with this program; if not, write to the Free Software // along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef HEADER_EXPLOSION_H #ifndef HEADER_EXPLOSION_HPP
#define HEADER_EXPLOSION_H #define HEADER_EXPLOSION_HPP
#include <plib/sg.h>
class Vec3; class Vec3;
class SFXBase; class SFXBase;
namespace irr
{
namespace scene
{
class IMesh;
class ISceneNode;
}
}
class Explosion : public ssgTransform class Explosion
{ {
private: private:
SFXBase* m_explode_sound; SFXBase* m_explode_sound;
bool m_has_ended; bool m_has_ended;
irr::scene::IMesh *m_mesh;
irr::scene::ISceneNode *m_node;
public: public:
int m_step ; int m_step ;
ssgSelector *m_seq ;
Explosion(const Vec3& coord, const int explosion_sound); Explosion(const Vec3& coord, const int explosion_sound);
~Explosion(); ~Explosion();

View File

@ -196,6 +196,7 @@ FileManager::~FileManager()
XMLReader *FileManager::getXMLReader(const std::string &f) XMLReader *FileManager::getXMLReader(const std::string &f)
{ {
io::IXMLReader *r = m_file_system->createXMLReader(f.c_str()); io::IXMLReader *r = m_file_system->createXMLReader(f.c_str());
if(!r) return NULL;
return new XMLReader(r); return new XMLReader(r);
} // getXMLReader } // getXMLReader

View File

@ -113,7 +113,7 @@ int XMLNode::get(const std::string &attribute, bool *value) const
{ {
std::string s; std::string s;
if(!get(attribute, &s)) return 0; if(!get(attribute, &s)) return 0;
*value = s=="" || s[0]=='T' || s[0]=='t' || *value = s=="" || s[0]=='T' || s[0]=='t' || s[0]=='Y' || s[0]=='y' ||
s=="true" || s=="TRUE" || s=="#t" || s=="#T"; s=="true" || s=="TRUE" || s=="#t" || s=="#T";
return 1; return 1;
} // get(bool) } // get(bool)

View File

@ -73,26 +73,21 @@ Shadow::Shadow ( float x1, float x2, float y1, float y2 )
ssgVtxTable *gs = new ssgVtxTable ( GL_TRIANGLE_STRIP, va, na, ta, ca ) ; ssgVtxTable *gs = new ssgVtxTable ( GL_TRIANGLE_STRIP, va, na, ta, ca ) ;
gs -> clrTraversalMaskBits ( SSGTRAV_ISECT|SSGTRAV_HOT ) ; gs -> clrTraversalMaskBits ( SSGTRAV_ISECT|SSGTRAV_HOT ) ;
#ifndef HAVE_IRRLICHT
gs -> setState ( fuzzy_gst ) ; gs -> setState ( fuzzy_gst ) ;
#endif
sh -> addKid ( gs ) ; sh -> addKid ( gs ) ;
sh -> ref () ; /* Make sure it doesn't get deleted by mistake */ sh -> ref () ; /* Make sure it doesn't get deleted by mistake */
} // Shadow } // Shadow
//============================================================================= //=============================================================================
ItemManager* item_manager; ItemManager* item_manager;
#ifdef HAVE_IRRLICHT
typedef std::map<std::string,scene::IMesh*>::const_iterator CI_type; typedef std::map<std::string,scene::IMesh*>::const_iterator CI_type;
#else
typedef std::map<std::string,ssgEntity*>::const_iterator CI_type;
#endif
ItemManager::ItemManager() ItemManager::ItemManager()
{ {
#ifdef HAVE_IRRLICHT
m_all_meshes.clear(); m_all_meshes.clear();
#else
m_all_models.clear();
#endif
// The actual loading is done in loadDefaultItems // The actual loading is done in loadDefaultItems
} // ItemManager } // ItemManager
@ -106,26 +101,17 @@ void ItemManager::removeTextures()
} }
m_all_items.clear(); m_all_items.clear();
#ifdef HAVE_IRRLICHT
for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i) for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i)
{ {
i->second->drop(); i->second->drop();
} }
m_all_meshes.clear(); m_all_meshes.clear();
#else
for(CI_type i=m_all_models.begin(); i!=m_all_models.end(); ++i)
{
i->second->deRef();
}
m_all_models.clear();
#endif
callback_manager->clear(CB_ITEM); callback_manager->clear(CB_ITEM);
} // removeTextures } // removeTextures
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ItemManager::~ItemManager() ItemManager::~ItemManager()
{ {
#ifdef HAVE_IRRLICHT
for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i) for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i)
{ {
// FIXME: What about this plib comment: // FIXME: What about this plib comment:
@ -135,16 +121,6 @@ ItemManager::~ItemManager()
i->second->drop(); i->second->drop();
} }
m_all_meshes.clear(); m_all_meshes.clear();
#else
for(CI_type i=m_all_models.begin(); i!=m_all_models.end(); ++i)
{
// We can't use ssgDeRefDelete here, since then the object would be
// freed, and when m_all_models is deleted, we have invalid memory
// accesses.
i->second->deRef();
}
m_all_models.clear();
#endif
} // ~ItemManager } // ~ItemManager
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -160,7 +136,6 @@ void ItemManager::loadDefaultItems()
for(std::set<std::string>::iterator i = files.begin(); for(std::set<std::string>::iterator i = files.begin();
i != files.end(); ++i) i != files.end(); ++i)
{ {
#ifdef HAVE_IRRLICHT
// FIXME: We should try to check the extension, // FIXME: We should try to check the extension,
// i.e. load only .3ds files // i.e. load only .3ds files
scene::IMesh *mesh = irr_driver->getAnimatedMesh(*i); scene::IMesh *mesh = irr_driver->getAnimatedMesh(*i);
@ -168,16 +143,6 @@ void ItemManager::loadDefaultItems()
std::string shortName = StringUtils::basename(StringUtils::without_extension(*i)); std::string shortName = StringUtils::basename(StringUtils::without_extension(*i));
m_all_meshes[shortName] = mesh; m_all_meshes[shortName] = mesh;
mesh->grab(); mesh->grab();
#else
if(!StringUtils::has_suffix(*i, ".ac")) continue;
ssgEntity* h = loader->load(*i, CB_ITEM,
/*optimise*/true,
/*full_path*/true);
std::string shortName = StringUtils::basename(StringUtils::without_extension(*i));
h->ref();
h->setName(shortName.c_str());
m_all_models[shortName] = h;
#endif
} // for i } // for i
setDefaultItemStyle(); setDefaultItemStyle();
@ -198,13 +163,8 @@ void ItemManager::setDefaultItemStyle()
std::ostringstream msg; std::ostringstream msg;
for(int i=Item::ITEM_FIRST; i<=Item::ITEM_LAST; i++) for(int i=Item::ITEM_FIRST; i<=Item::ITEM_LAST; i++)
{ {
#ifdef HAVE_IRRLICHT
m_item_mesh[i] = m_all_meshes[DEFAULT_NAMES[i]]; m_item_mesh[i] = m_all_meshes[DEFAULT_NAMES[i]];
if(!m_item_mesh[i]) if(!m_item_mesh[i])
#else
m_item_model[i] = m_all_models[DEFAULT_NAMES[i]];
if(!m_item_model[i])
#endif
{ {
msg << "Item model '" << DEFAULT_NAMES[i] msg << "Item model '" << DEFAULT_NAMES[i]
<< "' is missing (see item_manager)!\n"; << "' is missing (see item_manager)!\n";
@ -215,11 +175,7 @@ void ItemManager::setDefaultItemStyle()
if(bError) if(bError)
{ {
fprintf(stderr, "The following models are available:\n"); fprintf(stderr, "The following models are available:\n");
#ifdef HAVE_IRRLICHT
for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i) for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i)
#else
for(CI_type i=m_all_models.begin(); i!=m_all_models.end(); ++i)
#endif
{ {
if(i->second) if(i->second)
{ {
@ -242,21 +198,12 @@ Item* ItemManager::newItem(Item::ItemType type, const Vec3& xyz,
const Vec3 &normal, Kart *parent) const Vec3 &normal, Kart *parent)
{ {
Item* h; Item* h;
#ifdef HAVE_IRRLICHT
if(type == Item::ITEM_BUBBLEGUM) if(type == Item::ITEM_BUBBLEGUM)
h = new BubbleGumItem(type, xyz, normal, m_item_mesh[type], h = new BubbleGumItem(type, xyz, normal, m_item_mesh[type],
m_all_items.size()); m_all_items.size());
else else
h = new Item(type, xyz, normal, m_item_mesh[type], h = new Item(type, xyz, normal, m_item_mesh[type],
m_all_items.size()); m_all_items.size());
#else
if(type == Item::ITEM_BUBBLEGUM)
h = new BubbleGumItem(type, xyz, normal, m_item_model[type],
m_all_items.size());
else
h = new Item(type, xyz, normal, m_item_model[type],
m_all_items.size());
#endif
if(parent != NULL) h->setParent(parent); if(parent != NULL) h->setParent(parent);
m_all_items.push_back(h); m_all_items.push_back(h);
@ -409,10 +356,6 @@ void ItemManager::setItem(const lisp::Lisp *item_node,
item_node->get(colour, name); item_node->get(colour, name);
if(name.size()>0) if(name.size()>0)
{ {
#ifdef HAVE_IRRLICHT
m_item_mesh[type]=m_all_meshes[name]; m_item_mesh[type]=m_all_meshes[name];
#else
m_item_model[type]=m_all_models[name];
#endif
} }
} // setItem } // setItem

View File

@ -42,7 +42,6 @@ initPowerupType;
initPowerupType ict[]= initPowerupType ict[]=
{ {
#ifdef HAVE_IRRLICHT
{POWERUP_ZIPPER, "zipper.collectable" }, {POWERUP_ZIPPER, "zipper.collectable" },
{POWERUP_BOWLING, "bowling.projectile" }, {POWERUP_BOWLING, "bowling.projectile" },
{POWERUP_BUBBLEGUM, "bubblegum.xml" }, {POWERUP_BUBBLEGUM, "bubblegum.xml" },
@ -51,16 +50,6 @@ initPowerupType ict[]=
{POWERUP_PARACHUTE, "parachute.collectable" }, {POWERUP_PARACHUTE, "parachute.collectable" },
{POWERUP_PLUNGER, "plunger.projectile" }, {POWERUP_PLUNGER, "plunger.projectile" },
{POWERUP_MAX, "" }, {POWERUP_MAX, "" },
#else
{POWERUP_ZIPPER, "zipper.collectable" },
{POWERUP_BOWLING, "bowling.projectile" },
{POWERUP_BUBBLEGUM, "bubblegum.projectile" },
{POWERUP_CAKE, "cake.projectile" },
{POWERUP_ANVIL, "anvil.collectable" },
{POWERUP_PARACHUTE, "parachute.collectable" },
{POWERUP_PLUNGER, "plunger.projectile" },
{POWERUP_MAX, "" },
#endif
}; };
PowerupManager* powerup_manager=0; PowerupManager* powerup_manager=0;
@ -70,11 +59,7 @@ PowerupManager::PowerupManager()
{ {
for(int i=0; i<POWERUP_MAX; i++) for(int i=0; i<POWERUP_MAX; i++)
{ {
#ifdef HAVE_IRRLICHT
m_all_meshes[i] = NULL; m_all_meshes[i] = NULL;
#else
m_all_models[i] = (ssgEntity*)NULL;
#endif
m_all_icons[i] = (Material*)NULL; m_all_icons[i] = (Material*)NULL;
} }
} // PowerupManager } // PowerupManager
@ -130,17 +115,12 @@ void PowerupManager::LoadNode(const lisp::Lisp* lisp, int collectType )
{ {
std::string sName, sModel, sIconFile; std::string sName, sModel, sIconFile;
lisp->get("name", sName ); lisp->get("name", sName );
#ifdef HAVE_IRRLICHT
lisp->get("mesh", sModel ); lisp->get("mesh", sModel );
#else
lisp->get("model", sModel );
#endif
lisp->get("icon", sIconFile ); lisp->get("icon", sIconFile );
// load material // load material
m_all_icons[collectType] = material_manager->getMaterial(sIconFile, m_all_icons[collectType] = material_manager->getMaterial(sIconFile,
/* full_path */ false, /* full_path */ false,
/*make_permanent */ true); /*make_permanent */ true);
#ifdef HAVE_IRRLICHT
if(sModel!="") if(sModel!="")
{ {
// FIXME LEAK: not freed (unimportant, since the models have to exist // FIXME LEAK: not freed (unimportant, since the models have to exist
@ -153,27 +133,8 @@ void PowerupManager::LoadNode(const lisp::Lisp* lisp, int collectType )
m_all_meshes[collectType] = 0; m_all_meshes[collectType] = 0;
m_all_extends[collectType] = btVector3(0.0f,0.0f,0.0f); m_all_extends[collectType] = btVector3(0.0f,0.0f,0.0f);
} }
#else
m_all_icons[collectType]->getState()->ref();
if(sModel!="")
{
// FIXME LEAK: not freed (unimportant, since the models have to exist
// for the whole game anyway).
ssgEntity* e = loader->load(sModel, CB_COLLECTABLE);
m_all_models[collectType] = e;
e->ref();
e->clrTraversalMaskBits(SSGTRAV_ISECT|SSGTRAV_HOT);
}
else
{
m_all_models[collectType] = 0;
m_all_extends[collectType] = btVector3(0.0f,0.0f,0.0f);
}
#endif
// Load special attributes for certain powerups // Load special attributes for certain powerups
#ifdef HAVE_IRRLICHT
switch (collectType) { switch (collectType) {
case POWERUP_BOWLING: case POWERUP_BOWLING:
Bowling::init(lisp, m_all_meshes[collectType]); break; Bowling::init(lisp, m_all_meshes[collectType]); break;
@ -183,16 +144,5 @@ void PowerupManager::LoadNode(const lisp::Lisp* lisp, int collectType )
Cake::init(lisp, m_all_meshes[collectType]); break; Cake::init(lisp, m_all_meshes[collectType]); break;
default:; default:;
} // switch } // switch
#else
switch (collectType) {
case POWERUP_BOWLING:
Bowling::init (lisp, m_all_models[collectType]); break;
case POWERUP_PLUNGER:
Plunger::init (lisp, m_all_models[collectType]); break;
case POWERUP_CAKE:
Cake::init (lisp, m_all_models[collectType]); break;
default:;
} // switch
#endif
} // LoadNode } // LoadNode

View File

@ -20,17 +20,13 @@
#ifndef HEADER_POWERUPMANAGER_HPP #ifndef HEADER_POWERUPMANAGER_HPP
#define HEADER_POWERUPMANAGER_HPP #define HEADER_POWERUPMANAGER_HPP
#ifdef HAVE_IRRLICHT
#include "irrlicht.h" #include "irrlicht.h"
#endif
#include "lisp/parser.hpp" #include "lisp/parser.hpp"
#include "lisp/lisp.hpp" #include "lisp/lisp.hpp"
#include "btBulletDynamicsCommon.h" #include "btBulletDynamicsCommon.h"
class Material; class Material;
#ifndef HAVE_IRRLICHT
class ssgEntity;
#endif
// The anvil and parachute must be at the end of the enum, and the // The anvil and parachute must be at the end of the enum, and the
// zipper just before them (see Powerup::hitBonusBox). // zipper just before them (see Powerup::hitBonusBox).
@ -48,11 +44,7 @@ protected:
float m_all_force_to_target[POWERUP_MAX]; // apply this force to move towards float m_all_force_to_target[POWERUP_MAX]; // apply this force to move towards
// the target // the target
float m_all_max_turn_angle[POWERUP_MAX]; // maximum turn angle for homing float m_all_max_turn_angle[POWERUP_MAX]; // maximum turn angle for homing
#ifdef HAVE_IRRLICHT
scene::IMesh *m_all_meshes[POWERUP_MAX]; scene::IMesh *m_all_meshes[POWERUP_MAX];
#else
ssgEntity* m_all_models[POWERUP_MAX];
#endif
btVector3 m_all_extends[POWERUP_MAX]; btVector3 m_all_extends[POWERUP_MAX];
void LoadNode (const lisp::Lisp* lisp, int collectType); void LoadNode (const lisp::Lisp* lisp, int collectType);
public: public:
@ -61,13 +53,9 @@ public:
void removeTextures (); void removeTextures ();
void Load (int collectType, const char* filename); void Load (int collectType, const char* filename);
Material* getIcon (int type) const {return m_all_icons [type]; } Material* getIcon (int type) const {return m_all_icons [type]; }
#ifdef HAVE_IRRLICHT
/** Returns the mesh for a certain powerup. /** Returns the mesh for a certain powerup.
* \param type Mesh type for which the model is returned. */ * \param type Mesh type for which the model is returned. */
scene::IMesh *getMesh (int type) const {return m_all_meshes[type]; } scene::IMesh *getMesh (int type) const {return m_all_meshes[type]; }
#else
ssgEntity* getModel (int type) const {return m_all_models[type]; }
#endif
float getForceToTarget(int type) const {return m_all_force_to_target[type]; } float getForceToTarget(int type) const {return m_all_force_to_target[type]; }
float getMaxDistance (int type) const {return m_all_max_distance[type];} float getMaxDistance (int type) const {return m_all_max_distance[type];}
float getMaxTurnAngle (int type) const {return m_all_max_turn_angle[type];} float getMaxTurnAngle (int type) const {return m_all_max_turn_angle[type];}

View File

@ -54,7 +54,7 @@ void ProjectileManager::loadData()
void ProjectileManager::removeTextures() void ProjectileManager::removeTextures()
{ {
cleanup(); cleanup();
ssgDeRefDelete(m_explosion_model); //ssgDeRefDelete(m_explosion_model);
// Only the explosion is here, all other models are actually managed // Only the explosion is here, all other models are actually managed
// by powerup_manager. // by powerup_manager.
callback_manager->clear(CB_EXPLOSION); callback_manager->clear(CB_EXPLOSION);
@ -78,7 +78,7 @@ void ProjectileManager::cleanup()
i != m_active_explosions.end(); ++i) i != m_active_explosions.end(); ++i)
{ {
stk_scene->remove((ssgTransform*)*i); stk_scene->remove((ssgTransform*)*i);
ssgDeRefDelete(*i); //ssgDeRefDelete(*i);
} }
m_active_explosions.clear(); m_active_explosions.clear();
} // cleanup } // cleanup
@ -129,7 +129,7 @@ void ProjectileManager::update(float dt)
if(!(*e)->hasEnded()) { e++; continue;} if(!(*e)->hasEnded()) { e++; continue;}
Explosion *exp=*e; Explosion *exp=*e;
Explosions::iterator eNext=m_active_explosions.erase(e); Explosions::iterator eNext=m_active_explosions.erase(e);
ssgDeRefDelete(exp); // reduce refcount and free object //ssgDeRefDelete(exp); // reduce refcount and free object
e=eNext; e=eNext;
} // while e!=m_active_explosions.end() } // while e!=m_active_explosions.end()
} // if m_explosion_ended } // if m_explosion_ended

View File

@ -17,13 +17,14 @@
// along with this program; if not, write to the Free Software // along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef HEADER_PROJECTILEMANAGER_H #ifndef HEADER_PROJECTILEMANAGER_HPP
#define HEADER_PROJECTILEMANAGER_H #define HEADER_PROJECTILEMANAGER_HPP
#include <vector> #include <vector>
#include <plib/ssg.h> #include "irrlicht.h"
#include "items/powerup_manager.hpp"
#include "audio/sfx_manager.hpp" #include "audio/sfx_manager.hpp"
#include "items/powerup_manager.hpp"
class Vec3; class Vec3;
class Kart; class Kart;
@ -44,7 +45,7 @@ private:
// being shown // being shown
Explosions m_active_explosions; Explosions m_active_explosions;
ssgSelector* m_explosion_model; scene::IMesh *m_explosion_model;
bool m_something_was_hit; bool m_something_was_hit;
bool m_explosion_ended; bool m_explosion_ended;
void updateClient(float dt); void updateClient(float dt);
@ -55,9 +56,9 @@ public:
/** Notifies the projectile manager that something needs to be removed. */ /** Notifies the projectile manager that something needs to be removed. */
void notifyRemove () {m_something_was_hit=true; } void notifyRemove () {m_something_was_hit=true; }
void FinishedExplosion() {m_explosion_ended =true; } void FinishedExplosion() {m_explosion_ended =true; }
ssgSelector* getExplosionModel() scene::IMesh* getExplosionModel()
{ {
return (ssgSelector*)m_explosion_model->clone(); return m_explosion_model;
} }
unsigned int getNumProjectiles() const {return m_active_explosions.size();} unsigned int getNumProjectiles() const {return m_active_explosions.size();}
int getProjectileId (const std::string ident); int getProjectileId (const std::string ident);

View File

@ -127,7 +127,7 @@ void KartProperties::load(const std::string &filename, const std::string &node,
// Load material // Load material
std::string materials_file = file_manager->getKartFile("materials.dat",getIdent()); std::string materials_file = file_manager->getKartFile("materials.xml",getIdent());
file_manager->pushModelSearchPath(file_manager->getKartFile("", getIdent())); file_manager->pushModelSearchPath(file_manager->getKartFile("", getIdent()));
file_manager->pushTextureSearchPath(file_manager->getKartFile("", getIdent())); file_manager->pushTextureSearchPath(file_manager->getKartFile("", getIdent()));

View File

@ -30,74 +30,15 @@
#define UCLAMP 1 #define UCLAMP 1
#define VCLAMP 2 #define VCLAMP 2
#ifndef HAVE_IRRLICHT
int clearSpheremap ( ssgEntity * )
{
glDisable ( GL_TEXTURE_GEN_S ) ;
glDisable ( GL_TEXTURE_GEN_T ) ;
return true ;
} // clearSpheremap
//=============================================================================
int setSpheremap ( ssgEntity * )
{
glTexGeni ( GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP ) ;
glTexGeni ( GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP ) ;
glEnable ( GL_TEXTURE_GEN_S ) ;
glEnable ( GL_TEXTURE_GEN_T ) ;
return true ;
} // setSpheremap
#endif
//=============================================================================
#ifndef HAVE_IRRLICHT
bool Material::parseBool ( char **p )
{
/* Skip leading spaces */
while ( **p <= ' ' && **p != '\0' ) (*p)++ ;
const bool RES = ( ( **p == 'Y' ) || ( **p == 'y' ) ) ;
while ( **p > ' ' && **p != '\0' ) (*p)++ ;
return RES ;
} // parseBool
//-----------------------------------------------------------------------------
int Material::parseInt ( char **p )
{
/* Skip leading spaces */
while ( **p <= ' ' && **p != '\0' ) (*p)++ ;
return strtol ( *p, p, 0 ) ;
} // parseInt
//-----------------------------------------------------------------------------
float Material::parseFloat ( char **p )
{
/* Skip leading spaces */
while ( **p <= ' ' && **p != '\0' ) (*p)++ ;
return (float)strtod ( *p, p ) ;
} // parseFloat
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Material::Material(unsigned int index) Material::Material(unsigned int index)
{ {
m_texname = ""; m_texname = "";
#ifndef HAVE_IRRLICHT
m_predraw = m_postdraw = NULL ;
#endif
init (index); init (index);
install(); install();
} // Material } // Material
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#ifdef HAVE_IRRLICHT
/** Create a new material using the parameters specified in the xml file. /** Create a new material using the parameters specified in the xml file.
* \param node Node containing the parameters for this material. * \param node Node containing the parameters for this material.
* \param index Index in material_manager. * \param index Index in material_manager.
@ -142,41 +83,6 @@ Material::Material(const std::string& fname, int index, bool is_full_path)
install(is_full_path); install(is_full_path);
} // Material } // Material
#else
Material::Material(const std::string& fname, char *description,
int index, bool is_full_path)
{
m_texname = fname;
m_predraw = m_postdraw = NULL ;
init (index);
if(strlen(description)>0)
{
m_clamp_tex = parseBool (&description) ? UCLAMP : 0 ;
m_clamp_tex += parseBool (&description) ? VCLAMP : 0 ;
m_transparency = parseBool (&description);
m_alpha_ref = parseFloat(&description);
m_lighting = parseBool (&description);
m_sphere_map = parseBool (&description);
m_friction = parseFloat(&description);
m_ignore = parseBool (&description);
m_zipper = parseBool (&description);
m_resetter = parseBool (&description);
m_collideable = parseBool (&description);
m_max_speed_fraction = parseFloat(&description);
m_slowdown = parseFloat(&description);
// Set the optional parameters.
if(m_max_speed_fraction <= 0.0f)
m_max_speed_fraction = 1.0f;
if(m_slowdown <= 0.0f)
m_slowdown = stk_config->m_slowdown_factor;
}
install(is_full_path);
} // Material
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Material::~Material() Material::~Material()
{ {
@ -203,14 +109,6 @@ void Material::init(unsigned int index)
m_slowdown = stk_config->m_slowdown_factor; m_slowdown = stk_config->m_slowdown_factor;
} }
//-----------------------------------------------------------------------------
#ifndef HAVE_IRRLICHT
void Material::applyToLeaf(ssgLeaf *l)
{
if ( m_predraw ) l -> setCallback ( SSG_CALLBACK_PREDRAW , m_predraw ) ;
if ( m_postdraw ) l -> setCallback ( SSG_CALLBACK_POSTDRAW, m_postdraw ) ;
} // applyToLeaf
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void Material::install(bool is_full_path) void Material::install(bool is_full_path)
{ {

View File

@ -22,25 +22,15 @@
#include <string> #include <string>
#define _WINSOCKAPI_ #define _WINSOCKAPI_
#ifdef HAVE_IRRLICHT
#include "irrlicht.h" #include "irrlicht.h"
using namespace irr; using namespace irr;
#else
#include <plib/ssg.h>
#endif
class XMLNode; class XMLNode;
class Material class Material
{ {
private: private:
#ifdef HAVE_IRRLICHT
video::ITexture *m_texture; video::ITexture *m_texture;
#else
ssgSimpleState *m_state;
ssgCallback m_predraw;
ssgCallback m_postdraw;
#endif
unsigned int m_index; unsigned int m_index;
std::string m_texname; std::string m_texname;
bool m_collideable; bool m_collideable;
@ -57,35 +47,20 @@ private:
float m_slowdown; float m_slowdown;
/** Maximum speed at which no more slow down occurs. */ /** Maximum speed at which no more slow down occurs. */
float m_max_speed_fraction; float m_max_speed_fraction;
#ifndef HAVE_IRRLICHT
bool parseBool ( char **p );
int parseInt ( char **p );
float parseFloat ( char **p );
#endif
void init (unsigned int index); void init (unsigned int index);
void install (bool is_full_path=false); void install (bool is_full_path=false);
public: public:
Material(unsigned int index); Material(unsigned int index);
#ifdef HAVE_IRRLICHT
Material(const XMLNode *node, int index); Material(const XMLNode *node, int index);
Material(const std::string& fname, int index, bool is_full_path=false); Material(const std::string& fname, int index, bool is_full_path=false);
#else
Material(const std::string& fname, char *description, int index,
bool is_full_path=false);
#endif
~Material (); ~Material ();
int matches ( char *tx ) ; int matches ( char *tx ) ;
#ifdef HAVE_IRRLICHT
/** Returns the ITexture associated with this material. */ /** Returns the ITexture associated with this material. */
video::ITexture *getTexture() const { return m_texture; } video::ITexture *getTexture() const { return m_texture; }
#else
ssgSimpleState
*getState () const { return m_state ; }
#endif
bool isIgnore () const { return m_ignore; } bool isIgnore () const { return m_ignore; }
bool isZipper () const { return m_zipper; } bool isZipper () const { return m_zipper; }
bool isSphereMap () const { return m_sphere_map; } bool isSphereMap () const { return m_sphere_map; }
@ -100,12 +75,6 @@ public:
/** Returns the slowdown that happens if a kart is /** Returns the slowdown that happens if a kart is
* faster than the maximum speed. */ * faster than the maximum speed. */
float getSlowDown () const { return m_slowdown; } float getSlowDown () const { return m_slowdown; }
#ifndef HAVE_IRRLICHT
void apply () { m_state ->apply(); }
void force () { m_state ->force(); }
void applyToLeaf ( ssgLeaf *l ) ;
#endif
} ; } ;

View File

@ -70,17 +70,9 @@ void MaterialManager::loadMaterial()
// Use temp material for reading, but then set the shared // Use temp material for reading, but then set the shared
// material index later, so that these materials are not popped // material index later, so that these materials are not popped
#ifdef HAVE_IRRLICHT
const std::string fname = "materials.xml"; const std::string fname = "materials.xml";
#else
const std::string fname = "materials.dat";
#endif
std::string full_name = file_manager->getTextureFile(fname); std::string full_name = file_manager->getTextureFile(fname);
addSharedMaterial(full_name); addSharedMaterial(full_name);
#ifndef HAVE_IRRLICHT
ssgSetAppStateCallback(getAppState);
fuzzy_gst = getMaterial("fuzzy.rgb")->getState();
#endif
// Save index of shared textures // Save index of shared textures
m_shared_material_index = (int)m_materials.size(); m_shared_material_index = (int)m_materials.size();
} // MaterialManager } // MaterialManager
@ -108,8 +100,8 @@ void MaterialManager::addSharedMaterial(const std::string& filename)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
bool MaterialManager::pushTempMaterial(const std::string& filename) bool MaterialManager::pushTempMaterial(const std::string& filename)
{ {
#ifdef HAVE_IRRLICHT
XMLReader *xml = file_manager->getXMLReader(filename); XMLReader *xml = file_manager->getXMLReader(filename);
if(!xml) return true;
for(unsigned int i=0; i<xml->getNumNodes(); i++) for(unsigned int i=0; i<xml->getNumNodes(); i++)
{ {
const XMLNode *node = xml->getNode(i); const XMLNode *node = xml->getNode(i);
@ -130,17 +122,6 @@ bool MaterialManager::pushTempMaterial(const std::string& filename)
} }
} // for i<xml->getNumNodes)( } // for i<xml->getNumNodes)(
return true; return true;
#else
FILE *fd = fopen(filename.c_str(), "r" );
if ( fd == NULL ) return false;
while ( parseMaterial ( fd ) )
/* Read file */ ;
fclose ( fd ) ;
return true;
#endif
} // pushTempMaterial } // pushTempMaterial
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -153,71 +134,6 @@ void MaterialManager::popTempMaterial()
} // for i } // for i
} // popTempMaterial } // popTempMaterial
//-----------------------------------------------------------------------------
#ifndef HAVE_IRRLICHT
char* MaterialManager::parseFileName(char **str)
{
char *p = *str ;
/* Skip leading spaces */
while ( *p <= ' ' && *p != '\0' ) p++ ;
/* Skip blank lines and comments */
if ( *p == '#' || *p == '\0' )
return NULL ;
if ( *p != '"' )
{
fprintf(stderr, "ERROR: Material file entries must start with '\"'\n"
"ERROR: Offending line is '%s'\n", *str);
return NULL ;
}
/* Filename? */
char *f = ++p ;
while ( *p != '"' && *p != '\0' ) p++ ;
if ( *p != '"' )
{
fprintf(stderr,
"ERROR: Unterminated string constant '%s' in materials file.\n", *str ) ;
return NULL ;
}
*p = '\0' ;
*str = ++p ;
return f ;
} // parseFilename
#endif
//-----------------------------------------------------------------------------
#ifndef HAVE_IRRLICHT
int MaterialManager::parseMaterial ( FILE *fd )
{
char str [ 1024 ] ;
while ( ! feof ( fd ) )
{
char *s = str ;
if ( fgets ( s, 1024, fd ) == NULL )
return false ;
s [ strlen(s) - 1 ] = '\0' ;
char *f = parseFileName ( & s ) ;
if ( f != NULL )
{
m_materials.push_back(new Material (f, s, m_materials.size() ));
return true ;
}
}
return false ;
} // parseMaterial
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Material *MaterialManager::getMaterial ( ssgLeaf *l ) Material *MaterialManager::getMaterial ( ssgLeaf *l )
{ {
@ -262,22 +178,9 @@ Material *MaterialManager::getMaterial(const std::string& fname,
} }
// Add the new material // Add the new material
#ifdef HAVE_IRRLICHT
Material* m=new Material(fname, m_materials.size(), is_full_path); Material* m=new Material(fname, m_materials.size(), is_full_path);
#else
Material* m=new Material(fname, "", m_materials.size(), is_full_path);
#endif
m_materials.push_back(m); m_materials.push_back(m);
if(make_permanent) m_shared_material_index = (int)m_materials.size(); if(make_permanent) m_shared_material_index = (int)m_materials.size();
return m ; return m ;
} // getMaterial } // getMaterial
//=============================================================================
#ifndef HAVE_IRRLICHT
ssgState *getAppState ( char *fname )
{
Material *m = material_manager->getMaterial ( fname ) ;
return ( m == NULL ) ? NULL : m -> getState () ;
} // getAppState
#endif

View File

@ -32,10 +32,6 @@ class MaterialManager
{ {
private: private:
#ifndef HAVE_IRRLICHT
char *parseFileName(char **str);
int parseMaterial(FILE *fd);
#endif
void parseMaterialFile(const std::string& filename); void parseMaterialFile(const std::string& filename);
int m_shared_material_index; int m_shared_material_index;
@ -53,10 +49,6 @@ public:
void popTempMaterial (); void popTempMaterial ();
}; };
extern ssgState *fuzzy_gst;//, *herringbones_gst;
#ifndef HAVE_IRRLICHT
ssgState *getAppState ( char *fname ) ;
#endif
extern MaterialManager *material_manager; extern MaterialManager *material_manager;
#endif #endif

View File

@ -59,11 +59,7 @@ SDLDriver::SDLDriver()
: m_sensed_input(0), m_action_map(0), m_main_surface(0), m_flags(0), m_stick_infos(0), : m_sensed_input(0), m_action_map(0), m_main_surface(0), m_flags(0), m_stick_infos(0),
m_mode(BOOTSTRAP), m_mouse_val_x(0), m_mouse_val_y(0) m_mode(BOOTSTRAP), m_mouse_val_x(0), m_mouse_val_y(0)
{ {
#ifdef HAVE_IRRLICHT
if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0) if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0)
#else
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0)
#endif
{ {
fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError()); fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
exit(1); exit(1);
@ -109,9 +105,6 @@ SDLDriver::SDLDriver()
SDL_JoystickEventState(SDL_ENABLE); SDL_JoystickEventState(SDL_ENABLE);
initStickInfos(); initStickInfos();
#ifndef HAVE_IRRLICHT
SDL_WM_SetCaption("SuperTuxKart", NULL);
#endif
// Get into menu mode initially. // Get into menu mode initially.
setMode(MENU); setMode(MENU);
@ -260,52 +253,6 @@ void SDLDriver::toggleFullscreen(bool resetTextures)
*/ */
void SDLDriver::setVideoMode(bool resetTextures) void SDLDriver::setVideoMode(bool resetTextures)
{ {
#ifndef HAVE_IRRLICHT
//Is SDL_FreeSurface necessary? SDL wiki says not??
SDL_FreeSurface(m_main_surface);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
m_main_surface = SDL_SetVideoMode(user_config->m_width, user_config->m_height, 0, m_flags);
if (!m_main_surface)
{
//ask for lower quality as a fallback
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
m_main_surface = SDL_SetVideoMode(user_config->m_width, user_config->m_height, 0, m_flags);
if (m_main_surface)
{
fprintf(stderr, "Using fallback OpenGL settings\n");
}
else
{
//one last attempt: get rid of the alpha channel
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0);
m_main_surface = SDL_SetVideoMode(user_config->m_width, user_config->m_height, 0, m_flags);
if (m_main_surface)
{
fprintf(stderr, "Using fallback OpenGL settings, without alpha channel\n");
}
else
{
fprintf(stderr, "SDL_SetVideoMode (%dx%d) failed: %s\n",
user_config->m_width, user_config->m_height, SDL_GetError());
exit(1);
}
} // !m_main_surface
} // !m_main_surface
#endif
#if defined(WIN32) || defined(__APPLE__) #if defined(WIN32) || defined(__APPLE__)
if(resetTextures) if(resetTextures)
{ {
@ -361,10 +308,6 @@ SDLDriver::~SDLDriver()
// FIXME LEAK: delete m_action_map if defined // FIXME LEAK: delete m_action_map if defined
SDL_FreeSurface(m_main_surface); SDL_FreeSurface(m_main_surface);
#ifndef HAVE_IRRLICHT
// Irrlicht calls SDL_Quit otherwise
SDL_Quit();
#endif
} // ~SDLDriver } // ~SDLDriver
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View File

@ -1197,7 +1197,7 @@ void Track::loadTrackModel()
// First read the temporary materials.dat file if it exists // First read the temporary materials.dat file if it exists
try try
{ {
std::string materials_file = file_manager->getTrackFile("materials.dat",getIdent()); std::string materials_file = file_manager->getTrackFile("materials.xml",getIdent());
material_manager->pushTempMaterial(materials_file); material_manager->pushTempMaterial(materials_file);
} }
catch (std::exception& e) catch (std::exception& e)