1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-16 08:49:55 +00:00
Commit graph

328 commits

Author SHA1 Message Date
Chris Robinson
d208422ca7 Add a method to update an Animation's Ptr object 2013-02-23 10:12:36 -08:00
Chris Robinson
0d0e75fe0b Don't set animation sources for models that don't have a skeleton 2013-02-23 07:36:11 -08:00
Chris Robinson
e6da9dfae5 Specify the animation key to stop playing at 2013-02-23 05:15:10 -08:00
Chris Robinson
b8f5813609 Set all animation sources at once 2013-02-23 03:34:03 -08:00
Chris Robinson
9dee2a72cd Use a separate method to calculate animation velocity 2013-02-22 09:22:06 -08:00
Chris Robinson
617158afcd Ensure updated skeleton bone placement matches in world space
Objects attached to actors (shirts, robes, etc) do not require the same node
hierarchy as the character root. So to ensure proper placement, we need to set
the bone target's derived transformation using the source bone's derived
transformation (which in turn means we need to work up from the root, to ensure
the bone's parents are properly placed).
2013-02-20 02:41:46 -08:00
Chris Robinson
8196694c08 Avoid applying the animation when resetting it 2013-02-19 06:04:25 -08:00
Chris Robinson
f8349a04bf Use the looping portion of the animation to calculate the velocity 2013-02-19 05:26:58 -08:00
Chris Robinson
1399a06c76 Update animation looping when setting the same state 2013-02-19 04:01:33 -08:00
Chris Robinson
ff0099fa6e Scale the animation speed based on the animation velocity and movement speed
This may not be totoally correct since it takes the whole animation into
account, rather than just the looping portion. But it's good enough for now.
2013-02-15 02:15:39 -08:00
Chris Robinson
4ee5857bae Filter accumulation axis for mLastPosition as needed 2013-02-09 19:09:56 -08:00
Chris Robinson
8d6f017f17 Remove an unneeded Animation field 2013-02-09 13:25:39 -08:00
Chris Robinson
18b7008409 Better fix some scaling issues 2013-02-05 18:25:09 -08:00
Chris Robinson
8b1e7b95ba Attempt to load the skeleton source if it doesn't yet exist 2013-02-05 17:55:12 -08:00
Chris Robinson
054ef3113a Check existing skeleton sources if the current one has no animation root 2013-02-05 17:15:40 -08:00
Chris Robinson
16933e3926 Scale the accumulation root translation 2013-02-05 16:59:20 -08:00
Chris Robinson
600fe06f00 Use a vector of skeletons to handle animation sources 2013-02-05 16:29:51 -08:00
Chris Robinson
23acf4b130 Don't break right away when the animation time remaining is 0 2013-02-03 01:38:42 -08:00
Chris Robinson
fc7590694d Revert "Revert "Use a child scene node for the accumulation root""
This reverts commit 376dfed15b.

I was wrong. It's needed at least for NPCs since they're attaching multiple
animated skeletons to an object, and they all need to be offset correctly.

Would be nice to use a Node, Bone, or TagPoint instead of a hefty SceneNode,
though.
2013-02-02 05:43:37 -08:00
Chris Robinson
376dfed15b Revert "Use a child scene node for the accumulation root"
This reverts commit d6f923f274.

We don't need it for any of the NIFs we're currently handling. As long as
there's no NIF files that would break it, we should require a stationary root
if an animation wants to accumulate. If we must, a better idea may be to inject
an extra bone into the skeleton instance and make that the accumulation root.
2013-02-01 08:50:32 -08:00
Chris Robinson
d6f923f274 Use a child scene node for the accumulation root 2013-01-30 22:28:18 -08:00
Chris Robinson
b6354c6282 Don't share skeleton instances between bounded parts on an NPC
However, a skeleton instance will still be shared between entities in an entity
list.
2013-01-30 09:29:16 -08:00
Chris Robinson
5c3a7f7d52 Avoid handling animation states
We don't need them anymore
2013-01-30 07:34:07 -08:00
Chris Robinson
360f7bfac8 Apply animations to bones manually
Couple reasons for this:

* This paves the way for allowing animations specified in other skeletons to
be applied to the character (NPCs and certain creatures can have multiple
animation sources, but Ogre is incredibly strict when it comes to sharing
animations between skeletons).

* It will allow for entities to be animated based on the character's skeleton,
without having to duplicate the mesh for each skeleton it can be used on.

This doesn't impact Ogre's ability to efficiently deform skinned meshes, nor
does it get in the way of hardware skinning.
2013-01-30 07:04:18 -08:00
Chris Robinson
99efe4e494 Remove an unnecessary class member 2013-01-29 01:02:55 -08:00
Chris Robinson
879359f39d Set the animation state loop flag as appropriate 2013-01-29 00:50:52 -08:00
Chris Robinson
92d0c55f32 Add a flag to specify if an animation should be playing 2013-01-29 00:43:42 -08:00
Chris Robinson
7df4d0d19f Remove an unnecessary cast 2013-01-28 21:41:51 -08:00
Chris Robinson
b1ffdf855f Reset the initial state of animated nodes on the skeleton instances
This is so the animation specifies node keyframe data based on the node's
parent. This will also be necessary for applying animations from different
skeleton sources, as they can have different binding positions (even native
.skeleton resources will need to specify animation data this way).
2013-01-26 04:48:53 -08:00
Chris Robinson
05f8b8c283 Specify the text key to reset animations to 2013-01-22 00:31:45 -08:00
Chris Robinson
37fe1bd3f0 Handle looping in the Animation object 2013-01-21 22:51:13 -08:00
Chris Robinson
536f8104e6 Do not create an 'all' animation. 2013-01-20 17:24:43 -08:00
Chris Robinson
e1e76bde76 Combine a loop into another where it's used 2013-01-20 15:39:43 -08:00
Chris Robinson
85ca1e993f Properly check if an animation exists before playing it 2013-01-19 21:55:04 -08:00
Chris Robinson
0b68953f0d Scale animation speed using the direction length
The direction length doesn't currently give a good speed, but it's something.
2013-01-18 21:40:47 -08:00
Chris Robinson
1cdd64cd9b Return the animation movement from the character controller.
Consequently, dead actors don't move anymore. The doPhysics call apparently
isn't moving them.
2013-01-18 17:05:58 -08:00
Chris Robinson
9123f4f2af Return the movement vector from runAnimation 2013-01-18 16:21:29 -08:00
Chris Robinson
c7684cb979 Pass the key time to markerEvent 2013-01-18 14:50:55 -08:00
Chris Robinson
3e9b0a333c Allow specifying the accumulation for animations
Animations that move a character may do so either visually or physically. An
axis' accumuluation value specifies whether the movement is visual (0) or
physical (1). Idle animations, for instance, typically don't physically move a
character, while death animations may physically move them along the X and Y
planes, but not along Z (the vertical movement is purely visual).
2013-01-18 14:25:32 -08:00
Chris Robinson
fef6284f15 Only reset the animation time if a new state was set 2013-01-17 15:47:25 -08:00
Chris Robinson
fc0f9e2159 The animation state tracks the animation time for us 2013-01-17 14:49:42 -08:00
Chris Robinson
7cce44290e Handle the animation queue in mwmechanics 2013-01-17 13:18:40 -08:00
Chris Robinson
82d549e22f Don't update the animation if time is the same 2013-01-16 21:39:14 -08:00
Chris Robinson
7ee389f3b2 Handle animation skipping in the character controller 2013-01-16 21:25:50 -08:00
Chris Robinson
852aa214cc Store the available animation names in the character controller 2013-01-16 21:16:22 -08:00
Chris Robinson
4dd01b81c6 Update mTime when updating or reseting the animation, and refactor the animation loop 2013-01-16 20:14:49 -08:00
Chris Robinson
3c32385e17 Avoid trying to animate things that don't have animations 2013-01-16 15:00:06 -08:00
Chris Robinson
94b93227d3 Treat activators as actors for rendering and mechanics
Kinda hacky, but it's the only way to get animated activators (flags, silt
striders, etc) to work properly.
2013-01-16 14:37:32 -08:00
Chris Robinson
d2fc3c7b33 Add a method to tell the character controller of new text keys 2013-01-16 13:09:21 -08:00
Chris Robinson
0a2f92f679 Keep track of the current text key in the animation 2013-01-16 11:57:08 -08:00
Chris Robinson
f46587c383 Store an character controller in the animation 2013-01-16 11:01:08 -08:00
Chris Robinson
c4c8295e0b Rename NIFLoader to Loader, and update some comments 2013-01-09 09:10:59 -08:00
Chris Robinson
1e38e381a4 Use text keys for each animation 2013-01-09 03:30:55 -08:00
Chris Robinson
bb98542c5a Build separate animations for each group 2013-01-09 01:40:38 -08:00
Chris Robinson
e44729cd43 Make the text keys lower-case when extracting them
I think it's safe to assume all text keys are treated in a case-insensitive
manner. So far the only known NiTextKeyExtraData records are for animation
keys, which effectively are.
2013-01-09 00:17:42 -08:00
Chris Robinson
2a9dc5ad94 Ensure mCurGroup always has valid iterators, and only get the animation state when animation keys exist 2013-01-07 21:00:21 -08:00
Chris Robinson
d8dbd5e206 Store text key iterators for the start and stop times 2013-01-07 05:56:03 -08:00
Chris Robinson
d3e949f5c6 Make the animation text keys lower case to help lookup 2013-01-07 05:23:44 -08:00
Chris Robinson
5f668976a8 Improve resetting the animation position 2013-01-07 04:48:59 -08:00
Chris Robinson
648e3331f5 Don't try to move objects that aren't in a cell 2013-01-06 23:20:20 -08:00
Chris Robinson
5b3a20ef69 Update the object position as the animation moves 2013-01-06 21:18:48 -08:00
Chris Robinson
910619eb21 Store the NonAccum animation root from the skeleton instance
Currently this is assumed to be the node with the animation text keys.
2013-01-06 17:31:53 -08:00
Chris Robinson
b96a979719 Store an MWWorld::Ptr with the Animation 2013-01-06 17:05:48 -08:00
Chris Robinson
58d35dbfcf Have createEntities' caller retrieve the text keys as needed 2013-01-05 04:01:11 -08:00
Chris Robinson
818a24cdd6 Hold on to the AnimationState being used for animating 2013-01-05 00:03:14 -08:00
Chris Robinson
6e84d4bcdd Add a helper method to load entity objects 2013-01-04 23:19:48 -08:00
greye
50867e8d87 fix gender selection update, main model visibility and couple of crashes 2012-11-10 19:57:50 +04:00
Chris Robinson
41f80908d9 Simplify getting the stop time when playing all animation groups 2012-09-29 01:10:49 -07:00
Chris Robinson
cd8515396a Use a multimap to store the text keys 2012-09-28 23:20:15 -07:00
scrawl
2793096b50 Merge branch 'externalrendering' of https://github.com/zinnschlag/openmw into characterpreview
Conflicts:
	apps/openmw/CMakeLists.txt
	apps/openmw/mwbase/world.hpp
	apps/openmw/mwrender/renderingmanager.cpp
	apps/openmw/mwrender/renderingmanager.hpp
	apps/openmw/mwworld/worldimp.cpp
	apps/openmw/mwworld/worldimp.hpp
