Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 2, 2013, 4:05:10 PM (11 years ago)
Author:
agermann
Message:

Docking funktioniert nun mit einem eingebauten Trigger ueber undocking XMLPort. Jedoch immer noch mit cmdUndock(). Forcefield wurde um eine homogenes Kraftfeld erweitert, dass Kugelfoermig und mit einer bestimmten Richtung gemacht werden kann.

Location:
code/branches/spacestationentry/src/modules
Files:
4 edited

Legend:

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

    r9820 r9857  
    6969        XMLPortObject(Dock, DockingAnimation, "animations", addAnimation, getAnimation, xmlelement, mode);
    7070        XMLPortEventSink(Dock, BaseObject, "execute", execute, xmlelement, mode);
    71         //XMLPortEventSink(Dock, BaseObject, "undocking", undocking, xmlelement, mode);
     71        XMLPortEventSink(Dock, BaseObject, "undocking", undocking, xmlelement, mode);
    7272
    7373    }
     
    7979        XMLPortEventSink(Dock, BaseObject, "execute", execute, xmlelement, mode);
    8080
    81         //XMLPortEventSink(Dock, BaseObject, "undocking", undocking, xmlelement, mode);
    82     }
    83 
    84     /*
     81        XMLPortEventSink(Dock, BaseObject, "undocking", undocking, xmlelement, mode);
     82    }
     83
     84
    8585    bool Dock::undocking(bool bTriggered, BaseObject* trigger)
    8686    {
    87         orxout(user_warning)<<"undocking"<<endl;
    88 
    89         return true;
    90     }
    91 
    92     */
     87        // Noch lange nicht fertig (leich veraenderte Kopie von execute())
     88        PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
     89                PlayerInfo* player = NULL;
     90
     91                // Check whether it is a player trigger and extract pawn from it
     92                if(pTrigger != NULL)
     93                {
     94                    if(!pTrigger->isForPlayer()) {  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
     95                        orxout(verbose, context::docking) << "Docking:execute PlayerTrigger was not triggered by a player.." << endl;
     96                        return false;
     97                    }
     98                    player = pTrigger->getTriggeringPlayer();
     99                }
     100                else
     101                {
     102                    orxout(verbose, context::docking) << "Docking::execute Not a player trigger, can't extract pawn from it.." << endl;
     103                    return false;
     104                }
     105                if(player == NULL)
     106                {
     107                    orxout(verbose, context::docking) << "Docking::execute Can't retrieve PlayerInfo from Trigger. (" << trigger->getIdentifier()->getName() << ")" << endl;
     108                    return false;
     109                }
     110
     111                if(bTriggered)
     112                {
     113                    cmdUndock();
     114                }
     115                else
     116                {
     117                    // Remove player from candidates list
     118                    candidates_.erase(player);
     119                }
     120
     121                return true;
     122    }
     123
     124
    93125
    94126    bool Dock::execute(bool bTriggered, BaseObject* trigger)
  • code/branches/spacestationentry/src/modules/docking/Dock.h

    r9820 r9857  
    6262            // Trigger interface
    6363            bool execute(bool bTriggered, BaseObject* trigger);
    64             //bool undocking(bool bTriggered, BaseObject* trigger);
     64            bool undocking(bool bTriggered, BaseObject* trigger);
    6565
    6666            // XML interface
  • code/branches/spacestationentry/src/modules/objects/ForceField.cc

    r9667 r9857  
    4545    /*static*/ const std::string ForceField::modeSphere_s = "sphere";
    4646    /*static*/ const std::string ForceField::modeInvertedSphere_s = "invertedSphere";
     47
     48    /*static*/ const std::string ForceField::modeHomogen_s = "homogen";
     49
    4750    /*static*/ const std::string ForceField::modeNewtonianGravity_s = "newtonianGravity";
    4851    /*static*/ const float ForceField::gravConstant_ = 6.673e-11;
    4952    /*static*/ const float ForceField::attenFactor_ = 1;
     53
    5054
    5155    /**
     
    8993        XMLPortParam(ForceField, "length", setLength  , getLength  , xmlelement, mode).defaultValues(2000);
    9094        XMLPortParam(ForceField, "mode", setMode, getMode, xmlelement, mode);
     95        XMLPortParam(ForceField, "forcedirection", setForceDirection, getForceDirection, xmlelement, mode).defaultValues(Vector3(0,-400,0));
    9196    }
    9297   
     
    196201            }
    197202        }
     203        else if(this->mode_ == forceFieldMode::homogen)
     204        {
     205                // Iterate over all objects that could possibly be affected by the ForceField.
     206                for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it)
     207                {
     208                        Vector3 distanceVector = it->getWorldPosition() - this->getWorldPosition();
     209                    float distance = distanceVector.length();
     210                    if (distance < this->radius_ && distance > this->massRadius_)
     211                    {
     212                        // Add a Acceleration in forceDirection_.
     213                        // Vector3(0,0,0) is the direction, where the force should work.
     214                        it->addAcceleration(forceDirection_ , Vector3(0,0,0));
     215                    }
     216                }
     217        }
    198218    }
    199219
     
    214234        else if(mode == ForceField::modeNewtonianGravity_s)
    215235            this->mode_ = forceFieldMode::newtonianGravity;
     236
     237        else if(mode == ForceField::modeHomogen_s)
     238            this->mode_ = forceFieldMode::homogen;
     239
    216240        else
    217241        {
     
    239263            case forceFieldMode::newtonianGravity:
    240264                return ForceField::modeNewtonianGravity_s;
     265
     266            case forceFieldMode::homogen:
     267                return ForceField::modeHomogen_s;
     268
    241269            default:
    242270                return ForceField::modeTube_s;
  • code/branches/spacestationentry/src/modules/objects/ForceField.h

    r9667 r9857  
     1
    12/*
    23 *   ORXONOX - the hottest 3D action shooter ever to exist
     
    5758            sphere, //!< The ForceField has a spherical shape.
    5859            invertedSphere, //!< The ForceField has a spherical shape but "inverted" behavior.
    59             newtonianGravity //!< The ForceField imitates Newtonian gravitation for use in stellar bodies.
     60            newtonianGravity, //!< The ForceField imitates Newtonian gravitation for use in stellar bodies.
     61            homogen //!< Local homogenous Force field with changeable direction for the Space Station
    6062        };
    6163    }
     
    6668
    6769        The following parameters can be set to specify the behavior of the ForceField.
     70        - @b forcedirection The direction and the strength of the homogenous force field. Default is 0,-400,0.
    6871        - @b velocity The amount of force the ForceField excerts. Default is 100.
    6972        - @b diameter The diameter of the ForceField. Default is 500.
     
    147150                { return this->halfLength_*2; }
    148151
     152            inline void setForceDirection(Vector3 forcedir)
     153                { this->forceDirection_ = forcedir; }
     154
     155            inline Vector3 getForceDirection()
     156                { return this->forceDirection_; }
     157
     158
    149159            void setMode(const std::string& mode); //!< Set the mode of the ForceField.
    150160            const std::string& getMode(void); //!< Get the mode of the ForceField.
     
    156166            static const std::string modeInvertedSphere_s;
    157167            static const std::string modeNewtonianGravity_s;
     168
     169            static const std::string modeHomogen_s;
    158170
    159171            float velocity_; //!< The velocity of the ForceField.
     
    167179            //! Attenuation factor for Newtonian ForceFields
    168180            static const float attenFactor_;
     181            Vector3 forceDirection_;
    169182  };
    170183}
Note: See TracChangeset for help on using the changeset viewer.