Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 13, 2009, 11:21:40 AM (14 years ago)
Author:
rgrieder
Message:

Resolved projectile targeting problem by introducing a ClassTreeMask. It's a bit hacky but currently I don't see another quick way.
There is a problem though: The weapons aim into other directions while rolling the space ship…
I just couldn't figure it out.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/steering/src/orxonox/weaponsystem/WeaponMode.cc

    r5929 r6055  
    3232#include "core/CoreIncludes.h"
    3333#include "core/XMLPort.h"
     34#include "controllers/Controller.h"
     35#include "worldentities/pawns/Pawn.h"
    3436
    3537#include "Munition.h"
     
    194196    }
    195197
    196     Vector3 WeaponMode::getMuzzlePosition() const
     198    void WeaponMode::computeMuzzleParameters()
    197199    {
    198200        if (this->weapon_)
    199             return (this->weapon_->getWorldPosition() + this->weapon_->getWorldOrientation() * this->muzzleOffset_);
    200         else
    201             return this->muzzleOffset_;
    202     }
    203 
    204     const Quaternion& WeaponMode::getMuzzleOrientation() const
     201        {
     202            this->muzzlePosition_ = this->weapon_->getWorldPosition() + this->weapon_->getWorldOrientation() * this->muzzleOffset_;
     203
     204            Controller* controller = this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getController();
     205            if (controller->canFindTarget())
     206            {
     207                Vector3 muzzleDirection(controller->getTarget() - this->muzzlePosition_);
     208                this->muzzleOrientation_ = this->weapon_->getWorldOrientation() * (this->weapon_->getWorldOrientation() * WorldEntity::FRONT).getRotationTo(muzzleDirection);
     209            }
     210            else
     211                this->muzzleOrientation_ = this->weapon_->getWorldOrientation();
     212        }
     213        else
     214        {
     215            this->muzzlePosition_ = this->muzzleOffset_;
     216            this->muzzleOrientation_ = Quaternion::IDENTITY;
     217        }
     218    }
     219
     220    Vector3 WeaponMode::getMuzzleDirection() const
    205221    {
    206222        if (this->weapon_)
    207             return this->weapon_->getWorldOrientation();
    208         else
    209             return Quaternion::IDENTITY;
    210     }
    211 
    212     Vector3 WeaponMode::getMuzzleDirection() const
    213     {
    214         if (this->weapon_)
    215             return (this->weapon_->getWorldOrientation() * WorldEntity::FRONT);
     223            return (this->getMuzzleOrientation() * WorldEntity::FRONT);
    216224        else
    217225            return WorldEntity::FRONT;
Note: See TracChangeset for help on using the changeset viewer.