2012-09-15 00:57:29 +02:00
Chris Robinson
9f0c1eeb7b Support playgroup mode 0 2012-07-24 14:54:12 -07:00
Chris Robinson
13ab2baef0 Use a struct to hold the current animation times and remaining loop count 2012-07-24 14:42:01 -07:00
Chris Robinson
fd1e3f6ec5 Add support for playgroup mode 2 2012-07-24 14:14:32 -07:00
Chris Robinson
20121f3b0a Remove some unused stuff 2012-07-24 13:56:28 -07:00
Chris Robinson
9a7a629d0f Add support for playing animation groups 2012-07-24 13:51:48 -07:00
Chris Robinson
77446a0d58 Fix skipAnim, only skip one animation update 2012-07-21 17:39:57 -07:00
Chris Robinson
81ce8dbe12 Combine animation handling into the base class 2012-07-21 14:41:26 -07:00
Chris Robinson
2db80a1504 Rename a couple methods to match their scripting counterparts 2012-07-20 00:53:12 -07:00
Chris Robinson
66860825cf Remove some unused and unneeded bits from the Animation class 2012-07-20 00:36:52 -07:00
Chris Robinson
02d39080c8 Destroy entities when they're done with. 2012-07-18 00:17:39 -07:00
Chris Robinson
0a4a141f2e Support multiple meshes for creatures 2012-07-17 11:23:34 -07:00
Chris Robinson
6047dc6a0c Merge remote branch 'zini/master' into nif-cleanup
Conflicts:
	apps/openmw/mwrender/animation.cpp
	apps/openmw/mwrender/animation.hpp
	apps/openmw/mwrender/creatureanimation.cpp
	apps/openmw/mwrender/npcanimation.cpp
	apps/openmw/mwrender/npcanimation.hpp
	components/nifogre/ogre_nif_loader.hpp
