IEnumerator fast_move(AnimObject animObject, List <AnimObject> sub_animObjects) { GameManager.Instance.sub_managers.animManager.running_list++; if (animObject.UDLR == 2) //means left { animObject.objectBase.ObjectBody.GetComponent <ObjectBody>().body.transform.localScale = new Vector3(1, 1, 1); } else if (animObject.UDLR == 3) //means right { animObject.objectBase.ObjectBody.GetComponent <ObjectBody>().body.transform.localScale = new Vector3(-1, 1, 1); } animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.MOVE); Vector3 min_distance = (animObject.objectBase.node_now.position - animObject.objectBase.ObjectBody.transform.position) / 2; Vector3 distance = animObject.objectBase.ObjectBody.transform.position; for (int i = 0; i < 5; i++) { animObject.objectBase.ObjectBody.transform.position += min_distance; animObject.objectBase.ObjectBody.GetComponent <SortingOrderSetter>().change_sorting_order(animObject.objectBase.ObjectBody.transform.position - distance); distance = animObject.objectBase.ObjectBody.transform.position; if (i % 5 == 0) { } yield return(new WaitForSeconds(0.02f)); } animObject.objectBase.ObjectBody.transform.position = animObject.objectBase.node_now.position; animObject.objectBase.ObjectBody.GetComponent <SortingOrderSetter>().change_sorting_order(animObject.objectBase.node_now.position - distance); animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.IDLE); animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = null; GameManager.Instance.sub_managers.animManager.running_list--; }
IEnumerator PlayAnyAnimation(RSRMonoBehaviour targetObj, AnimObject.AnimationEnum thisAnimEnum, AnimObject.AnimationEnum targetAnimEnum) { //Debug.Log("Trying to play Animation " + thisAnimEnum.ToString() + " for object " + gameObject.ToString()); AnimObjectHolder aoh; if (_animController.TryGetAnimObjectHolder(thisAnimEnum, out aoh)) { //Debug.Log(thisAnimEnum.ToString() + " found for " + gameObject.ToString()); for (int i = 0; i < aoh.GetAnimObjects().Count; i++) { AnimObject ao = aoh.GetAnimObjects()[i]; if (ao.concurrent) { StartCoroutine(ao.Play(this, targetObj, targetAnimEnum)); } else { yield return(StartCoroutine(ao.Play(this, targetObj, targetAnimEnum))); } } } else { throw new System.NotImplementedException("PlayAnimation(" + targetObj.ToString() + ", " + thisAnimEnum.ToString() + ") --> Could not find Animation " + thisAnimEnum.ToString() + " for " + gameObject.ToString()); } }
public static void ShowTargetGUI(AnimObject ao) { GUILayout.BeginVertical(); ao.waitForAnimObjectToEnd = UnityEditor.EditorGUILayout.ToggleLeft("Wait For AnimObject to End", ao.waitForAnimObjectToEnd, GUILayout.MinWidth(400f)); ao.delayForTargetAnim = UnityEditor.EditorGUILayout.FloatField("Delay", ao.delayForTargetAnim, GUILayout.MaxWidth(200f)); if (ao.delayForTargetAnim < 0f) { ao.delayForTargetAnim = 0f; } //ensure you can't have a negative delay GUILayout.BeginHorizontal(); //"(optional) Target animation play " GUILayout.FlexibleSpace(); GUILayout.Label("(Optional) Target Animation to Play"); ao.optionalTargetAnimationOverride = (AnimObject.AnimationEnum)UnityEditor.EditorGUILayout.EnumPopup( "", ao.optionalTargetAnimationOverride, GUILayout.MaxWidth(250f)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); }
/* Draws the header for each foldout for each AnimObject */ void DrawFoldoutHeader(AnimObject ao, AnimObjectHolder aoh) { EditorGUILayout.BeginHorizontal(); ao.foldout = EditorGUILayout.Foldout(ao.foldout, ao.ToString()); if (GUILayout.Button("UP", GUILayout.Width(50f))) { aoh.MoveAnimObjectUp(ao); } if (GUILayout.Button("DOWN", GUILayout.Width(50f))) { aoh.MoveAnimObjectDown(ao); } GUILayout.Space(10f); if (GUILayout.Button("X", GUILayout.Width(25f))) { aoh.RemoveAnimObject(ao); } GUILayout.Space(60f); EditorGUILayout.EndHorizontal(); }
/// <summary> /// Shows variables for AParticleSystem AnimObject /// </summary> void ShowParticleSystemVariables() { particleSystem = EditorGUILayout.ObjectField("Particle System:", particleSystem, typeof(ParticleSystem), false) as ParticleSystem; particleLoop = EditorGUILayout.ToggleLeft("Loop", particleLoop); /* Create some space */ GUILayout.Space(20f); /* Choose direction */ GUILayout.BeginHorizontal(); GUILayout.Label("Direction to play in:"); particleDirection = (AnimObject.AnimationDirection)EditorGUILayout.EnumPopup( "", particleDirection, GUILayout.MaxWidth(250f)); GUILayout.EndHorizontal(); /* Show distance if location != Target or None */ if (particleDirection != AnimObject.AnimationDirection.Target && particleDirection != AnimObject.AnimationDirection.None) { particleDistance = EditorGUILayout.IntField("Distance (hexes):", particleDistance); } particleSpeed = EditorGUILayout.FloatField("Speed:", particleSpeed); particleSpeed = AnimObject.EnsureNoNegativeFloat(particleSpeed); ShowCommonVariables(); }
public static void DrawAParticleSystem(AParticleSystem aps) { aps.particleSystem = EditorGUILayout.ObjectField("Particle System:", aps.particleSystem, typeof(ParticleSystem), false) as ParticleSystem; aps.loop = EditorGUILayout.ToggleLeft("Loop", aps.loop); /* Create some space */ GUILayout.Space(20f); /* Choose direction */ GUILayout.BeginHorizontal(); GUILayout.Label("Direction to play in:"); aps.direction = (AnimObject.AnimationDirection)EditorGUILayout.EnumPopup( "", aps.direction, GUILayout.MaxWidth(250f)); GUILayout.EndHorizontal(); /* Show distance if location != Target or None */ if (aps.direction != AnimObject.AnimationDirection.Target && aps.direction != AnimObject.AnimationDirection.None) { aps.distance = EditorGUILayout.IntField("Distance (hexes):", aps.distance); } aps.speed = EditorGUILayout.FloatField("Speed:", aps.speed); aps.speed = AnimObject.EnsureNoNegativeFloat(aps.speed); /* Create some space */ GUILayout.Space(20f); /* Draws concurrency/target stuff */ DrawBaseAnimObject(aps); }
public static void DrawASpriteAnimation(ASpriteAnimation asa) { //asa.spriteAnimation = EditorGUILayout.ObjectField("Sprite Animation:", asa.spriteAnimation, typeof(AnimationClip), false) // as AnimationClip; // spriteAnimation = EditorGUILayout.PropertyField(spriteAnimation, "Sprite Animation:", false, GUILayout.MaxWidth(300f)) //as Animation; asa.speed = EditorGUILayout.FloatField("Speed:", asa.speed); asa.speed = AnimObject.EnsureNoNegativeFloat(asa.speed); asa.loop = EditorGUILayout.ToggleLeft("Loop", asa.loop); if (asa.loop) { EditorGUILayout.LabelField("Times To Loop (0 for infinite)"); asa.timesToLoop = EditorGUILayout.IntField(asa.timesToLoop, GUILayout.MaxWidth(100f)); asa.timesToLoop = AnimObject.EnsureNoNegativeInt(asa.timesToLoop); } /* Create some space */ GUILayout.Space(20f); DrawBaseAnimObject(asa); }
IEnumerator hit_withoutblood(AnimObject animObject, List <AnimObject> sub_animObjects) { GameManager.Instance.sub_managers.animManager.running_list++; yield return(new WaitForSeconds(0.5f)); if (animObject.UDLR == 2) { animObject.objectBase.ObjectBody.GetComponent <ObjectBody>().body.transform.localScale = new Vector3(1, 1, 1); } else if (animObject.UDLR == 3) { animObject.objectBase.ObjectBody.GetComponent <ObjectBody>().body.transform.localScale = new Vector3(-1, 1, 1); } GameManager.Instance.sub_managers.cameraManager.run_camera_anim(CameraAnimType.SHAKE_CAMERA, count: 15); for (int i = 0; i < Constant.HIGHTLIGHT_ANIMTIME; i++) { if (i == 0) { animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.HIT); } else if (i == Constant.HIGHTLIGHT_ANIMTIME - 30) { animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.IDLE); } yield return(new WaitForSeconds(0.02f)); } animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = null; GameManager.Instance.sub_managers.animManager.running_list--; }
IEnumerator cannot_attack(AnimObject animObject, List <AnimObject> sub_animObjectsm) { GameManager.Instance.sub_managers.animManager.running_list++; if (animObject.UDLR == 2) //means left { animObject.objectBase.ObjectBody.GetComponent <ObjectBody>().body.transform.localScale = new Vector3(1, 1, 1); } else if (animObject.UDLR == 3) //means right { animObject.objectBase.ObjectBody.GetComponent <ObjectBody>().body.transform.localScale = new Vector3(-1, 1, 1); } yield return(new WaitForSeconds(Random.Range(0, 0.2f))); animObject.objectBase.ObjectBody.GetComponent <Character>().cannot_attack(); for (int i = 0; i < Constant.HIGHTLIGHT_ANIMTIME; i++) { if (i == 0) { animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.ATTACK); } else if (i == Constant.HIGHTLIGHT_ANIMTIME - 20) { animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.ATTACKEND); } yield return(new WaitForSeconds(0.02f)); } animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = null; GameManager.Instance.sub_managers.animManager.running_list--; }
public static void DeleteAsset(AnimObject ao) { string path = "Assets/Resources/AnimObject Assets" + "/New " + ao.ToString() + ao.GetInstanceID() + ".asset"; #if UNITY_EDITOR AssetDatabase.DeleteAsset(path); #endif }
IEnumerator death_withoutdelay(AnimObject animObject, List <AnimObject> sub_animObjects) { //GameManager.Instance.sub_managers.animManager.running_list++; animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.DEATH); //GameManager.Instance.sub_managers.animManager.running_list--; yield return(new WaitForSeconds(0f)); animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = null; }
/// <summary> /// Common variables are variables that are common to each AnimObject type. /// </summary> /// <param name="ao">The AnimObject we're modifying</param> void SetCommonVariables(AnimObject ao) { ao.waitForAnimObjectToEnd = commonWaitForAnimObjectToEnd; ao.target = commonTarget; ao.optionalTargetAnimationOverride = commonOptionalTargetAnimationOverride; ao.foldout = commonFoldout; ao.description = commonDescription; ao.delayForTargetAnim = commonDelayForTargetAnim; ao.concurrent = commonConcurrent; }
public List <AnimObject> AddToCollection(AnimObject animObject) { if (_animObjectCollection == null) { _animObjectCollection = new List <AnimObject>(); } _animObjectCollection.Add(animObject); return(_animObjectCollection); }
public void recall(AnimObject animObject) { Vector3 distance = animObject.objectBase.ObjectBody.transform.position; if (animObject.objectBase.objectBase_type != ObjectBaseType.DOOR) { animObject.objectBase.ObjectBody.transform.position = animObject.objectBase.node_now.position; animObject.objectBase.ObjectBody.GetComponent <SortingOrderSetter>().change_sorting_order(animObject.objectBase.ObjectBody.transform.position - distance); } }
/* Moves the specified AnimObject down in the order of execution. * Since we're working with animations, order matters! */ public void MoveAnimObjectDown(AnimObject ao) { for (int i = 0; i < _animObjectCollection.Count; i++) { if (ao.Equals(_animObjectCollection[i]) && i != _animObjectCollection.Count - 1) { AnimObject temp = _animObjectCollection[i + 1]; _animObjectCollection[i + 1] = ao; _animObjectCollection[i] = temp; break; } } }
public void anim_add(ObjectBase _objectBase, AnimType _animType, int _UDLR, int _priority, ObjectBase _target = null) { AnimObject animObject; if (_animType == AnimType.MOVE && GameManager.Instance.skipmode) { animObject = new AnimObject(_objectBase, AnimType.LANDING, _UDLR, _priority, _target); } else { animObject = new AnimObject(_objectBase, _animType, _UDLR, _priority, _target); } master_animObjects.Add(animObject); }
public static void DrawBaseAnimObject(AnimObject ao) { /* Draw the concurrency checkmark */ ao.concurrent = EditorGUILayout.ToggleLeft("Concurrently Play AnimObject", ao.concurrent, GUILayout.ExpandWidth(true)); /* Some space */ GUILayout.Space(10f); /* Draw the Target Toggle + Target info, if it's toggled */ ao.target = EditorGUILayout.ToggleLeft("Trigger Target Animation", ao.target, GUILayout.ExpandWidth(true)); if (ao.target) { UnityEditor.EditorGUI.indentLevel++; ShowTargetGUI(ao); UnityEditor.EditorGUI.indentLevel--; } GUILayout.Space(10f); }
/// <summary> /// Shows variables for ASpriteAnimation AnimObject /// </summary> void ShowSpriteAnimationVariables() { spriteAnimation = EditorGUILayout.ObjectField("Particle System:", spriteAnimation, typeof(AnimationClip), false) as AnimationClip; spriteSpeed = EditorGUILayout.FloatField("Speed:", spriteSpeed); spriteSpeed = AnimObject.EnsureNoNegativeFloat(spriteSpeed); spriteLoop = EditorGUILayout.ToggleLeft("Loop", spriteLoop); if (spriteLoop) { spriteTimesToLoop = EditorGUILayout.IntField("Times To Loop (0 for infinite)", spriteTimesToLoop); } /* Create some space */ GUILayout.Space(20f); ShowCommonVariables(); }
/// <summary> /// Shows variables for ATween AnimObject /// </summary> void ShowTweenVariables() { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Move Direction:"); tweenDirection = (AnimObject.AnimationDirection)EditorGUILayout.EnumPopup( "", tweenDirection, GUILayout.MaxWidth(250f)); EditorGUILayout.EndHorizontal(); /* Show distance if location != Target or None */ if (tweenDirection != AnimObject.AnimationDirection.Target && tweenDirection != AnimObject.AnimationDirection.None) { tweenDistance = EditorGUILayout.IntField("Distance (hexes):", tweenDistance); } tweenSpeed = EditorGUILayout.FloatField("Speed:", tweenSpeed); tweenSpeed = AnimObject.EnsureNoNegativeFloat(tweenSpeed); ShowCommonVariables(); }
IEnumerator itemeffect(AnimObject animObject) { GameManager.Instance.sub_managers.animManager.running_list++; for (int i = 0; i < animObject.objectBase.used_item_List.Count; i++) { int LR = 0; if (animObject.targetBase.node_now.position.x - animObject.objectBase.node_now.position.x > 0) { LR = 1; } else if (animObject.targetBase.node_now.position.x - animObject.objectBase.node_now.position.x == 0) { LR = Random.Range(0, 2); } GameManager.Instance.pools.effectPool.callEffect(animObject.objectBase.used_item_List[i], animObject.targetBase.node_now, LR); yield return(new WaitForSeconds(Random.Range(0, 0.2f))); } animObject.objectBase.used_item_List.Clear(); GameManager.Instance.sub_managers.animManager.running_list--; }
public static void DrawATween(ATween at) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Move Direction:"); at.direction = (AnimObject.AnimationDirection)EditorGUILayout.EnumPopup( "", at.direction, GUILayout.MaxWidth(250f)); EditorGUILayout.EndHorizontal(); /* Show distance if location != Target or None */ if (at.direction != AnimObject.AnimationDirection.Target && at.direction != AnimObject.AnimationDirection.None) { at.distance = EditorGUILayout.IntField("Distance (hexes):", at.distance); } at.speed = EditorGUILayout.FloatField("Speed:", at.speed); at.speed = AnimObject.EnsureNoNegativeFloat(at.speed); DrawBaseAnimObject(at); }
/* We can't use dynamic dispatch because these classes should * not directly access EditorGUILayout or GUILayout */ public static void DrawAnimObject(AnimObject ao) { if (ao is ATween) { DrawATween((ATween)ao); } else if (ao is AParticleSystem) { DrawAParticleSystem((AParticleSystem)ao); } else if (ao is ASpriteAnimation) { DrawASpriteAnimation((ASpriteAnimation)ao); } /* When adding more AnimObjects, make sure to keep * this else case. Just add more else ifs */ else { throw new System.NotImplementedException("Cannot Draw Inspector info for AnimObject " + ao.ToString() + ": Not implemented"); } }
static void MakeAnimationNode(AnimObject Anim, FbxObject AnimatedObject, FbxObject AnimLayer, FbxObjectManager ObjectManager, FbxConnectionManager ConnectionManager) { // make the animation nodes FbxObject AnimNodePosition, AnimNodeRotation, AnimNodeScale; MakeAnimationNode(Anim, AnimLayer, ObjectManager, ConnectionManager, out AnimNodePosition, out AnimNodeRotation, out AnimNodeScale); // object connection if (AnimNodePosition != null) { ConnectionManager.Add(new FbxConnection("AnimCurveNode", "T", AnimNodePosition, "Model", AnimatedObject.TypeName, AnimatedObject, FbxRelationType.OP, "Lcl Translation")); } if (AnimNodeRotation != null) { ConnectionManager.Add(new FbxConnection("AnimCurveNode", "R", AnimNodeRotation, "Model", AnimatedObject.TypeName, AnimatedObject, FbxRelationType.OP, "Lcl Rotation")); } if (AnimNodeScale != null) { ConnectionManager.Add(new FbxConnection("AnimCurveNode", "S", AnimNodeScale, "Model", AnimatedObject.TypeName, AnimatedObject, FbxRelationType.OP, "Lcl Scaling")); } }
protected void ShowTargetGUI() { GUILayout.BeginVertical(); commonWaitForAnimObjectToEnd = UnityEditor.EditorGUILayout.ToggleLeft( "Wait For AnimObject to End", commonWaitForAnimObjectToEnd, GUILayout.MinWidth(400f)); commonDelayForTargetAnim = UnityEditor.EditorGUILayout.FloatField("Delay", commonDelayForTargetAnim, GUILayout.MaxWidth(200f)); commonDelayForTargetAnim = AnimObject.EnsureNoNegativeFloat(commonDelayForTargetAnim);//ensure you can't have a negative delay GUILayout.BeginHorizontal(); //"(optional) Target animation play " GUILayout.FlexibleSpace(); GUILayout.Label("(Optional) Target Animation to Play"); commonOptionalTargetAnimationOverride = (AnimObject.AnimationEnum)UnityEditor.EditorGUILayout.EnumPopup( "", commonOptionalTargetAnimationOverride, GUILayout.MaxWidth(250f)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); }
/*Removes the specified AnimObject from the collection of AnimObjects, if found */ public void RemoveAnimObject(AnimObject ao) { _animObjectCollection.Remove(ao); ScriptableObjectUtility.DeleteAsset(ao); }
/// <summary> /// Unity Editor GUI call, which is called every update frame. /// </summary> void OnGUI() { _animObjectType = (AnimObject.AnimObjectType)EditorGUILayout.EnumPopup("AnimObject Type:", _animObjectType, GUILayout.MaxWidth(300f)); if (_animObjectType == AnimObject.AnimObjectType.AParticleSystem) { ShowParticleSystemVariables(); } else if (_animObjectType == AnimObject.AnimObjectType.ASpriteAnimation) { ShowSpriteAnimationVariables(); } else if (_animObjectType == AnimObject.AnimObjectType.ATween) { ShowTweenVariables(); } GUILayout.Space(100f); /* Show OK/Close buttons */ if (GUILayout.Button("Create New AnimObject")) { switch (_animObjectType) { case AnimObject.AnimObjectType.ATween: ATween newTween = AnimObject.CreateTweenAnimObject(); newTween.speed = tweenSpeed; newTween.direction = tweenDirection; newTween.distance = tweenDistance; SetCommonVariables(newTween); _targetAOH.AddToCollection(newTween); break; case AnimObject.AnimObjectType.ASpriteAnimation: ASpriteAnimation newSpriteAnimation = AnimObject.CreateSpriteAnimationAnimObject(_targetAnimController.GetComponent <Animator>()); newSpriteAnimation.loop = spriteLoop; newSpriteAnimation.speed = spriteSpeed; //newSpriteAnimation.spriteAnimation = spriteAnimation; newSpriteAnimation.timesToLoop = spriteTimesToLoop; SetCommonVariables(newSpriteAnimation); _targetAOH.AddToCollection(newSpriteAnimation); break; case AnimObject.AnimObjectType.AParticleSystem: AParticleSystem newParticleSystem = AnimObject.CreateParticleSystemAnimObject(); newParticleSystem.loop = particleLoop; newParticleSystem.speed = particleSpeed; newParticleSystem.particleSystem = particleSystem; newParticleSystem.direction = particleDirection; newParticleSystem.distance = particleDistance; SetCommonVariables(newParticleSystem); _targetAOH.AddToCollection(newParticleSystem); break; } this.Close(); } if (GUILayout.Button("Cancel")) { this.Close(); } }
static void MakeAnimationNode(AnimObject Anim, FbxObject AnimLayer, FbxObjectManager ObjectManager, FbxConnectionManager ConnectionManager, out FbxObject AnimNodePosition, out FbxObject AnimNodeRotation, out FbxObject AnimNodeScale) { // add anim nodes var ao = Anim; float[] TimeData; ao.GetCurveTimes(out TimeData); bool MakeTranslation = true; bool MakeRotation = false; bool MakeScale = false; if (MakeTranslation) { var NodeT = ObjectManager.AddAnimationCurveNode(FbxAnimationCurveNodeType.Translation, ao.Frames[0].Position); AnimNodePosition = NodeT; // get data float[] TXData; float[] TYData; float[] TZData; ao.GetPositionCurveData(out TXData, out TYData, out TZData); var CurveTX = ObjectManager.AddAnimationCurve(TXData, TimeData); var CurveTY = ObjectManager.AddAnimationCurve(TYData, TimeData); var CurveTZ = ObjectManager.AddAnimationCurve(TZData, TimeData); ConnectionManager.Add(new FbxConnection("AnimCurveNode", "T", NodeT, "AnimLayer", "BaseLayer", AnimLayer, FbxRelationType.OO)); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveTX, "AnimCurveNode", "T", NodeT, FbxRelationType.OP, "d|X")); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveTY, "AnimCurveNode", "T", NodeT, FbxRelationType.OP, "d|Y")); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveTZ, "AnimCurveNode", "T", NodeT, FbxRelationType.OP, "d|Z")); } else { AnimNodePosition = null; } if (MakeRotation) { var NodeR = ObjectManager.AddAnimationCurveNode(FbxAnimationCurveNodeType.Rotation, ao.Frames[0].RotationEular); AnimNodeRotation = NodeR; float[] RXData; float[] RYData; float[] RZData; ao.GetRotationCurveData(out RXData, out RYData, out RZData); var CurveRX = ObjectManager.AddAnimationCurve(RXData, TimeData); var CurveRY = ObjectManager.AddAnimationCurve(RYData, TimeData); var CurveRZ = ObjectManager.AddAnimationCurve(RZData, TimeData); ConnectionManager.Add(new FbxConnection("AnimCurveNode", "R", NodeR, "AnimLayer", "BaseLayer", AnimLayer, FbxRelationType.OO)); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveRX, "AnimCurveNode", "R", NodeR, FbxRelationType.OP, "d|X")); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveRY, "AnimCurveNode", "R", NodeR, FbxRelationType.OP, "d|Y")); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveRZ, "AnimCurveNode", "R", NodeR, FbxRelationType.OP, "d|Z")); } else { AnimNodeRotation = null; } if (MakeScale) { var NodeS = ObjectManager.AddAnimationCurveNode(FbxAnimationCurveNodeType.Scale, ao.Frames[0].Scale); AnimNodeScale = NodeS; float[] SXData; float[] SYData; float[] SZData; ao.GetScaleCurveData(out SXData, out SYData, out SZData); var CurveSX = ObjectManager.AddAnimationCurve(SXData, TimeData); var CurveSY = ObjectManager.AddAnimationCurve(SYData, TimeData); var CurveSZ = ObjectManager.AddAnimationCurve(SZData, TimeData); ConnectionManager.Add(new FbxConnection("AnimCurveNode", "S", NodeS, "AnimLayer", "BaseLayer", AnimLayer, FbxRelationType.OO)); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveSX, "AnimCurveNode", "S", NodeS, FbxRelationType.OP, "d|X")); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveSY, "AnimCurveNode", "S", NodeS, FbxRelationType.OP, "d|Y")); ConnectionManager.Add(new FbxConnection("AnimCurve", "", CurveSZ, "AnimCurveNode", "S", NodeS, FbxRelationType.OP, "d|Z")); } else { AnimNodeScale = null; } }
public static void Export(System.Action <string> WriteLine, Mesh mesh, Matrix4x4 transform, List <string> Comments = null) { // temp objects var MeshAnim = new AnimObject(); MeshAnim.AddFrame(new Vector3(0, 0, 0), Quaternion.identity, 0); MeshAnim.AddFrame(new Vector3(0, 1000, 0), Quaternion.Euler(0, 90, 0), 1); MeshAnim.AddFrame(new Vector3(0, 0, 0), Quaternion.Euler(0, 180, 0), 2); MeshAnim.AddFrame(new Vector3(0, 1000, 0), Quaternion.Euler(0, 270, 0), 3); MeshAnim.AddFrame(new Vector3(0, 0, 0), Quaternion.Euler(0, 359, 0), 4); var AnimStack = new AnimStack("Take001", MeshAnim.GetStartTime(), MeshAnim.GetEndTime()); var Cam = new FbxCamera("Camera1"); Pop.AllocIfNull(ref Comments); Comments.Add("Using WIP PopX.FbxAscii exporter from @soylentgraham"); var Header = GetHeaderProperty(); Header.AddComment(Comments); Export(WriteLine, Header); var ConnectionManager = new FbxConnectionManager(); var ObjectManager = new FbxObjectManager(); //var MeshObject = CreateFbxObject(mesh, transform, ObjectManager); var CameraObject = CreateFbxObject(Cam, transform, ObjectManager, ConnectionManager); var AnimLayerObject = CreateAnimLayerObject(ObjectManager); var AnimStackObject = CreateAnimStackObject(AnimStack, ObjectManager); MakeAnimationNode(MeshAnim, CameraObject, AnimLayerObject, ObjectManager, ConnectionManager); ConnectionManager.Add(new FbxConnection(AnimLayerObject.TypeName, AnimLayerObject.ObjectName, AnimLayerObject, AnimStackObject.TypeName, AnimStackObject.ObjectName, AnimStackObject, FbxRelationType.OO)); var Definitions = GetDefinitionsProperty(ObjectManager); Export(WriteLine, Definitions); Export(WriteLine, ObjectManager); // fake connections after we've exported ObjectManager var SceneMesh = new Mesh(); SceneMesh.name = "Root"; var SceneMeshObject = CreateFbxObject(SceneMesh, Matrix4x4.identity, ObjectManager, FbxObjectManager.RootNodeIdent); //var MeshMaterialObject = CreateFbxObject_Material("DummyMaterial", ObjectManager); //ConnectionManager.Add(new FbxConnection( MeshObject, SceneMeshObject, FbxRelationType.OO)); ConnectionManager.Add(new FbxConnection(CameraObject, SceneMeshObject, FbxRelationType.OO)); //ConnectionManager.Add(new FbxConnection( MeshMaterialObject.TypeName, MeshMaterialObject.ObjectName, MeshMaterialObject, MeshObject.TypeName, MeshObject.ObjectName, MeshObject, FbxRelationType.OO)); Export(WriteLine, ConnectionManager); }
// Update is called once per frame void FixedUpdate() { //if (!leader.activeSelf) //{ // foreach (GameObject follower in followers) // { // if (follower.activeSelf) // { // leader = follower; // followers.RemoveAt(followers.IndexOf(follower)); // } // } //} Animator currentAnim = leader.GetComponent <PlayerMovements>().anim; if (animList.Count < 1 || Vector3.Distance(leader.transform.position, animList[animList.Count - 1].position) > 0.5f) { animList.Add(new AnimObject(leader.transform.position, currentAnim.GetFloat("MoveX"), currentAnim.GetFloat("MoveY"), currentAnim.GetBool("PlayerMoving"), currentAnim.GetFloat("LastX"), currentAnim.GetFloat("LastY"))); for (int i = 0; i < followers.Count; i++) { if (!followers[i].activeSelf) { followers.RemoveAt(i); } if (animList.Count > spacingSize + (spacingSize * i)) { AnimObject currentAnimObj = animList[animList.Count - (spacingSize + spacingSize * i)]; followers[i].transform.position = currentAnimObj.position; Animator followAnim = followers[i].GetComponent <Animator>(); followAnim.SetFloat("MoveX", currentAnimObj.MoveX); followAnim.SetFloat("MoveY", currentAnimObj.MoveY); followAnim.SetBool("PlayerMoving", currentAnimObj.PlayerMoving); followAnim.SetFloat("LastX", currentAnimObj.LastX); followAnim.SetFloat("LastY", currentAnimObj.LastY); } } if (animList.Count > spacingSize + (spacingSize * (followers.Count - 1))) { animList.RemoveAt(0); } sortingList = sortingList.OrderByDescending(o => o.transform.position.y).ToList(); for (int i = 0; i < sortingList.Count; i++) { sortingList[i].GetComponent <SpriteRenderer>().sortingOrder = i; } } else { for (int i = 0; i < followers.Count; i++) { Animator followAnim = followers[i].GetComponent <Animator>(); followAnim.SetFloat("MoveX", 0f); followAnim.SetFloat("MoveY", 0f); followAnim.SetBool("PlayerMoving", false); } } }
//EffectPool effectPool = GameManager.Instance.pools.effectPool; public void run_coroutine(List <AnimObject> sub_animObjects) { while (sub_animObjects.Count > 0) { AnimObject animObject = sub_animObjects[0]; if (animObject.objectBase.ObjectBody == null) { switch (animObject.objectBase.objectBase_type) { case ObjectBaseType.BLOCK: BlockBase blockBase = ((BlockBase)animObject.objectBase); GameManager.Instance.pools.objectBodyPool.get_body(blockBase.blockType, blockBase.node_now.position); break; case ObjectBaseType.CHARACTER: PlayerBase playerBase = ((PlayerBase)animObject.objectBase); GameManager.Instance.pools.objectBodyPool.get_body(playerBase.monsterType, playerBase.node_now.position); break; case ObjectBaseType.DOOR: DoorBase doorBase = ((DoorBase)animObject.objectBase); GameManager.Instance.pools.objectBodyPool.get_body(doorBase.doorType, doorBase.node_now.position, animObject.UDLR); break; case ObjectBaseType.ITEM: ItemBase itemBase = ((ItemBase)animObject.objectBase); GameManager.Instance.pools.objectBodyPool.get_body(itemBase.itemType, itemBase.node_now.position); break; case ObjectBaseType.MONSTER: MonsterBase monsterBase = ((MonsterBase)animObject.objectBase); GameManager.Instance.pools.objectBodyPool.get_body(monsterBase.monsterType, monsterBase.node_now.position); break; case ObjectBaseType.TRAP: TrapBase trapBase = ((TrapBase)animObject.objectBase); GameManager.Instance.pools.objectBodyPool.get_body(trapBase.trapType, trapBase.node_now.position); break; } } else { animObject.objectBase.ObjectBody.SetActive(true); } if (animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow != null) { StopCoroutine(animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow); GameManager.Instance.sub_managers.animManager.running_list--; animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.IDLE); recall(animObject); animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = null; } switch (animObject.animType) { case AnimType.ATTACK: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(attack(animObject, sub_animObjects)); break; case AnimType.CANNOTATTACK: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(cannot_attack(animObject, sub_animObjects)); break; case AnimType.HIT: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(hit(animObject, sub_animObjects)); break; case AnimType.DEATH: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(death(animObject, sub_animObjects)); break; case AnimType.DEATHWITHOUTDELAY: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(death_withoutdelay(animObject, sub_animObjects)); break; case AnimType.MOVE: //animObject.objectBase.ObjectBody.GetComponentInChildren<Animator>().SetInteger("MoveType", (int)AnimType.LANDING); animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(move(animObject, sub_animObjects)); break; case AnimType.FASTMOVE: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(fast_move(animObject, sub_animObjects)); break; case AnimType.TRY: //StartCoroutine(try_something(animObject, sub_animObjects)); break; case AnimType.LANDING: animObject.objectBase.ObjectBody.GetComponentInChildren <Animator>().SetInteger("MoveType", (int)AnimType.LANDING); recall(animObject); break; case AnimType.HIGHLIGHT: if (!highlightlist.Contains(animObject.objectBase.ObjectBody)) { highlightlist.Add(animObject.objectBase.ObjectBody); } break; case AnimType.HIT_WITHBLOOD: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(hit_withblood(animObject, sub_animObjects)); break; case AnimType.HIT_WITHOUTBLOOD: animObject.objectBase.ObjectBody.GetComponent <CoroutineBox>().coroutineNow = StartCoroutine(hit_withoutblood(animObject, sub_animObjects)); break; case AnimType.ITEMEFFECT: StartCoroutine(itemeffect(animObject)); break; } sub_animObjects.RemoveAt(0); } if (!highlightisRunning && highlightlist.Count > 0) { StartCoroutine(highlight(sub_animObjects)); } }