Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Aug 26, 2008, 5:03:24 PM (16 years ago)
Author:
bknecht
Message:

Only some minor changes in the Trigger. I need to acclimatize to coding first…

Location:
code/branches/script_trigger/src/orxonox/objects
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/branches/script_trigger/src/orxonox/objects/Trigger.cc

    r1550 r1671  
    3030
    3131#include "core/Debug.h"
     32#include <OgreBillboard.h>
    3233
    3334#include "core/CoreIncludes.h"
     35#include "core/ConsoleCommand.h"
    3436
    3537namespace orxonox
    3638{
     39
     40  ConsoleCommand(Trigger, setVisibility, AccessLevel::Debug, false).setDefaultValues(0);
     41
    3742  CreateFactory(Trigger);
    3843
     
    4348    targetMask_.exclude(Class(BaseObject));
    4449
    45     if (getSoftDebugLevel() >= ORX_DEBUG)
    46     {
    47       debugBillboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 0.0, 0.0), 1);
    48       this->getNode()->attachObject(debugBillboard_.getBillboardSet());
    49     }
     50    //testing
     51    mode_ = TM_EventTriggerAND;
     52    bActive_ = true;
     53    triggingTime_ = 100;
     54
     55    debugBillboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 0.0, 0.0), 1);
     56    this->getNode()->attachObject(debugBillboard_.getBillboardSet());
    5057  }
    5158
     
    5966  }
    6067
     68  void Trigger::setVisibility(int bVisible)
     69  {
     70    if(bVisible)
     71      this->setScale(2,2,2);
     72    else
     73      this->setScale(0,0,0);
     74  }
     75
     76  void Trigger::tick(float dt)
     77  {
     78    //COUT(0) << "Scale: " << this->getScale() << std::endl;
     79    if(bActive_)
     80    {
     81      //this->actualTime_ += dt;
     82      if(this->isTriggered())
     83      {
     84        this->debugBillboard_.getBillboardSet()->getBillboard(0)->setColour(ColourValue(0.0, 1.0, 0.0));
     85      }
     86    }
     87  }
     88
    6189  bool Trigger::isTriggered(TriggerMode mode)
    6290  {
    63     switch(mode)
    64     {
    65       case TM_EventTriggerAnd:
    66         return checkAnd();
    67         break;
    68       case TM_EventTriggerOr:
    69         return checkOr();
    70         break;
    71       case TM_DelayTrigger:
    72         return checkDelay();
    73         break;
    74       case TM_DistanceTrigger:
    75         return checkDistance();
    76         break;
    77       case TM_DistanceEventTriggerAnd:
    78         if (checkDistance() && checkAnd())
    79           return true;
    80         else
     91    if( children_.size() != 0 )
     92    {
     93      switch(mode)
     94      {
     95        case TM_EventTriggerAND:
     96          return checkAnd();
     97          break;
     98        case TM_EventTriggerOR:
     99          return checkOr();
     100          break;
     101        case TM_EventTriggerXOR:
     102          return checkXor();
     103          break;
     104        case TM_EventTriggerNOT:
     105          return checkNot();
     106          break;
     107        default:
    81108          return false;
    82         break;
    83       case TM_DistanceEventTriggerOr:
    84         if (checkDistance() && checkOr())
    85           return true;
    86         else
    87           return false;
    88         break;
    89       default:
    90         return false;
    91         break;
    92     }
     109          break;
     110      }
     111    }
     112    return true;
    93113  }
    94114
     
    101121  {
    102122    if (this != trig)
    103       this->subTriggers_.insert(trig);
     123      this->children_.insert(trig);
    104124  }
    105125
     
    121141  {
    122142    std::set<Trigger*>::iterator it;
    123     for(it = this->subTriggers_.begin(); it != this->subTriggers_.end(); it++)
     143    for(it = this->children_.begin(); it != this->children_.end(); it++)
    124144    {
    125145      if(!((*it)->isTriggered()))
     
    132152  {
    133153    std::set<Trigger*>::iterator it;
    134     for(it = this->subTriggers_.begin(); it != this->subTriggers_.end(); it++)
     154    for(it = this->children_.begin(); it != this->children_.end(); it++)
    135155    {
    136156      if((*it)->isTriggered())
     
    140160  }
    141161
    142   bool Trigger::checkDelay()
     162  bool Trigger::checkNot()
     163  {
     164    std::set<Trigger*>::iterator it;
     165    for(it = this->children_.begin(); it != this->children_.end(); it++)
     166    {
     167      if((*it)->isTriggered())
     168        return false;
     169    }
     170    return true;
     171  }
     172
     173  bool Trigger::checkXor()
     174  {
     175    std::set<Trigger*>::iterator it;
     176    bool test = false;
     177    for(it = this->children_.begin(); it != this->children_.end(); it++)
     178    {
     179      if(test && (*it)->isTriggered())
     180        return false;
     181      if((*it)->isTriggered())
     182        test = true;
     183    }
     184    return test;
     185  }
     186
     187  /*bool Trigger::checkDelay()
    143188  {
    144189    if (triggingTime_ < actualTime_)
     
    159204    return false;
    160205
    161   }
     206  }*/
    162207
    163208}
  • code/branches/script_trigger/src/orxonox/objects/Trigger.h

    r1550 r1671  
    4343  enum TriggerMode
    4444  {
    45     TM_EventTriggerAnd,
    46     TM_EventTriggerOr,
    47     TM_DelayTrigger,
    48     TM_DistanceTrigger,
    49     TM_DistanceEventTriggerAnd,
    50     TM_DistanceEventTriggerOr,
     45    TM_EventTriggerAND,
     46    TM_EventTriggerOR,
     47    TM_EventTriggerXOR,
     48    TM_EventTriggerNOT
    5149  };
    5250
     
    5553    public:
    5654      Trigger();
    57       Trigger(bool active) { bActive_ = active; }
    5855      ~Trigger();
    5956
     
    6360      void addTargets(std::string targets);
    6461      void removeTargets(std::string targets);
     62      void setVisibility(int bVisible);
    6563      virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
    6664      inline TriggerMode getMode() { return mode_; }
    6765      inline void setMode(TriggerMode mode) { this->mode_ = mode; }
    68       inline void tick(float dt) { if(bActive_) this->actualTime_ += dt; }
     66      void tick(float dt);
    6967      inline void reset(float time) { this->actualTime_ = 0; this->triggingTime_ = time; }
    7068      inline void reset() { reset(triggingTime_); }
     
    7371      bool checkAnd();
    7472      bool checkOr();
    75       bool checkDelay();
    76       bool checkDistance();
     73      bool checkXor();
     74      bool checkNot();
    7775
    7876    private:
    79       std::set<Trigger*> subTriggers_;
     77      std::set<Trigger*> children_;
    8078      TriggerMode mode_;
    8179      float triggingTime_;
Note: See TracChangeset for help on using the changeset viewer.