2012-07-17 10:57:15 -07:00
Carl Maxwell
e4d046f69c Prepending m to the name of every member variable.
I made a bunch of changes in apps/openmw/mwrender/animation.cpp
because the scope brackets didn't line up in a bunch of places
    npcanimations.cpp & creatureanimations.cpp were the same kind of
thing
2012-07-13 03:51:58 -07:00
Chris Robinson
ecdd4ee23f Load NiMorphData and NiKeyframeData using proper key lists 2012-07-12 20:56:47 -07:00
Chris Robinson
386ac56bda Remove the NIF loader and code to manually transform the vertices
This currently breaks just about everything. They should come back as it's all
reimplemented, though.
2012-07-12 20:12:18 -07:00
Marc Zinnschlag
c85aaafac2 more include cleanup (most removing Ogre.h) 2012-07-03 15:32:38 +02:00
Marc Zinnschlag
35f478071e Issue #255: deleted the old environment class and using the new one instead 2012-04-23 15:27:03 +02:00
Jason Hooks
bc8bb9c57e Reserve; skirts 2012-04-15 14:22:55 -04:00
Jason Hooks
ebab98a8a0 Restructuring things 2012-04-07 22:02:20 -04:00
Lukasz Gromanowski
bdc4c79b4e Fix for segfault when doing 'coc "seyda neen"'.
This is a fix for segfault:

