source: OGRE/trunk/ogrenew/OgreMain/src/OgreBone.cpp @ 692

Revision 692, 4.3 KB checked in by mattausch, 19 years ago (diff)

adding ogre 1.2 and dependencies

Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2005 The OGRE Team
8Also see acknowledgements in Readme.html
9
10This program is free software; you can redistribute it and/or modify it under
11the terms of the GNU Lesser General Public License as published by the Free Software
12Foundation; either version 2 of the License, or (at your option) any later
13version.
14
15This program is distributed in the hope that it will be useful, but WITHOUT
16ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
18
19You should have received a copy of the GNU Lesser General Public License along with
20this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21Place - Suite 330, Boston, MA 02111-1307, USA, or go to
22http://www.gnu.org/copyleft/lesser.txt.
23-----------------------------------------------------------------------------
24*/
25#include "OgreStableHeaders.h"
26
27#include "OgreBone.h"
28#include "OgreSkeleton.h"
29#include "OgreTagPoint.h"
30
31namespace Ogre {
32
33    //---------------------------------------------------------------------
34    Bone::Bone(unsigned short handle, Skeleton* creator)
35        : Node(), mHandle(handle), mManuallyControlled(false), mCreator(creator)
36    {
37    }
38    //---------------------------------------------------------------------
39    Bone::Bone(const String& name, unsigned short handle, Skeleton* creator)
40        : Node(name), mHandle(handle), mManuallyControlled(false), mCreator(creator)
41    {
42    }
43    //---------------------------------------------------------------------
44    Bone::~Bone()
45    {
46    }
47    //---------------------------------------------------------------------
48    Bone* Bone::createChild(unsigned short handle, const Vector3& translate,
49        const Quaternion& rotate)
50    {
51        Bone* retBone = mCreator->createBone(handle);
52        retBone->translate(translate);
53        retBone->rotate(rotate);
54        this->addChild(retBone);
55        return retBone;
56    }
57    //---------------------------------------------------------------------
58    Node* Bone::createChildImpl(void)
59    {
60        return mCreator->createBone();
61    }
62    //---------------------------------------------------------------------
63    Node* Bone::createChildImpl(const String& name)
64    {
65        return mCreator->createBone(name);
66    }
67    //---------------------------------------------------------------------
68    void Bone::setBindingPose(void)
69    {
70        setInitialState();
71
72        // Save inverse derived, used for mesh transform later (assumes _update() has been called by Skeleton)
73        mBindDerivedInverseTransform.makeInverseTransform(
74            _getDerivedPosition(),
75            _getDerivedScale(),
76            _getDerivedOrientation());
77    }
78    //---------------------------------------------------------------------
79    void Bone::reset(void)
80    {
81        resetToInitialState();
82    }
83    //---------------------------------------------------------------------
84    void Bone::setManuallyControlled(bool manuallyControlled)
85        {
86        mManuallyControlled = manuallyControlled;
87                mCreator->_notifyManualBoneStateChange(this);
88    }
89    //---------------------------------------------------------------------
90    bool Bone::isManuallyControlled() const {
91        return mManuallyControlled;
92    }
93    //---------------------------------------------------------------------
94    const Matrix4& Bone::_getBindingPoseInverseTransform(void) const
95    {
96        return mBindDerivedInverseTransform;
97    }
98    //---------------------------------------------------------------------
99    unsigned short Bone::getHandle(void) const
100    {
101        return mHandle;
102    }
103        //---------------------------------------------------------------------
104        void Bone::needUpdate(bool forceParentUpdate)
105        {
106                Node::needUpdate(forceParentUpdate);
107
108                if (isManuallyControlled())
109                {
110                        // Dirty the skeleton if manually controlled so animation can be updated
111                        mCreator->_notifyManualBonesDirty();
112                }
113
114        }
115
116
117
118
119
120}
121
Note: See TracBrowser for help on using the repository browser.