X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FAnimation%2FAnimation.hpp;fp=Source%2FAnimation%2FAnimation.hpp;h=b58f6ba5207d8054918e9f0c1c9c471d160b67ab;hb=ed3662c0852c4312a612b4fc35bd03aba8d13db7;hp=0000000000000000000000000000000000000000;hpb=b84825978803615f45a9f128232e62431042aec0;p=lugaru.git diff --git a/Source/Animation/Animation.hpp b/Source/Animation/Animation.hpp new file mode 100644 index 0000000..b58f6ba --- /dev/null +++ b/Source/Animation/Animation.hpp @@ -0,0 +1,100 @@ +/* +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +Lugaru is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Lugaru. If not, see . +*/ + +#ifndef _ANIMATION_HPP_ +#define _ANIMATION_HPP_ + +#include "Math/Quaternions.hpp" + +#include + +enum anim_attack_type { + neutral, normalattack, reversed, reversal +}; + +enum anim_height_type { + lowheight, middleheight, highheight +}; + +enum animation_types { +#define DECLARE_ANIM(id, ...) id, +#include "Animation.def" +#undef DECLARE_ANIM + animation_count +}; + +enum animation_bit_offsets { +#define DECLARE_ANIM_BIT(bit) o_##bit, +#include "Animation.def" +#undef DECLARE_ANIM_BIT + animation_bit_count +}; + +enum animation_bits_def { +#define DECLARE_ANIM_BIT(bit) bit = 1 << o_##bit, +#include "Animation.def" +#undef DECLARE_ANIM_BIT +}; + +static const int animation_bits[animation_count] = { +#define DECLARE_ANIM(id, name, height, type, bits) bits, +#include "Animation.def" +#undef DECLARE_ANIM +}; + +struct AnimationFrameJointInfo +{ + XYZ position; + float twist; + float twist2; + bool onground; +}; + +struct AnimationFrame +{ + void loadBaseInfo(FILE* tfile); + void loadTwist2(FILE* tfile); + void loadLabel(FILE* tfile); + void loadWeaponTarget(FILE* tfile); + + std::vector joints; + XYZ forward; + int label; + XYZ weapontarget; + float speed; +}; + +class Animation +{ +public: + static std::vector animations; + static void loadAll(); + + anim_height_type height; + anim_attack_type attack; + int numjoints; + + std::vector frames; + + XYZ offset; + + Animation(); + Animation(const std::string& fileName, anim_height_type aheight, anim_attack_type aattack); +}; +#endif