==8683== Process terminating with default action of signal 11 (SIGSEGV)
==8683==  Access not within mapped region at address 0x0
==8683==    at 0x59DFE4: MWRender::Animation::handleShapes(std::vector<Nif::NiTriShapeCopy, std::allocator<Nif::NiTriShapeCopy> >*, Ogre::Entity*, Ogre::SkeletonInstance*) (animation.cpp:503)
==8683==    by 0x5A4ECE: MWRender::Actors::update(float) (actors.cpp:134)
==8683==    by 0x5937A9: MWRender::RenderingManager::update(float) (renderingmanager.cpp:168)
==8683==    by 0x629AD6: MWWorld::World::update(float) (world.cpp:705)
==8683==    by 0x68B022: OMW::Engine::frameRenderingQueued(Ogre::FrameEvent const&) (engine.cpp:157)
==8683==    by 0x51F9574: Ogre::Root::_fireFrameRenderingQueued(Ogre::FrameEvent&) (in /usr/lib/libOgreMain.so.1.8.0)
==8683==    by 0x51F964F: Ogre::Root::_fireFrameRenderingQueued() (in /usr/lib/libOgreMain.so.1.8.0)
==8683==    by 0x51F9681: Ogre::Root::_updateAllRenderTargets() (in /usr/lib/libOgreMain.so.1.8.0)
==8683==    by 0x51F98CF: Ogre::Root::renderOneFrame() (in /usr/lib/libOgreMain.so.1.8.0)
==8683==    by 0x51F990C: Ogre::Root::startRendering() (in /usr/lib/libOgreMain.so.1.8.0)
==8683==    by 0x68A669: OMW::Engine::go() (engine.cpp:408)
==8683==    by 0x51CECB: main (main.cpp:254)
==8683==  If you believe this happened as a result of a stack
==8683==  overflow in your program's main thread (unlikely but
==8683==  possible), you can try to increase the size of the
==8683==  main thread stack using the --main-stacksize= flag.
==8683==  The main thread stack size used in this run was 8388608.

