Anim.h
#pragma once
#include <vector>
using namespace std;
const int MLOOP = -1;
const int MSTOP = -2;
const int MEND = -3;
enum MOTION_NAME{
STAND,WALK,JUMPUP,JUMPDOWN,LAND
};
class CMotion {
public:
int No;
int Time;
};
class CAnim {
public:
int AnimIndex, MotionType,PrevMotion;
float AnimCnt;
CAnim(const CMotion* motion, int col, int row);
vector<vector<CMotion>> WMotion;
vector<CMotion> VMotion;
void Animation(float anim_spped);
void MotionChange(int motion);
int GetAnimNo() const { return WMotion[MotionType][AnimIndex].No; }
};
#include "Anim.h"
CAnim::CAnim(const CMotion* motion, int col, int row)
:AnimIndex(0),MotionType(0), AnimCnt(0.0F),PrevMotion(-1){
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
VMotion.push_back(motion[i*row + j]);
}
WMotion.push_back(VMotion);
VMotion.clear();
}
}
void CAnim::Animation(float anim_spped) {
AnimCnt += anim_spped;
if (AnimCnt > WMotion[MotionType][AnimIndex].Time) {
AnimCnt = 0;
AnimIndex++;
if (WMotion[MotionType][AnimIndex].No == MLOOP) {
AnimIndex = 0;
}
else if (WMotion[MotionType][AnimIndex].No == MEND) {
MotionType = 0;
AnimIndex = 0;
}
else if (WMotion[MotionType][AnimIndex].No == MSTOP) {
AnimIndex--;
}
else {
}
}
}
void CAnim::MotionChange(int motion) {
//前と同じなら変更なし。
if (motion == PrevMotion) return;
motion = PrevMotion;
// 前と同じモーションなら変更しない
if (motion == PrevMotion) return;
PrevMotion = motion;
//モーション変更の特殊条件
//ジャンプモーションから立ちモーションへの直接移行はない
if ((MotionType == JUMPUP || MotionType == JUMPDOWN || MotionType == LAND || MotionType == STAND) &&
motion == STAND) return;
if (MotionType == JUMPUP && motion == WALK) return;
AnimIndex = 0;
AnimCnt = 0;
MotionType = motion;
}
なんとか治そうと列挙体について調べてみたのですが、よくわからないと言うのもあります。
どうすればいいのでしょうか?
※コードは一部のみなので単体では動きません。