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:
parent
705962d501
commit
56b99ce73e
323
data/CREDITS
323
data/CREDITS
@ -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
15
data/gui/credits.stkgui
Normal 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
259
src/gui/credits.cpp
Normal 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
37
src/gui/credits.hpp
Normal 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
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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";
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -60,7 +60,6 @@ namespace StringUtils
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
std::string without_extension(const std::string& filename)
|
||||
{
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user