when doing 'coc "seyda neen"' when animations are enabled
(Animation::animate member variable is set to 1).
2012-03-31 21:34:40 +02:00
Lukasz Gromanowski
5185a28b60 Issue #225: Initialize all class members in constructor. 2012-03-26 19:09:55 +02:00
Marc Zinnschlag
5b378e820d warning level adjustments and some related fixes 2012-03-15 16:01:41 +01:00
Jason Hooks
39ff8d6a01 Compile error retry 2012-03-06 18:28:41 -05:00
Jason Hooks
9848b67174 Fixing errors 2012-03-05 17:46:29 -05:00
Jason Hooks
36e9322830 a few changes2 2012-02-26 21:43:04 -05:00
Jason Hooks
8d7a5f469b a few changes 2012-02-26 21:27:54 -05:00
Jason Hooks
08f3ecf935 Slightly better performance on animation2 2012-02-24 01:30:17 -05:00
Jason Hooks
fb51b281b2 Slightly better performance on animation 2012-02-24 01:16:30 -05:00
Marc Zinnschlag
7eae24bb45 some fixes 2012-02-20 14:02:24 +01:00
Jason Hooks
7e1e746201 More changes 2012-02-19 17:59:50 -05:00
Jason Hooks
e58f2f5363 Eliminating unnecessary data from skeletons and shape saving 2012-02-19 02:01:15 -05:00
Jason Hooks
1da519a914 Some cleanup 2012-01-29 00:42:55 -05:00
Jason Hooks
6de0847b86 Slightly better performance on animation 2012-01-25 01:21:30 -05:00
Jason Hooks
e35aee0f89 Disjointed free part fix 2012-01-13 02:19:28 -05:00
Jason Hooks
41769f202c Huge Performance Increase 2012-01-13 00:48:52 -05:00
Jason Hooks
0712bba49b Changing a few things around with handleshapes 2012-01-12 16:03:07 -05:00
Jason Hooks
5e1cc07ee8 Fixed ancestor ghost crash 2012-01-10 02:00:04 -05:00
Jason Hooks
a615369189 Warning and different physics 2012-01-06 22:52:15 -05:00
Jason Hooks
295eb27c2d Better Text Indices; Better file output 2012-01-06 18:23:41 -05:00
Jason Hooks
859ac1153e Basic Text Indices Working 2012-01-06 02:27:10 -05:00
Jason Hooks
595d0b1192 Cleanup; warnings 2012-01-05 21:45:17 -05:00
Jason Hooks
c2fa82326d Animation with physics attempt 2012-01-04 23:48:25 -05:00
Jason Hooks
45c57721ff Turning off hardware skinning2 2012-01-04 20:30:06 -05:00
Jason Hooks
1d2e77d947 Turning off hardware skinning 2012-01-04 19:47:06 -05:00
Jason Hooks
a4c6d948d4 Disabling normal updates 2012-01-01 20:51:26 -05:00
Jason Hooks
42e7ff9b13 Introducing loops; SkipAnim; Skeleton reset bug fixed 2011-12-28 21:52:05 -05:00
Jason Hooks
c8cca06b40 unlocking change and stop change 2011-12-28 17:34:47 -05:00
Jason Hooks
8c3127367a Npc Optimization 2011-12-27 22:35:22 -05:00
Jason Hooks
c399f4f210 Fixing a few things 2011-12-27 17:12:47 -05:00
Jason Hooks
a6b88b48ec A different way 2011-12-27 00:20:14 -05:00
Jason Hooks
653d999ac4 Animation creatures 2011-12-26 19:23:46 -05:00
Jason Hooks
88c427543b Deleting animations; Empty Functions/Planning 2011-12-25 22:37:26 -05:00
Jason Hooks
7cf3fc8991 handleAnimationTransforms 2011-12-18 03:18:26 -05:00
Jason Hooks
6d10c76b06 Unique Identifiers for Creatures and NPC Free Parts 2011-12-17 01:29:08 -05:00
Jason Hooks
93a4060346 Switching handleShapes to use sets instead of maps 2011-12-15 00:41:44 -05:00
Jason Hooks
d51dfebde1 NPCs fully rendered 2011-12-15 00:33:10 -05:00
Jason Hooks
509009e5c1 Putting the actors in a list 2011-12-11 23:42:39 -05:00
Jason Hooks
16ff2a7a1b Changing to Actors;NPCAnimation;CreatureAnimation 2011-11-24 01:48:54 -05:00