Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 2, 2011, 4:16:27 PM (13 years ago)
Author:
sven
Message:

Added dock/undock console commands.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/dockingsystem2/src/modules/docking/Dock.cc

    r8257 r8382  
    3333
    3434#include "Dock.h"
     35
    3536#include "infos/HumanPlayer.h"
    3637#include "worldentities/pawns/Pawn.h"
    3738#include "interfaces/PlayerTrigger.h"
     39#include "controllers/HumanController.h"
     40#include "core/command/ConsoleCommand.h"
     41
    3842
    3943
     
    4145{
    4246    CreateFactory(Dock);
     47
     48    SetConsoleCommand("Dock", "dock",    &Dock::cmdDock).addShortcut().setAsInputCommand();
     49    SetConsoleCommand("Dock", "undock",  &Dock::cmdUndock).addShortcut().setAsInputCommand();
    4350
    4451    Dock::Dock(BaseObject* creator) : StaticEntity(creator)
     
    8087        {
    8188            if(!pTrigger->isForPlayer()) {  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
    82                 COUT(0) << "Docking:execute PlayerTrigger was not triggered by a player.." << std::endl;
     89                COUT(2) << "Docking:execute PlayerTrigger was not triggered by a player.." << std::endl;
    8390                return false;
    8491            }
    8592            pawn = pTrigger->getTriggeringPlayer();
    8693        } else {
    87             COUT(0) << "Docking::execute Not a player trigger, can't extract pawn from it.." << std::endl;
     94            COUT(2) << "Docking::execute Not a player trigger, can't extract pawn from it.." << std::endl;
    8895            return false;
    8996        }
    9097        if(pawn == NULL)
    9198        {
    92             COUT(0) << "Docking::execute Can't retrieve Pawn from Trigger. (" << trigger->getIdentifier()->getName() << ")" << std::endl;
     99            COUT(2) << "Docking::execute Can't retrieve Pawn from Trigger. (" << trigger->getIdentifier()->getName() << ")" << std::endl;
    93100            return false;
    94101        }
     
    98105        if(player == NULL)
    99106        {
    100             COUT(0) << "The PlayerInfo* is NULL." << std::endl;
     107            COUT(2) << "The PlayerInfo* is NULL." << std::endl;
    101108            return false;
    102109        }
     
    105112
    106113        if(bTriggered) {
    107             DockingEffect::invokeEffect(docking::DOCKING, player, effects_);
    108             DockingEffect::invokeEffect(docking::ATTACH, player, effects_);
     114            // Add player to this Docks candidates
     115            candidates.insert(player);
     116
     117            //DockingEffect::invokeEffect(docking::DOCKING, player, effects_);
    109118        } else {
    110             DockingEffect::invokeEffect(docking::RELEASE, player, effects_);
     119            // Remove player from candidates list
     120            candidates.erase(player);
     121
     122            //DockingEffect::invokeEffect(docking::RELEASE, player, effects_);
    111123        }
    112124
     
    115127
    116128
     129    void Dock::cmdDock() {
     130        PlayerInfo* player = HumanController::getLocalControllerSingleton()->getPlayer();
     131        for(ObjectList<Dock>::iterator it = ObjectList<Dock>::begin(); it != ObjectList<Dock>::end(); ++it) {
     132            if(it->dock(player))
     133                break;
     134        }
     135    }
     136
     137    void Dock::cmdUndock() {
     138        PlayerInfo* player = HumanController::getLocalControllerSingleton()->getPlayer();
     139        for(ObjectList<Dock>::iterator it = ObjectList<Dock>::begin(); it != ObjectList<Dock>::end(); ++it) {
     140            if(it->undock(player))
     141                break;
     142        }
     143    }
     144
     145
     146    bool Dock::dock(PlayerInfo* player) {
     147        // Check if player is a candidate
     148        if(candidates.find(player) == candidates.end()) {
     149            COUT(0) << "Player is not a candidate!";
     150            return false;
     151        }
     152
     153        // Remove player from candidates, add to docked players and invoke docking effect
     154        candidates.erase(player);
     155        docked.insert(player);
     156        DockingEffect::invokeEffect(docking::ATTACH, player, effects);
     157        return true;
     158    }
     159
     160    bool Dock::undock(PlayerInfo* player) {
     161        // Check if player is docked to this Dock
     162        if(docked.find(player) == docked.end()) {
     163            COUT(0) << "Player is not docked to this Dock." << std::endl;
     164            return false;
     165        }
     166
     167        // Remove player from docked, add to candidates and reverse DockingEffect
     168        docked.erase(player);
     169        candidates.insert(player);
     170        DockingEffect::invokeEffect(docking::RELEASE, player, effects);
     171        return true;
     172    }
     173
     174
    117175    bool Dock::addEffect(DockingEffect* effect) {
    118176        assert(effect);
    119         effects_.push_back(effect);
     177        effects.push_back(effect);
    120178        return true;
    121179    }
     
    123181    const DockingEffect* Dock::getEffect(unsigned int index) const {
    124182        int i = index;
    125         for (std::list<DockingEffect*>::const_iterator effect = this->effects_.begin(); effect != this->effects_.end(); ++effect)
    126         {
     183        for (std::list<DockingEffect*>::const_iterator effect = this->effects.begin(); effect != this->effects.end(); ++effect) {
    127184            if(i == 0)
    128185               return *effect;
    129 
    130186            i--;
    131187        }
Note: See TracChangeset for help on using the changeset viewer.