Commit 31681324 authored by 16이상민's avatar 16이상민 Committed by rightright

모션 모두 추가

parent 6e0695fb
fileFormatVersion: 2
guid: 85bafbe9b14b18b45b445b304b1f3efc
timeCreated: 18446744011573954816
PluginImporter:
serializedVersion: 2
iconMap: {}
......
fileFormatVersion: 2
guid: b65facb0c9c68b647b8ca7435b5f35c4
timeCreated: 18446744011573954816
PluginImporter:
serializedVersion: 2
iconMap: {}
......
fileFormatVersion: 2
guid: 82e143d16729051459ae6a54b37e9eab
timeCreated: 18446744011573954816
PluginImporter:
serializedVersion: 2
iconMap: {}
......
......@@ -10,6 +10,12 @@ public class MotionView : MonoBehaviour {
public GameObject CoordinateMapperManager;
CoordinateMapperManager _coordinateMapperManager;
Body[] body;
CameraSpacePoint spineMidRecent,
handLeftRecent,
handRightRecent,
kneeLeftBase,
kneeRightBase;
bool IsInitialized;
// Use this for initialization
void Start () {
......@@ -25,6 +31,8 @@ public class MotionView : MonoBehaviour {
= CoordinateMapperManager.GetComponent<CoordinateMapperManager>();
body = _coordinateMapperManager.GetBodyBuffer();
IsInitialized = false;
}
// Update is called once per frame
......@@ -38,7 +46,10 @@ public class MotionView : MonoBehaviour {
MotionState DetermineState()
{
if (body == null)
return MotionState.UNKNOWN;
{
IsInitialized = false;
return MotionState.UNKNOWN;
}
int idx;
for(idx = 0; idx < body.Length; ++idx)
......@@ -47,26 +58,104 @@ public class MotionView : MonoBehaviour {
if(idx == body.Length || body[idx].Joints == null)
return MotionState.UNKNOWN;
CameraSpacePoint head = body[idx].Joints[JointType.Head ]
if (!IsInitialized)
{
kneeLeftBase = body[idx].Joints[JointType.KneeLeft ].Position;
kneeRightBase = body[idx].Joints[JointType.KneeRight].Position;
}
IsInitialized = true;
CameraSpacePoint head = body[idx].Joints[JointType.Head ]
.Position,
leftHand = body[idx].Joints[JointType.HandLeft ]
handLeft = body[idx].Joints[JointType.HandLeft ]
.Position,
rightHand = body[idx].Joints[JointType.HandRight]
handRight = body[idx].Joints[JointType.HandRight ]
.Position,
spineShoulder = body[idx].Joints[JointType.SpineShoulder]
.Position,
spineMid = body[idx].Joints[JointType.SpineMid ]
.Position,
elbowLeft = body[idx].Joints[JointType.ElbowLeft ]
.Position,
elbowRight = body[idx].Joints[JointType.ElbowRight ]
.Position,
kneeLeft = body[idx].Joints[JointType.KneeLeft ]
.Position,
kneeRight = body[idx].Joints[JointType.KneeRight ]
.Position;
MotionState s = MotionState.UNKNOWN;
if (head.Y < leftHand.Y && head.Y < rightHand.Y)
s |= MotionState.HURRAY;
if (Distance(leftHand, rightHand) > 0.3f
&& spineShoulder.Y < leftHand.Y && spineShoulder.Y < rightHand.Y)
// Clap
if (Distance(handLeft, handRight) > 0.3f
&& spineShoulder.Y < handLeft.Y && spineShoulder.Y < handRight.Y)
s |= MotionState.CLAP_PREPARE;
if (Distance(leftHand, rightHand) < 0.1f
&& spineShoulder.Y < leftHand.Y && spineShoulder.Y < rightHand.Y)
if (Distance(handLeft, handRight) < 0.1f
&& spineShoulder.Y < handLeft.Y && spineShoulder.Y < handRight.Y)
s |= MotionState.CLAP_DONE;
// Jump
if (spineMid.Y - spineMidRecent.Y < 0.05f)
s |= MotionState.JUMP_PREPARE;
if (spineMid.Y > spineMidRecent.Y)
s |= MotionState.JUMP_DONE;
// Push Up
if (head.Y < handLeft.Y && head.Y < handRight.Y)
s |= MotionState.HURRAY;
if (handLeft.Y - handLeftRecent.Y > 0)
s |= MotionState.HAND_MOVE_UP_LEFT;
if (handLeft.Y - handLeftRecent.Y < 0)
s |= MotionState.HAND_MOVE_DOWN_LEFT;
if (handRight.Y - handRightRecent.Y > 0)
s |= MotionState.HAND_MOVE_UP_RIGHT;
if (handRight.Y - handRightRecent.Y < 0)
s |= MotionState.HAND_MOVE_DOWN_RIGHT;
// Guard
if (handLeft.Y > elbowLeft.Y
&& Mathf.Abs(elbowLeft.X - spineMid.X) < 0.5f)
s |= MotionState.GUARD_BASE_LEFT;
if (handRight.Y > elbowRight.Y
&& Mathf.Abs(elbowRight.X - spineMid.X) < 0.5f)
s |= MotionState.GUARD_BASE_RIGHT;
// Hand Up
if (handLeft.Y - head.Y > 0.2)
s |= MotionState.HAND_UP_LEFT;
if (handRight.Y - head.Y > 0.2)
s |= MotionState.HAND_UP_RIGHT;
// Hand Down
if (handLeft.Y < spineMid.Y)
s |= MotionState.HAND_DOWN_LEFT;
if (handRight.Y > spineMid.Y)
s |= MotionState.HAND_DOWN_RIGHT;
// Jesus
if (Mathf.Min(handLeft.Y, handRight.Y) > spineShoulder.Y
&& Mathf.Abs(handLeft.X - head.X) >= 0.5f
&& Mathf.Abs(handRight.X - head.X) >= 0.5f)
s |= MotionState.JESUS;
// Headphone
if (Mathf.Abs(handLeft.X - head.X) < 0.2f
&& Mathf.Abs(handLeft.Z - head.Z) < 0.2f)
s |= MotionState.HEADPHONE_LEFT;
if (Mathf.Abs(handRight.X - head.X) < 0.2f
&& Mathf.Abs(handRight.Z - head.Z) < 0.2f)
s |= MotionState.HEADPHONE_RIGHT;
// On The Table
if (kneeLeft.Y - kneeLeftBase.Y >= 0.5f
|| kneeRight.Y - kneeRightBase.Y >= 0.5f)
s |= MotionState.ON_THE_TABLE;
InputManager.Instance.Joints = body[idx].Joints;
spineMidRecent = spineMid;
handLeftRecent = handLeft;
handRightRecent = handRight;
return s;
}
......@@ -87,10 +176,26 @@ public class MotionView : MonoBehaviour {
[System.Flags]
public enum MotionState : uint
{
UNKNOWN = 0,
CLAP_PREPARE = 1,
CLAP_DONE = 2,
HURRAY = 4
UNKNOWN = 0x00000,
CLAP_PREPARE = 0x00001,
CLAP_DONE = 0x00002,
JUMP_PREPARE = 0x00004,
JUMP_DONE = 0x00008,
HURRAY = 0x00010,
HAND_MOVE_UP_LEFT = 0x00020,
HAND_MOVE_DOWN_LEFT = 0x00040,
HAND_MOVE_UP_RIGHT = 0x00080,
HAND_MOVE_DOWN_RIGHT = 0x00100,
GUARD_BASE_LEFT = 0x00200,
GUARD_BASE_RIGHT = 0x00400,
HAND_UP_LEFT = 0x00800,
HAND_DOWN_LEFT = 0x01000,
HAND_UP_RIGHT = 0x02000,
HAND_DOWN_RIGHT = 0x04000,
JESUS = 0x10000,
HEADPHONE_LEFT = 0x20000,
HEADPHONE_RIGHT = 0x40000,
ON_THE_TABLE = 0x80000
}
public class Pair<T1, T2>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment