Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 12, 2011, 12:31:23 AM (13 years ago)
Author:
dafrick
Message:

Merging tutoriallevel2 branch into tutoriallevel3 branch.

Location:
code/branches/tutoriallevel3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/branches/tutoriallevel3

  • code/branches/tutoriallevel3/src/orxonox/infos/GametypeInfo.cc

    r8327 r8453  
    2323 *      Fabian 'x3n' Landau
    2424 *   Co-authors:
    25  *      ...
     25 *      Damian 'Mozork' Frick
    2626 *
    2727 */
     28
     29/**
     30    @file GametypeInfo.cc
     31    @brief Implementation of the GametypeInfo class
     32*/
    2833
    2934#include "GametypeInfo.h"
     
    3136#include "core/CoreIncludes.h"
    3237#include "core/GameMode.h"
     38#include "network/Host.h"
    3339#include "network/NetworkFunction.h"
    34 #include "network/Host.h"
     40#include "util/Convert.h"
     41
    3542#include "interfaces/GametypeMessageListener.h"
     43#include "interfaces/NotificationListener.h"
     44
     45#include "PlayerInfo.h"
    3646
    3747namespace orxonox
     
    4555    registerMemberNetworkFunction(GametypeInfo, dispatchFadingMessage);
    4656
     57    /*static*/ const std::string GametypeInfo::NOTIFICATION_SENDER("gameinfo");
     58
     59    /**
     60    @brief
     61        Registers and initializes the object.
     62    */
    4763    GametypeInfo::GametypeInfo(BaseObject* creator) : Info(creator)
    4864    {
    4965        RegisterObject(GametypeInfo);
    5066
     67        this->bActive_ = false; // At first the GametypeInfo is inactive.
     68       
    5169        this->bStarted_ = false;
    5270        this->bEnded_ = false;
    53         this->startCountdown_ = 0;
     71        this->startCountdown_ = 0.0f;
    5472        this->bStartCountdownRunning_ = false;
     73        this->counter_ = 0;
    5574
    5675        this->registerVariables();
     
    6382    void GametypeInfo::registerVariables()
    6483    {
    65         registerVariable(this->bStarted_,               VariableDirection::ToClient);
    66         registerVariable(this->bEnded_,                 VariableDirection::ToClient);
     84        registerVariable(this->bStarted_,               VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedStarted));
     85        registerVariable(this->bEnded_,                 VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedEnded));
     86        registerVariable(this->bStartCountdownRunning_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedStartCountdownRunning));
    6787        registerVariable(this->startCountdown_,         VariableDirection::ToClient);
    68         registerVariable(this->bStartCountdownRunning_, VariableDirection::ToClient);
     88        registerVariable(this->counter_,                VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedCountdownCounter));
    6989        registerVariable(this->hudtemplate_,            VariableDirection::ToClient);
     90    }
     91
     92    /**
     93    @brief
     94        Is called when the activity has changed.
     95    */
     96    void GametypeInfo::changedActivity(void)
     97    {
     98        SUPER(GametypeInfo, changedActivity);
     99
     100        // If the GametypeInfo has become active the "Press [Fire] to start the match" notification is sent.
     101        if(this->isActive())
     102            NotificationListener::sendNotification("Press [Fire] to start the match", GametypeInfo::NOTIFICATION_SENDER);
     103    }
     104
     105    /**
     106    @brief
     107        Is called when the game has changed to started.
     108    */
     109    void GametypeInfo::changedStarted(void)
     110    {
     111       
     112    }
     113
     114    /**
     115    @brief
     116        Is called when the game has changed to ended.
     117    */
     118    void GametypeInfo::changedEnded(void)
     119    {
     120        // If the game has ended, a "Game has ended" notification is displayed.
     121        if(this->hasEnded())
     122            NotificationListener::sendNotification("Game has ended", GametypeInfo::NOTIFICATION_SENDER);
     123    }
     124
     125    /**
     126    @brief
     127        Is called when the start countdown has been either started or stopped.
     128    */
     129    void GametypeInfo::changedStartCountdownRunning(void)
     130    {
     131        // Clear the notifications if the countdown has stopped running.
     132        if(!this->hasStarted() && !this->isStartCountdownRunning() && !this->hasEnded())
     133            NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER);
     134        // Send first countdown notification if the countdown has started.
     135        if(!this->hasStarted() && this->isStartCountdownRunning() && !this->hasEnded())
     136            NotificationListener::sendNotification(multi_cast<std::string>(this->counter_), GametypeInfo::NOTIFICATION_SENDER);
     137    }
     138
     139    /**
     140    @brief
     141        Is called when the start countdown counter has changed.
     142    */
     143    void GametypeInfo::changedCountdownCounter(void)
     144    {
     145        // Send countdown notification if the counter has gone down.
     146        if(!this->hasStarted() && this->isStartCountdownRunning() && !this->hasEnded())
     147            NotificationListener::sendNotification(multi_cast<std::string>(this->counter_), GametypeInfo::NOTIFICATION_SENDER);
     148    }
     149
     150    /**
     151    @brief
     152        Is called when a player has become ready to spawn.
     153    @param player
     154        The player that has become ready to spawn.
     155    */
     156    void GametypeInfo::changedReadyToSpawn(PlayerInfo* player)
     157    {
     158        // Send "Waiting for other players" over the network to the right player if a player has become ready to spawn.
     159        if(!this->hasStarted() && !this->isStartCountdownRunning() && !this->hasEnded())
     160            NotificationListener::sendNotification("Waiting for other players", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID());
     161        // Clear the notifications if the player has respawned.
     162        if(this->hasStarted() && !this->hasEnded())
     163            NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER, notificationSendMode::network, player->getClientID());
     164    }
     165
     166    /**
     167    @brief
     168        Inform the GametypeInfo that the game has started.
     169    */
     170    void GametypeInfo::start(void)
     171    {
     172        if(this->bStarted_)
     173            return;
     174       
     175        this->bStarted_ = true;
     176        this->changedStarted();
     177    }
     178
     179    /**
     180    @brief
     181        Inform the GametypeInfo that the game has ended.
     182    */
     183    void GametypeInfo::end(void)
     184    {
     185        if(this->bEnded_)
     186            return;
     187
     188        this->bEnded_ = true;
     189        this->changedEnded();
     190    }
     191
     192    /**
     193    @brief
     194        Set the start countdown to the input value.
     195    @param countdown
     196        The countdown to be set.
     197    */
     198    void GametypeInfo::setStartCountdown(float countdown)
     199    {
     200        if(this->startCountdown_ == countdown || countdown < 0.0f)
     201            return;
     202       
     203        this->startCountdown_ = countdown;
     204        // Set the counter to the ceiling of the current countdown.
     205        this->counter_ = ceil(countdown);
     206        this->changedCountdownCounter();
     207    }
     208
     209    /**
     210    @brief
     211        Count down the start countdown by the specified value.
     212    @param countDown
     213        The amount by which we count down.
     214    */
     215    void GametypeInfo::countdownStartCountdown(float countDown)
     216    {
     217        float newCountdown = this->startCountdown_ - countDown;
     218        // If we have switched integers or arrived at zero, we also count down the start countdown counter.
     219        if(ceil(newCountdown) != ceil(this->startCountdown_) || newCountdown <= 0.0f)
     220            this->countDown();
     221        this->startCountdown_ = newCountdown;
     222    }
     223
     224    /**
     225    @brief
     226        Count down the start countdown counter.
     227    */
     228    void GametypeInfo::countDown()
     229    {
     230        if(this->counter_ == 0)
     231            return;
     232       
     233        this->counter_--;
     234        this->changedCountdownCounter();
     235    }
     236
     237    /**
     238    @brief
     239        Inform the GametypeInfo about the start of the start countdown.
     240    */
     241    void GametypeInfo::startStartCountdown(void)
     242    {
     243        if(this->bStartCountdownRunning_)
     244            return;
     245       
     246        this->bStartCountdownRunning_ = true;
     247        this->changedStartCountdownRunning();
     248    }
     249
     250    /**
     251    @brief
     252        Inform the GametypeInfo about the stop of the start countdown.
     253    */
     254    void GametypeInfo::stopStartCountdown(void)
     255    {
     256        if(!this->bStartCountdownRunning_)
     257            return;
     258       
     259        this->bStartCountdownRunning_ = false;
     260        this->changedStartCountdownRunning();
     261    }
     262
     263    /**
     264    @brief
     265        Inform the GametypeInfo about a player that is ready to spawn.
     266    @param player
     267        The player that is ready to spawn.
     268    */
     269    void GametypeInfo::playerReadyToSpawn(PlayerInfo* player)
     270    {
     271        // If the player has spawned already.
     272        if(this->spawned_.find(player) != this->spawned_.end())
     273            return;
     274
     275        this->spawned_.insert(player);
     276        this->changedReadyToSpawn(player);
     277    }
     278
     279    /**
     280    @brief
     281        Inform the GametypeInfo about a player whose Pawn has been killed.
     282    @param player
     283        The player whose Pawn has been killed.
     284    */
     285    void GametypeInfo::pawnKilled(PlayerInfo* player)
     286    {
     287        NotificationListener::sendNotification("Press [Fire] to respawn", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID());
     288        // Remove the player from the list of players that have spawned, since it currently is not.
     289        this->spawned_.erase(player);
     290    }
     291
     292    /**
     293    @brief
     294        Inform the GametypeInfo about a player that has spawned.
     295    @param player
     296        The player that has spawned.
     297    */
     298    void GametypeInfo::playerSpawned(PlayerInfo* player)
     299    {
     300        if(this->hasStarted() && !this->hasEnded())
     301            NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER, notificationSendMode::network, player->getClientID());
    70302    }
    71303
Note: See TracChangeset for help on using the changeset viewer.