code for credits is finished
parent
7daac06f59
commit
ff87d9984a
|
@ -31,6 +31,7 @@ BEGIN_ENUM(ViewState)
|
||||||
DECL_ENUM_ELEMENT(ViewStateEnterPlayername),
|
DECL_ENUM_ELEMENT(ViewStateEnterPlayername),
|
||||||
DECL_ENUM_ELEMENT(ViewStateEditor),
|
DECL_ENUM_ELEMENT(ViewStateEditor),
|
||||||
DECL_ENUM_ELEMENT(ViewStateOptions),
|
DECL_ENUM_ELEMENT(ViewStateOptions),
|
||||||
|
DECL_ENUM_ELEMENT(ViewStateCredits),
|
||||||
DECL_ENUM_ELEMENT(ViewStateGameOver),
|
DECL_ENUM_ELEMENT(ViewStateGameOver),
|
||||||
DECL_ENUM_LAST(ViewState)
|
DECL_ENUM_LAST(ViewState)
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,8 @@ int View::OnInit (int argc, char* argv[]) {
|
||||||
|
|
||||||
PushViewState (ViewStateMainMenu);
|
PushViewState (ViewStateMainMenu);
|
||||||
|
|
||||||
|
mCreditsPageIndex = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -446,6 +448,9 @@ void View::DrawUi () {
|
||||||
case ViewStateEditor:
|
case ViewStateEditor:
|
||||||
DrawUiEditor();
|
DrawUiEditor();
|
||||||
break;
|
break;
|
||||||
|
case ViewStateCredits:
|
||||||
|
DrawUiCredits();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Engine::LogWarning ("Trying to draw unknown ViewState: %s (%d)",
|
Engine::LogWarning ("Trying to draw unknown ViewState: %s (%d)",
|
||||||
GetStringViewState (game_state), game_state);
|
GetStringViewState (game_state), game_state);
|
||||||
|
@ -494,6 +499,11 @@ void View::DrawUiMainMenu() {
|
||||||
PushViewState(ViewStateShowHighscore);
|
PushViewState(ViewStateShowHighscore);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Engine::GUI::Button (4, "Credits", screen_right * 0.5 - 100, 350, button_width, button_height)) {
|
||||||
|
mCreditsPageIndex = 0;
|
||||||
|
PushViewState(ViewStateCredits);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (Engine::GUI::Button (6, "E", screen_right - 48, 20, 32, button_height)) {
|
if (Engine::GUI::Button (6, "E", screen_right - 48, 20, 32, button_height)) {
|
||||||
PushViewState(ViewStateEditor);
|
PushViewState(ViewStateEditor);
|
||||||
|
@ -501,7 +511,7 @@ void View::DrawUiMainMenu() {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (Engine::GUI::Button (4, "Quit", screen_right * 0.5 - 100, 380, button_width, button_height)) {
|
if (Engine::GUI::Button (5, "Quit", screen_right * 0.5 - 100, 430, button_width, button_height)) {
|
||||||
Engine::RunCommand("quit");
|
Engine::RunCommand("quit");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -747,6 +757,115 @@ void View::DrawUiOptions() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void View::DrawUiCredits() {
|
||||||
|
// DrawPageTitle ("Credits");
|
||||||
|
SelectFont ("console.ttf size=23");
|
||||||
|
|
||||||
|
static std::string credits_content (
|
||||||
|
"_Programming,\r\
|
||||||
|
_ Design, and Graphics\r\
|
||||||
|
Martin Felis\r\
|
||||||
|
\r\
|
||||||
|
_Level Design\r\
|
||||||
|
Martin Felis\r\
|
||||||
|
\r\
|
||||||
|
_Music\r\
|
||||||
|
DJad - Space Exploration\r\
|
||||||
|
\r\
|
||||||
|
_Sounds\r\
|
||||||
|
Marcus Zetterquist\r\
|
||||||
|
\r\
|
||||||
|
_Libraries\r\
|
||||||
|
libSDL\r\
|
||||||
|
SDL_mixer\r\
|
||||||
|
OGLFT\r\
|
||||||
|
freetype2\r\
|
||||||
|
boost\r\
|
||||||
|
libpng\r\
|
||||||
|
\r\
|
||||||
|
_Tools\r\
|
||||||
|
GIMP\r\
|
||||||
|
Blender\r\
|
||||||
|
CMake\r\
|
||||||
|
\r\
|
||||||
|
_Special Thanks\r\
|
||||||
|
to my wonderful wife Katrina\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
_http://www.fysx.org\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
\r\
|
||||||
|
:created with vim.\r\
|
||||||
|
::wq\r\
|
||||||
|
\r\
|
||||||
|
EOF\r\
|
||||||
|
");
|
||||||
|
static float page_duration = 4.;
|
||||||
|
static float page_draw_duration = page_duration;
|
||||||
|
|
||||||
|
if (page_draw_duration < 0.) {
|
||||||
|
mCreditsPageIndex ++;
|
||||||
|
page_draw_duration = page_duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
stringstream credits_stream (credits_content);
|
||||||
|
std::string line;
|
||||||
|
|
||||||
|
float xpos = 270, ypos = 200.f;
|
||||||
|
float dy = 20.f;
|
||||||
|
|
||||||
|
unsigned int index = 0;
|
||||||
|
bool first_content_line = false;
|
||||||
|
while (getline (credits_stream, line, '\r')) {
|
||||||
|
if (line.size() == 0) {
|
||||||
|
index ++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index == mCreditsPageIndex) {
|
||||||
|
if (line[0] == '_') {
|
||||||
|
SelectFont ("console.ttf size=23 color=#e8d500");
|
||||||
|
line = line.substr (1, line.size());
|
||||||
|
first_content_line = true;
|
||||||
|
} else if (line[0] == ':') {
|
||||||
|
SelectFont ("console.ttf size=23 color=#ffffff");
|
||||||
|
line = line.substr (1, line.size());
|
||||||
|
} else {
|
||||||
|
if (first_content_line) {
|
||||||
|
ypos += 20;
|
||||||
|
first_content_line = false;
|
||||||
|
}
|
||||||
|
SelectFont ("console.ttf size=23 color=#ffffff");
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawGLString (xpos, ypos, line.c_str());
|
||||||
|
ypos += dy;
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index == mCreditsPageIndex && line == std::string("EOF")) {
|
||||||
|
PopViewState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
page_draw_duration -= Engine::GetFrameDuration();
|
||||||
|
|
||||||
|
if (Engine::GUI::CheckKeyPressed(SDLK_ESCAPE)
|
||||||
|
|| Engine::GUI::CheckKeyPressed(SDLK_SPACE) ) {
|
||||||
|
PopViewState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void View::DrawUiEnterPlayername() {
|
void View::DrawUiEnterPlayername() {
|
||||||
DrawPageTitle ("Asteroids");
|
DrawPageTitle ("Asteroids");
|
||||||
SelectFont ("console.ttf size=23");
|
SelectFont ("console.ttf size=23");
|
||||||
|
|
|
@ -56,7 +56,8 @@ class View : public Engine::ViewBase {
|
||||||
if (mViewStateStack.size() > 0)
|
if (mViewStateStack.size() > 0)
|
||||||
current_name = GetStringViewState(mViewStateStack.top());
|
current_name = GetStringViewState(mViewStateStack.top());
|
||||||
|
|
||||||
Engine::LogDebug("Popped ViewState: %s current %s remaining: %u", popped_name.c_str(), current_name.c_str(), mViewStateStack.size());
|
Engine::LogDebug("Popped ViewState: %s current %s remaining: %u",
|
||||||
|
popped_name.c_str(), current_name.c_str(), mViewStateStack.size());
|
||||||
|
|
||||||
if (mViewStateStack.size() == 0) {
|
if (mViewStateStack.size() == 0) {
|
||||||
Engine::LogDebug ("No ViewState on the stack! Quitting.");
|
Engine::LogDebug ("No ViewState on the stack! Quitting.");
|
||||||
|
@ -88,10 +89,12 @@ class View : public Engine::ViewBase {
|
||||||
void DrawUiLevelComplete();
|
void DrawUiLevelComplete();
|
||||||
void DrawUiGamePaused();
|
void DrawUiGamePaused();
|
||||||
void DrawUiPlayerDied();
|
void DrawUiPlayerDied();
|
||||||
void DrawHighscoreEntry(float x, float y, float entry_width, const std::string &name, unsigned int points);
|
void DrawHighscoreEntry(float x, float y, float entry_width,
|
||||||
|
const std::string &name, unsigned int points);
|
||||||
void DrawUiHighscore();
|
void DrawUiHighscore();
|
||||||
void DrawUiOptions();
|
void DrawUiOptions();
|
||||||
void DrawUiEnterPlayername();
|
void DrawUiEnterPlayername();
|
||||||
|
void DrawUiCredits();
|
||||||
|
|
||||||
void DrawUiEditor();
|
void DrawUiEditor();
|
||||||
|
|
||||||
|
@ -154,6 +157,8 @@ class View : public Engine::ViewBase {
|
||||||
EditorState mEditorState;
|
EditorState mEditorState;
|
||||||
unsigned int mEditorEntityId;
|
unsigned int mEditorEntityId;
|
||||||
|
|
||||||
|
unsigned int mCreditsPageIndex;
|
||||||
|
|
||||||
/// \brief can be used to perform some fading, etc.
|
/// \brief can be used to perform some fading, etc.
|
||||||
float mFadeTimerSecValue;
|
float mFadeTimerSecValue;
|
||||||
|
|
||||||
|
|
|
@ -530,7 +530,6 @@ bool LineEdit (int id, int x, int y, std::string &text_value, const int &maxleng
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,8 +651,10 @@ bool CheckKeyPress (int keycode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckKeyPressed (int keycode) {
|
bool CheckKeyPressed (int keycode) {
|
||||||
if (controller->uistate.keypressed_set.find(keycode) != controller->uistate.keypressed_set.end())
|
if (controller->uistate.keypressed_set.find(keycode) != controller->uistate.keypressed_set.end()) {
|
||||||
|
controller->uistate.keypressed_set.erase(keycode);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,12 +293,21 @@ void SetPlayerEntityId(unsigned int entity_id) {
|
||||||
|
|
||||||
float GetFrameDuration () {
|
float GetFrameDuration () {
|
||||||
if (!ModelInstance) {
|
if (!ModelInstance) {
|
||||||
LogError ("Couldn't create Entity: Model not initialized!");
|
LogError ("Couldn't get frame duration: Model not initialized!");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ModelInstance->GetFrameDuration ();
|
return ModelInstance->GetFrameDuration ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float GetDurationApplicationStart () {
|
||||||
|
if (!ModelInstance) {
|
||||||
|
LogError ("Couldn't get application runtime: Model not initialized!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ModelInstance->GetDurationApplicationStart ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
EntityBase * CreateEntity (int type) {
|
EntityBase * CreateEntity (int type) {
|
||||||
if (!ModelInstance) {
|
if (!ModelInstance) {
|
||||||
LogError ("Couldn't create Entity: Model not initialized!");
|
LogError ("Couldn't create Entity: Model not initialized!");
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
#include "Engine.h"
|
#include "Engine.h"
|
||||||
#include "EntityBase.h"
|
#include "EntityBase.h"
|
||||||
// #include "Timer.h"
|
|
||||||
|
|
||||||
namespace Engine {
|
namespace Engine {
|
||||||
|
|
||||||
|
@ -13,10 +12,6 @@ class Events;
|
||||||
class EntityFactoryBase;
|
class EntityFactoryBase;
|
||||||
class OverlayManager;
|
class OverlayManager;
|
||||||
|
|
||||||
#ifdef max
|
|
||||||
#undef max
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const unsigned int NullEntityId = std::numeric_limits<unsigned int>::max() - 1;
|
const unsigned int NullEntityId = std::numeric_limits<unsigned int>::max() - 1;
|
||||||
|
|
||||||
struct EntityBase;
|
struct EntityBase;
|
||||||
|
@ -44,12 +39,16 @@ class ModelBase : public Module {
|
||||||
void UpdateTimer () {
|
void UpdateTimer () {
|
||||||
static float last_frame = 0;
|
static float last_frame = 0;
|
||||||
float current_frame = static_cast<float> (SDL_GetTicks ()) * 1.0e-3;
|
float current_frame = static_cast<float> (SDL_GetTicks ()) * 1.0e-3;
|
||||||
|
mDurationApplicationStart = current_frame;
|
||||||
mDeltaSec = current_frame - last_frame;
|
mDeltaSec = current_frame - last_frame;
|
||||||
last_frame = current_frame;
|
last_frame = current_frame;
|
||||||
}
|
}
|
||||||
float GetFrameDuration () {
|
float GetFrameDuration () {
|
||||||
return mDeltaSec;
|
return mDeltaSec;
|
||||||
}
|
}
|
||||||
|
float GetDurationApplicationStart () {
|
||||||
|
return mDurationApplicationStart;
|
||||||
|
}
|
||||||
|
|
||||||
/** Adds the given Entity to the Model */
|
/** Adds the given Entity to the Model */
|
||||||
void RegisterEntity (EntityBase *entity);
|
void RegisterEntity (EntityBase *entity);
|
||||||
|
@ -86,7 +85,8 @@ class ModelBase : public Module {
|
||||||
|
|
||||||
/** Returns the id of the entity the player is currently controlling */
|
/** Returns the id of the entity the player is currently controlling */
|
||||||
unsigned int GetPlayerEntityId ();
|
unsigned int GetPlayerEntityId ();
|
||||||
/** \brief Assigns the player to an Entity. All controls will be redirected to that player
|
/** \brief Assigns the player to an Entity. All controls will be redirected
|
||||||
|
* \brief to that player
|
||||||
*
|
*
|
||||||
* This can be used to disable the controls of of the player by assinging
|
* This can be used to disable the controls of of the player by assinging
|
||||||
* the special entity id of NullEntityId */
|
* the special entity id of NullEntityId */
|
||||||
|
@ -94,7 +94,8 @@ class ModelBase : public Module {
|
||||||
|
|
||||||
/** Notifies the gamelogic of a collision event */
|
/** Notifies the gamelogic of a collision event */
|
||||||
void SendEntityCollisionEvent (const unsigned int reference_entity_id,
|
void SendEntityCollisionEvent (const unsigned int reference_entity_id,
|
||||||
const unsigned int incidence_entity_id, float collision_time, vector3d point, vector3d normal);
|
const unsigned int incidence_entity_id, float collision_time,
|
||||||
|
vector3d point, vector3d normal);
|
||||||
|
|
||||||
virtual void SetGameState (const unsigned int &state) {
|
virtual void SetGameState (const unsigned int &state) {
|
||||||
mLastGameState = mGameState;
|
mLastGameState = mGameState;
|
||||||
|
@ -164,6 +165,7 @@ class ModelBase : public Module {
|
||||||
unsigned int mLastGameState;
|
unsigned int mLastGameState;
|
||||||
|
|
||||||
float mDeltaSec;
|
float mDeltaSec;
|
||||||
|
float mDurationApplicationStart;
|
||||||
|
|
||||||
friend class ViewBase;
|
friend class ViewBase;
|
||||||
friend class OverlayManager;
|
friend class OverlayManager;
|
||||||
|
|
|
@ -19,6 +19,12 @@ void SetPlayerEntityId(unsigned int entity_id);
|
||||||
/** \brief Returns the duration of the frame in seconds */
|
/** \brief Returns the duration of the frame in seconds */
|
||||||
float GetFrameDuration ();
|
float GetFrameDuration ();
|
||||||
|
|
||||||
|
/** \brief Returns the number of seconds the application is running
|
||||||
|
*
|
||||||
|
* \todo [low] rename GetTimeApplicationStart to a proper name!
|
||||||
|
*/
|
||||||
|
float GetDurationApplicationStart ();
|
||||||
|
|
||||||
// /** \brief Starts a timer with the given id that expires after sec seconds */
|
// /** \brief Starts a timer with the given id that expires after sec seconds */
|
||||||
// void StartTimer(const std::string &id, float sec);
|
// void StartTimer(const std::string &id, float sec);
|
||||||
//
|
//
|
||||||
|
|
|
@ -316,7 +316,8 @@ bool ViewBase::LoadFont (const std::string &font_spec_string) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
font->setForegroundColor(font_color[0], font_color[1], font_color[2]);
|
font->setForegroundColor(font_color[0], font_color[1], font_color[2], 1.);
|
||||||
|
font->setBackgroundColor(0., 0., 0., 0.);
|
||||||
|
|
||||||
mFonts.insert(std::make_pair<std::string, OGLFT::Monochrome*>(font_spec_string, font));
|
mFonts.insert(std::make_pair<std::string, OGLFT::Monochrome*>(font_spec_string, font));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue