|
From: <yas...@us...> - 2013-11-18 01:58:16
|
Revision: 14472
http://sourceforge.net/p/supertuxkart/code/14472
Author: yasin-ghannam
Date: 2013-11-18 01:58:10 +0000 (Mon, 18 Nov 2013)
Log Message:
-----------
Added time limited-match instead of only goal-limited ones.
Modified Paths:
--------------
main/trunk/data/gui/soccer_setup.stkgui
main/trunk/src/guiengine/widgets/spinner_widget.hpp
main/trunk/src/modes/soccer_world.cpp
main/trunk/src/modes/soccer_world.hpp
main/trunk/src/states_screens/soccer_setup_screen.cpp
Modified: main/trunk/data/gui/soccer_setup.stkgui
===================================================================
--- main/trunk/data/gui/soccer_setup.stkgui 2013-11-17 23:58:42 UTC (rev 14471)
+++ main/trunk/data/gui/soccer_setup.stkgui 2013-11-18 01:58:10 UTC (rev 14472)
@@ -14,7 +14,20 @@
<spacer width="50" height="25"/>
<spinner id="goalamount" proportion="1" height="100%" min_value="1" max_value="10" wrap_around="true"/>
</div>
+
+
+ <div layout="horizontal-row" width="100%" height="50" align="center">
+
+ <bright proportion="1" height="100%"
+ I18N="In soccer setup menu" text="Maximum time(minutes)" text_align="right" />
+ <checkbox id="time_enabled" height="40"/>
+ <spacer width="50" height="25"/>
+
+ <spinner id="timeamount" proportion="1" height="100%" min_value="1" max_value="45" wrap_around="true"/>
+ </div>
+
+
<spacer height="25" width="25"/>
<bright height="15" width="25" I18N="In soccer setup menu" text="Use left/right to choose your team" text_align="center" align="center" />
Modified: main/trunk/src/guiengine/widgets/spinner_widget.hpp
===================================================================
--- main/trunk/src/guiengine/widgets/spinner_widget.hpp 2013-11-17 23:58:42 UTC (rev 14471)
+++ main/trunk/src/guiengine/widgets/spinner_widget.hpp 2013-11-18 01:58:10 UTC (rev 14472)
@@ -161,6 +161,8 @@
/** Override method from base class Widget */
virtual void setDeactivated();
+ bool isActivated() { return !m_deactivated; }
+
/** Display custom text in spinner */
void setCustomText(const core::stringw& text);
};
Modified: main/trunk/src/modes/soccer_world.cpp
===================================================================
--- main/trunk/src/modes/soccer_world.cpp 2013-11-17 23:58:42 UTC (rev 14471)
+++ main/trunk/src/modes/soccer_world.cpp 2013-11-18 01:58:10 UTC (rev 14472)
@@ -41,7 +41,11 @@
*/
SoccerWorld::SoccerWorld() : WorldWithRank()
{
- WorldStatus::setClockMode(CLOCK_CHRONO);
+ if(race_manager->hasTimeTarget()){
+ WorldStatus::setClockMode(WorldStatus::CLOCK_COUNTDOWN, race_manager->getTimeTarget());
+ countDownReachedZero = false;
+ }
+ else WorldStatus::setClockMode(CLOCK_CHRONO);
m_use_highscores = false;
} // SoccerWorld
//-----------------------------------------------------------------------------
@@ -63,7 +67,7 @@
m_display_rank = false;
m_goal_timer = 0.f;
m_lastKartToHitBall = -1;
-
+
// check for possible problems if AI karts were incorrectly added
if(getNumKarts() > race_manager->getNumPlayers())
{
@@ -81,6 +85,11 @@
void SoccerWorld::reset()
{
WorldWithRank::reset();
+ if(race_manager->hasTimeTarget()){
+ WorldStatus::setClockMode(WorldStatus::CLOCK_COUNTDOWN, race_manager->getTimeTarget());
+ countDownReachedZero = false;
+ }
+ else WorldStatus::setClockMode(CLOCK_CHRONO);
m_can_score_points = true;
memset(m_team_goals, 0, sizeof(m_team_goals));
@@ -165,11 +174,17 @@
{
if(first_goal){
m_redScorers.push_back(m_lastKartToHitBall);
- m_redScoreTimes.push_back(world->getTime());
+ if(race_manager->hasTimeTarget())
+ m_redScoreTimes.push_back(race_manager->getTimeTarget() - world->getTime());
+ else
+ m_redScoreTimes.push_back(world->getTime());
}
else{
m_blueScorers.push_back(m_lastKartToHitBall);
- m_blueScoreTimes.push_back(world->getTime());
+ if(race_manager->hasTimeTarget())
+ m_blueScoreTimes.push_back(race_manager->getTimeTarget() - world->getTime());
+ else
+ m_blueScoreTimes.push_back(world->getTime());
}
}
}
@@ -224,7 +239,11 @@
{
return false;
}
- // One team scored the target goals ...
+
+ else if(race_manager->hasTimeTarget()){
+ return countDownReachedZero;
+ }
+ // One team scored the target goals ...
else if(getScore(0) >= m_goal_target ||
getScore(1) >= m_goal_target )
{
@@ -244,6 +263,12 @@
m_can_score_points = false;
WorldWithRank::terminateRace();
} // terminateRace
+//-----------------------------------------------------------------------------
+/** Called when the match time ends.
+*/
+void SoccerWorld::countdownReachedZero(){
+ countDownReachedZero = true;
+}
//-----------------------------------------------------------------------------
/** Returns the data to display in the race gui.
Modified: main/trunk/src/modes/soccer_world.hpp
===================================================================
--- main/trunk/src/modes/soccer_world.hpp 2013-11-17 23:58:42 UTC (rev 14471)
+++ main/trunk/src/modes/soccer_world.hpp 2013-11-18 01:58:10 UTC (rev 14472)
@@ -45,6 +45,7 @@
int m_team_goals[NB_SOCCER_TEAMS];
/** Number of goals needed to win */
int m_goal_target;
+ bool countDownReachedZero;
/** Whether or not goals can be scored (they are disabled when a point is scored
and re-enabled when the next game can be played)*/
bool m_can_score_points;
@@ -66,6 +67,7 @@
// clock events
virtual bool isRaceOver();
virtual void terminateRace();
+ virtual void countdownReachedZero() OVERRIDE;
// overriding World methods
virtual void reset();
Modified: main/trunk/src/states_screens/soccer_setup_screen.cpp
===================================================================
--- main/trunk/src/states_screens/soccer_setup_screen.cpp 2013-11-17 23:58:42 UTC (rev 14471)
+++ main/trunk/src/states_screens/soccer_setup_screen.cpp 2013-11-18 01:58:10 UTC (rev 14472)
@@ -23,6 +23,7 @@
#include "states_screens/arenas_screen.hpp"
#include "guiengine/widgets/button_widget.hpp"
#include "guiengine/widgets/spinner_widget.hpp"
+#include "guiengine/widgets/check_box_widget.hpp"
#include "guiengine/widgets/label_widget.hpp"
#include "guiengine/widgets/model_view_widget.hpp"
#include "guiengine/scalable_font.hpp"
@@ -56,13 +57,31 @@
if(name == "continue")
{
StateManager::get()->pushScreen( ArenasScreen::getInstance() );
- race_manager->setMaxGoal(getWidget<SpinnerWidget>("goalamount")->getValue());
+ if(getWidget<SpinnerWidget>("goalamount")->isActivated())
+ race_manager->setMaxGoal(getWidget<SpinnerWidget>("goalamount")->getValue());
+ else
+ race_manager->setTimeTarget((float)getWidget<SpinnerWidget>("timeamount")->getValue()*60);
+
input_manager->setMasterPlayerOnly(true);
}
else if (name == "back")
{
StateManager::get()->escapePressed();
}
+ else if(name == "time_enabled")
+ {
+ CheckBoxWidget* timeEnabled = dynamic_cast<CheckBoxWidget*>(widget);
+ if(timeEnabled->getState())
+ {
+ getWidget<SpinnerWidget>("goalamount")->setDeactivated();
+ getWidget<SpinnerWidget>("timeamount")->setActivated();
+ }
+ else
+ {
+ getWidget<SpinnerWidget>("timeamount")->setDeactivated();
+ getWidget<SpinnerWidget>("goalamount")->setActivated();
+ }
+ }
}
// -----------------------------------------------------------------------------
@@ -143,7 +162,13 @@
SpinnerWidget* goalamount = getWidget<SpinnerWidget>("goalamount");
goalamount->setValue(UserConfigParams::m_num_goals);
+ goalamount->setDeactivated();
+ SpinnerWidget* timeAmount = getWidget<SpinnerWidget>("timeamount");
+ timeAmount->setValue(timeAmount->getMin());
+
+ CheckBoxWidget* timeEnabled = getWidget<CheckBoxWidget>("time_enabled");
+
// Set focus on "continue"
ButtonWidget* bt_continue = getWidget<ButtonWidget>("continue");
bt_continue->setFocusForPlayer(PLAYER_ID_GAME_MASTER);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|