Implemented credits screen

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3507 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2009-05-17 19:07:27 +00:00
parent 705962d501
commit 56b99ce73e
9 changed files with 514 additions and 162 deletions

View File

@ -1,69 +1,52 @@
Super TuxKart - SVN
=================
Visit us at http://supertuxkart.sourceforge.net
= Super TuxKart =
A Libre Karting Game Featuring Tux & Friends
- Version SVN
- Visit us at http://supertuxkart.sf.net
SuperTuxKart Administrators:
----------------------------
= SuperTuxKart Administrators =
Joerg Henrichs (hiker)
- Project leader
- Programming
- Lead Programming
- Windows Packaging
Marianne Gagnon (Auria)
- Lead Programming
- Art director
- Programming
- Mac OS X Packager
Constantin Pelikan (conso)
- Add-ons administrator
- Art director
- Add-on package administrator
Additional Programming
----------------------
= Additional Programming =
Stephen Dunn
- Work on Audio
Damien
- Ogg vorbis support
Yann Leprince (sciyann)
- Improved build system
- Bug fixes
Patrick Ammann
- OpenAL support
- Bug fixes
- Code cleanup
Paul Elms (scifly)
- Change resoluton GUI
- Bug fixes
Robert Schuster
- User settings updates
- Input handling improvements
- SDL port
- Bug fixes
Bug fixes & misc contributions
- Damien
- Yann Leprince (sciyann)
- Robert Schuster
- Patrick Ammann
- Paul Elms (scifly)
Visual art
----------
= Visual art =
Minibjorn
- Powerups and baddies (models + icons)
- (Bowling Ball, Cake, Plunger, Bubblegum,
- Anchor, Bomb, Gift-box, Nitro-tank)
Minibjorn
- Powerups and baddies : Bowling Ball, Cake, Plunger, Bubblegum, Anchor, Bomb, Gift-box, Nitro-tank (models + icons)
- Fire and smoke particles
- Puffy kart
- Various textures
The BurningWell image collection
Tobias Beyrer
- Wilber kart
- elePHPant kart
- main menu background (with modifications by Auria and MiniBjorn)
Thomas Oppl
- 'Canyon' track
- 'City' track
@ -74,6 +57,12 @@ Cheleb
- Nolok kart
- Pidgin kart
The BurningWell image collection
Tobias Beyrer
- Wilber kart
- elePHPant kart
abejones
- Adiumy kart
@ -87,27 +76,30 @@ Ivar ten Cate (Varivar)
- Old mine track
- Tux Tollway track
Canarix, Andy (Needer)
- 2D art
Startrack improvements:
Canarix, Andy (Needer)
Conso
Paul Elms (scifly)
Misc contributions
- Canarix, Andy (Needer)
- Conso
- Paul Elms (scifly)
Marianne Gagnon (Auria)
- 'SnowTux peak' (Based on older 'Geeko peak')
- 'Shifting sands' improvements
- 'Around the Lighthouse' improvements
- 'On the beach' improvements
Marianne Gagnon (Auria)
- 'SnowTux peak' track (Based on previous track 'Geeko peak' from original TuxKart)
- 'Shifting sands', 'Around the Lighthouse' and 'On the beach' track improvements
- 'Amazonian Journey' track
- 'Fort Magma' track (based on previous track 'BSOD castle' from original TuxKart) (modified by conso)
- 'Crescent Crossing' track (Based on previous track 'little volcano' from GOTM contributors)
- 'Fort Magma' (based on older 'BSOD castle')
- 'Crescent Crossing' (Based on older 'little volcano')
- New icon
Frederico de Oliveira Linhares
- Hexley the platypus character (modified and arranged with modified Wilber-kart by conso)
- Hexley kart character (modified
- to use Wilber-kart by conso)
Johannes Sjolund
- 'The Island' track (with modifications by Wayne Dennis (Pixel_2ACF3))
- 'The Island' track (with modifications
- by Wayne Dennis (Pixel_2ACF3))
Christian Framing
- Updated EvilTux kart
@ -119,15 +111,11 @@ Canis Lupus
- Snow Mountain track
- XR591 track (with modifications by conso)
Music
-----
= Music =
Weirwood
- 'Kart grand prix' song
Lukas Siewert (Dr.Sternhagel)
- 'Caribbean music' song
Magne Djupvik
- 'Penguin Party' song
@ -140,141 +128,160 @@ Marianne Gagnon (Auria)
Matt Thomas
- Boom-boom-boom song
Lukas Siewert (Dr.Sternhagel)
- 'Caribbean music' song
Chris Leutwyler (kronobil)
- Old mine song
- Snowy track song
Other music (not specifically created for STK):
- Brad Sucks for 'Out of it' (modified by conso)
- ChillCarrier for 'Druckverlust'
- Deff Syndicate for 'hip hop 1'
- Alessandro Bottura for 'MayDay Mayhem' (modified by conso)
- Speedsound for 'Sky Vibe - High Frequency'
- Daniel Bautista for 'Symphony No. 5' (modified by conso)
- TheDeadRocks for 'GreenSecretFromAmazonia', 'EasyJob', 'OneMillionDollar'
The Dead Rocks
- 'GreenSecretFromAmazonia'
- 'EasyJob'
- 'OneMillionDollar'
SFX
---
Misc "Open" Artists
- Brad Sucks - 'Out of it'
- ChillCarrier - 'Druckverlust'
- Deff Syndicate - 'hip hop 1'
- Alessandro Bottura - 'MayDay Mayhem'
- Speedsound - 'Sky Vibe High Frequency'
- Daniel Bautista - 'Symphony No. 5'
Stephan Wiefling
- Menu sounds
Misc sound effects :
= Sound Effects =
Sound effects
- Daveincamas
- Radio Mall
- BLASTWAVEFX 02344
- smcameron
- SmiertSpionem
- Battle For Wesnoth
Sound effects
- lonemonk
- FreqMan
- Pogotron
- roscoetoon
- han1
- lonemonk
The TORCS project for their engine sound
Sound effects
- Stephan Wiefling : Menu sounds
- Stephen Dunn & morgantj : engine sound
- Stephen Dunn & Atheal Washington : skidding
- Battle For Wesnoth
- The TORCS project
The Dead Rocks
-Easy Job
-Green Secret from Amazonia
-One Million dollar
= Translations =
German
- Dominique Leuenberger (dimstar)
- Stefan von Halenbach
- Constantin Pelikan
French
- Marianne Gagnon (Auria)
- Yann Leprince (sciyann)
Dutch
- Frans van Rijn (Asciimonster)
Spanish
- David Ballesteros Mayo (Dividio)
- Samuel (netocp-1)
Italian
- Vincenzo (Gigugin)
Swedish
- Niklas Grahn (Respit)
Romanian
- Marina Muncescu
Portugese
- Flávio Zavan (nebososo)
Irish
- Aaron Kearns
Finnish
- Kristian Laakkonen
Galician
- Adrián Chaves Fernández
- Proxecto Trasno
Polish
- Patryk Wychowaniec (patryk1303 / p98)
Czech
- Ondřej Hruška (Prasisko)
Catalan
- Albert Juhé Lluveras (Aljullu)
Stephen Dunn, based on work by morgantj
- Engine sound
= Website =
Atheal Washington and Stephen Dunn
- Skidding sound
Tom Jenkins
- Website skin
- New website layout
Translations
------------
German: Dominique Leuenberger (dimstar), Stefan von Halenbach, Constantin Pelikan
French: Marianne Gagnon (Auria), Yann Leprince (sciyann)
Dutch: Frans van Rijn (Asciimonster)
Spanish: David Ballesteros Mayo (Dividio), Samuel (netocp-1)
Italian: Vincenzo (Gigugin)
Swedish: Niklas Grahn (Respit)
Romanian: Marina Muncescu
Portugese: Flávio Zavan (nebososo)
Irish: Aaron Kearns
Finnish : Kristian Laakkonen
Galician : Adrián Chaves Fernández, Proxecto Trasno
Polish: Patryk Wychowaniec (patryk1303 / p98)
Czech: Ondřej Hruška (Prasisko)
Catalan : Albert Juhé Lluveras (Aljullu)
Misc improvements
- Remy le Guen (Vivelefrat)
- Sebastian Rode
- Hiker, Auria, Conso
Mac OS X port
-------------
Marianne Gagnon (Auria)
with additional and/or past involvement from
Cherryprice, Nuke, Florian, JPenguin, TinGamer, Xeno74
= Misc =
Testing
-------
- Canarix
- JPenguin
- The Games4Mac Forum Community
- (http://community.games4mac.de)
Canarix, JPenguin
Donations
- Markus Liukka
- Michael Roessner (http://www.retrax.de)
- Phelippeau Rudy (rudy251079)
- Carl Olsson
- Tux_penguin
The friendly people at the Games4Mac Forum
Website: http://community.games4mac.de
= Previous contributors =
Former Admin
- Eduardo Hernandez Munoz (Coz)
Webmasters
----------
Constantin Pelikan (conso)
- General improvements
Remy le Guen (Vivelefrat)
- Website improvements
Sebastian Rode
- STK description on the website
Misc
----
Windows Installer
- Sam Clarke
Hans Dzaack (Hans the farmer)
- Physics tuning
Markus Liukka
- Donator
Michael Roessner
Website: http://www.retrax.de
- Donator
Sam Clarke
- Windows Installer
Previous contributors (version 0.5 and earlier):
------------------------------------------------
Eduardo Hernandez Munoz (Coz) (former Co-admin)
Maik Semder (Ikework)
- Bug fixes
Canarix
- Original user interface
Game of the Month, STK version 0.0.0 :
See http://happypenguin.org/forums/viewforum.php?f=21
Caleb Sawtell
Craig Keogh
Ingo Ruhnke
Jacob Persson
James Gregory
Matthias Braun
Oliver Jeeves
Pascal Giard
Paul Carley
Ricardo Cruz
Willian Padovani Germano
Game of the Month (STK version 0.0)
- Craig Keogh, Ingo Ruhnke, Jacob Persson
- James Gregory, Pascal Giard
- Matthias Braun, Oliver Jeeves
- Paul Carley, Ricardo Cruz, Caleb Sawtell
- Willian Padovani Germano, James Gregory
Original Tuxkart
------------------
- Steve Baker (http://www.sjbaker.org/)
- Oliver Baker
Steve Baker, Oliver Baker
Website: http://www.sjbaker.org/
- Everything except the music
= Thanks for Playing! =
Do not hesistate to contribute!
- Give feedback
- Participate on the community
- Donate
- Code
- Make art
-
-
-
-
-

15
data/gui/credits.stkgui Normal file
View File

@ -0,0 +1,15 @@
<div x="5%" y="2%" width="90%" height="96%" layout="vertical-row" >
<icon id="logo" align="center" proportion="4" width="100%" icon="gui/logo.png"/>
<label text="Credits" width="100%" />
<box id="animated_area" width="100%" proportion="10">
</box>
<spacer width="50" height="45" />
</div>
<button id="back" x="20" y="-40" width="250" height="35" align="left" text="Back to main menu"/>

259
src/gui/credits.cpp Normal file
View File

@ -0,0 +1,259 @@
// $Id$
//
// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2006 Joerg Henrichs
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "user_config.hpp"
#include "gui/credits.hpp"
#include "gui/engine.hpp"
#include "io/file_manager.hpp"
#include <fstream>
#include <irrString.h>
using irr::core::stringw;
using irr::core::stringc;
namespace GUIEngine
{
const float TIME_SECTION_FADE = 0.4f;
class CreditsEntry
{
public:
stringw m_name;
std::vector<stringw> m_subentries;
CreditsEntry(stringw& name)
{
m_name = name;
}
};
class CreditsSection
{
public:
// read-only
std::vector<CreditsEntry> m_entries;
stringw m_name;
CreditsSection(stringw name)
{
this->m_name = name;
}
void addEntry(CreditsEntry& entry)
{
m_entries.push_back(entry);
}
void addSubEntry(stringw& subEntryString)
{
m_entries[m_entries.size()-1].m_subentries.push_back(subEntryString);
}
};
CreditsSection* Credits::getCurrentSection()
{
return m_sections.get(m_sections.size()-1);
}
Credits::Credits()
{
reset();
std::string creditsfile = file_manager->getDataDir() + "/CREDITS";
std::ifstream file( creditsfile.c_str() ) ;
stringw line;
std::string getline;
while( std::getline( file, getline ) )
{
line = getline.c_str();
line = line.trim();
if(line.size() < 1) continue; // empty line
if(line[0] == '=' && line[line.size()-1] == '=')
{
line = stringw( line.subString(1, line.size()-2).c_str() );
line = line.trim();
//stringc cversion = line.c_str();
//std::cout << "Section : " << (char*)(cversion.c_str()) << std::endl;
m_sections.push_back( new CreditsSection(line) );
}
else if(line[0] == '-')
{
line = stringw( line.subString(1, line.size()-1).c_str() );
line = line.trim();
//stringc cversion = line.c_str();
//std::cout << "---- Sub-Entry : " << (char*)(cversion.c_str()) << std::endl;
getCurrentSection()->addSubEntry( line );
}
else
{
//tringc cversion = line.c_str();
//std::cout << "-- Entry : " << (char*)(cversion.c_str()) << std::endl;
CreditsEntry entry(line);
getCurrentSection()->addEntry( entry );
}
} // end while
}
void Credits::setArea(const int x, const int y, const int w, const int h)
{
this->x = x;
this->y = y;
this->w = w;
this->h = h;
m_section_rect = core::rect< s32 >( x, y, x+w, y+h/6 );
}
void Credits::reset()
{
m_curr_section = 0;
m_curr_element = -1;
time_before_next_step = TIME_SECTION_FADE;
m_time_element = 2.5f;
}
void Credits::render(const float elapsed_time)
{
time_before_next_step -= elapsed_time;
const bool before_first_elem = (m_curr_element == -1);
const bool after_last_elem = (m_curr_element >= (int)m_sections[m_curr_section].m_entries.size());
// ---- section name
video::SColor color( 255 /* a */, 0 /* r */, 0 /* g */ , 75 /* b */ );
// manage fade-in
if(before_first_elem)
{
int alpha = 255 - (int)(time_before_next_step/TIME_SECTION_FADE * 255);
if(alpha < 0) alpha = 0;
else if(alpha > 255) alpha = 255;
color.setAlpha( alpha );
}
// manage fade-out
else if(after_last_elem)
{
int alpha = (int)(time_before_next_step/TIME_SECTION_FADE * 255);
if(alpha < 0) alpha = 0;
else if(alpha > 255) alpha = 255;
color.setAlpha( alpha );
}
GUIEngine::getFont()->draw(m_sections[m_curr_section].m_name.c_str(), m_section_rect, color,
true /* center h */, true /* center v */ );
// draw entries
if(!before_first_elem && !after_last_elem)
{
int text_offset = 0;
// fade in
if(time_before_next_step < 0.3f)
{
const float fade_in = time_before_next_step / 0.3f;
int alpha = (int)(fade_in * 255);
if(alpha < 0) alpha = 0;
else if(alpha > 255) alpha = 255;
color.setAlpha( alpha );
text_offset = (int)((1.0f - fade_in) * 100);
}
// fade out
else if(time_before_next_step >= m_time_element - 0.3f)
{
const float fade_out = (time_before_next_step - (m_time_element - 0.3f)) / 0.3f;
int alpha = 255 - (int)(fade_out * 255);
if(alpha < 0) alpha = 0;
else if(alpha > 255) alpha = 255;
color.setAlpha( alpha );
text_offset = -(int)(fade_out * 100);
}
GUIEngine::getFont()->draw(m_sections[m_curr_section].m_entries[m_curr_element].m_name.c_str(),
core::rect< s32 >( x + text_offset, y+h/6, x+w+text_offset, y+h/3 ), color,
false /* center h */, true /* center v */ );
const int subamount = m_sections[m_curr_section].m_entries[m_curr_element].m_subentries.size();
int suby = y+h/3;
for(int i=0; i<subamount; i++)
{
GUIEngine::getFont()->draw(m_sections[m_curr_section].m_entries[m_curr_element].m_subentries[i].c_str(),
core::rect< s32 >( x + 32, suby + text_offset/(1+1), x+w+32, suby+h/8 + text_offset/(1+1) ),
color,
false/* center h */, true /* center v */ );
suby += h/8;
}
}
// is it time to move on?
if(time_before_next_step < 0)
{
if(after_last_elem)
{
// switch to next element
m_curr_section++;
m_curr_element = -1;
time_before_next_step = TIME_SECTION_FADE;
if(m_curr_section >= (int)m_sections.size()) reset();
}
else
{
// move on
m_curr_element++;
if(m_curr_element >= (int)m_sections[m_curr_section].m_entries.size())
time_before_next_step = TIME_SECTION_FADE;
else
{
m_time_element = 1.6f + (int)m_sections[m_curr_section].m_entries[m_curr_element].m_subentries.size()*0.5f;
time_before_next_step = m_time_element;
}
}
}
/*
draw (const wchar_t *text, const core::rect< s32 > &position, video::SColor color,
bool hcenter=false,
bool vcenter=false, const core::rect< s32 > *clip=0)=0
*/
}
static Credits* singleton = NULL;
Credits* Credits::getInstance()
{
if(singleton == NULL) singleton = new Credits();
return singleton;
}
} // end namespace

37
src/gui/credits.hpp Normal file
View File

@ -0,0 +1,37 @@
#ifndef HEADER_CREDITS_HPP
#define HEADER_CREDITS_HPP
#include "ptr_vector.hpp"
namespace GUIEngine
{
class CreditsSection;
class Credits
{
float m_time_element;
ptr_vector<CreditsSection, HOLD> m_sections;
CreditsSection* getCurrentSection();
int x, y, w, h;
core::rect< s32 > m_section_rect;
int m_curr_section;
int m_curr_element;
float time_before_next_step;
public:
Credits();
static Credits* getInstance();
void setArea(const int x, const int y, const int w, const int h);
// start from beginning again
void reset();
void render(const float elapsed_time);
};
}
#endif

View File

@ -5,6 +5,7 @@
#include "gui/screen.hpp"
#include "gui/skin.hpp"
#include "gui/widget.hpp"
#include "gui/credits.hpp"
#include "io/file_manager.hpp"
#include "gui/state_manager.hpp"
#include "input/input_manager.hpp"
@ -222,6 +223,7 @@ void render(float elapsed_time)
}
// ---- menu drawing
// draw background image and sections
if(!StateManager::isGameState())
{
GUIEngine::getDriver()->draw2DImage(bg_image, dest, source_area,
@ -229,8 +231,14 @@ void render(float elapsed_time)
g_skin->renderSections();
}
// ---- let irrLicht do the rest (the Skin object will be called for further render)
// let irrLicht do the rest (the Skin object will be called for further render)
g_env->drawAll();
// ---- additionnal drawing
if(getCurrentScreen()->getName() == "credits.stkgui")
{
Credits::getInstance()->render(elapsed_time);
}
}
}

View File

@ -6,6 +6,7 @@
#include "gui/engine.hpp"
#include "gui/widget.hpp"
#include "gui/screen.hpp"
#include "gui/credits.hpp"
#include "input/input_manager.hpp"
#include "input/device_manager.hpp"
#include "graphics/irr_driver.hpp"
@ -58,6 +59,10 @@ namespace StateManager
main_loop->abort();
return;
}
else if (selection == "about")
{
StateManager::pushMenu("credits.stkgui");
}
else if (selection == "help")
{
pushMenu("help1.stkgui");
@ -550,6 +555,22 @@ namespace StateManager
menuEventOptions(widget, name);
else if( screen_name == "help1.stkgui" || screen_name == "help2.stkgui" || screen_name == "help3.stkgui")
menuEventHelp(widget, name);
else if( screen_name == "credits.stkgui" )
{
if(name == "init")
{
Widget* w = getCurrentScreen()->getWidget<Widget>("animated_area");
assert(w != NULL);
Credits* credits = Credits::getInstance();
credits->reset();
credits->setArea(w->x, w->y, w->w, w->h);
}
else if(name == "back")
{
StateManager::escapePressed();
}
}
else
std::cerr << "Warning, unknown menu " << screen_name << " in event callback\n";

View File

@ -20,6 +20,7 @@
9505578B0F696A900056E88C /* widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 950557840F696A900056E88C /* widget.cpp */; };
951C35810FC05BF400A48379 /* quad_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951C357E0FC05BF400A48379 /* quad_set.cpp */; };
951C35820FC05BF400A48379 /* quad_graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951C35800FC05BF400A48379 /* quad_graph.cpp */; };
951C35BF0FC066ED00A48379 /* credits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951C35BE0FC066ED00A48379 /* credits.cpp */; };
953EAAAF0F30A4220000D57D /* terrain_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAAE0F30A4220000D57D /* terrain_info.cpp */; };
953EAAB20F30A4410000D57D /* triangle_mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB10F30A4410000D57D /* triangle_mesh.cpp */; };
953EAAB60F30A4650000D57D /* translation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB50F30A4650000D57D /* translation.cpp */; };
@ -264,6 +265,8 @@
951C357E0FC05BF400A48379 /* quad_set.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quad_set.cpp; path = games/supertuxkart/src/tracks/quad_set.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; };
951C357F0FC05BF400A48379 /* quad_graph.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = quad_graph.hpp; path = ../../tracks/quad_graph.hpp; sourceTree = SOURCE_ROOT; };
951C35800FC05BF400A48379 /* quad_graph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quad_graph.cpp; path = games/supertuxkart/src/tracks/quad_graph.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; };
951C35BD0FC066ED00A48379 /* credits.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = credits.hpp; path = games/supertuxkart/src/gui/credits.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; };
951C35BE0FC066ED00A48379 /* credits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = credits.cpp; path = games/supertuxkart/src/gui/credits.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; };
951F96810F29670C00E1AC66 /* SuperTuxKart */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SuperTuxKart; sourceTree = BUILT_PRODUCTS_DIR; };
953EAAAD0F30A4220000D57D /* terrain_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = terrain_info.hpp; path = ../../tracks/terrain_info.hpp; sourceTree = SOURCE_ROOT; };
953EAAAE0F30A4220000D57D /* terrain_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = terrain_info.cpp; path = ../../tracks/terrain_info.cpp; sourceTree = SOURCE_ROOT; };
@ -1178,6 +1181,8 @@
950557790F696A900056E88C /* gui */ = {
isa = PBXGroup;
children = (
951C35BE0FC066ED00A48379 /* credits.cpp */,
951C35BD0FC066ED00A48379 /* credits.hpp */,
9505577A0F696A900056E88C /* engine.cpp */,
9505577B0F696A900056E88C /* engine.hpp */,
9505577C0F696A900056E88C /* my_button.cpp */,
@ -1975,8 +1980,8 @@
95C2B1DF0F296546000D3E5D /* utils */ = {
isa = PBXGroup;
children = (
953EAAB40F30A4650000D57D /* translation.hpp */,
953EAAB50F30A4650000D57D /* translation.cpp */,
953EAAB40F30A4650000D57D /* translation.hpp */,
95C2B1E00F296546000D3E5D /* constants.hpp */,
95C2B1E10F296546000D3E5D /* coord.hpp */,
95C2B1E20F296546000D3E5D /* random_generator.cpp */,
@ -2761,6 +2766,7 @@
95CA59F80F82FCB7003323DB /* physical_object.cpp in Sources */,
951C35810FC05BF400A48379 /* quad_set.cpp in Sources */,
951C35820FC05BF400A48379 /* quad_graph.cpp in Sources */,
951C35BF0FC066ED00A48379 /* credits.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -60,7 +60,6 @@ namespace StringUtils
}
return filename;
}
//-----------------------------------------------------------------------------
std::string without_extension(const std::string& filename)
{

View File

@ -33,7 +33,7 @@ namespace StringUtils
/** Return the filename part of a path */
std::string basename(const std::string& filename);
/** Return the path (i.e. up to the last / */
/** Return the path ( i.e. up to the last / ) */
std::string path(const std::string& filename);
std::string without_extension(const std::string& filename);