Esempio n. 1
0
        /// <summary>
        /// Init this instance.
        /// </summary>
        virtual protected void PostInit()
        {
            bool hasCoolDowns = false;

            for (int i = 0; i < attacks.Count; i++)
            {
                if (attacks[i].hitBox != null)
                {
                    attacks[i].hitBox.Init(new DamageInfo(attacks[i].damageAmount, attacks[i].damageType, Vector2.zero, character));
                }
                if (attacks[i].attackType == AttackType.PROJECTILE && attacks[i].ammoType != null && attacks[i].ammoType != "")
                {
                    itemManager = character.GetComponentInChildren <ItemManager>();
                    if (itemManager == null)
                    {
                        Debug.LogWarning("Attack requires ammo but item manager could not be found");
                    }
                }
                if (attacks[i].coolDown > 0)
                {
                    hasCoolDowns = true;
                }
            }
            if (hasCoolDowns)
            {
                cooldownTimers = new float[attacks.Count];
            }
            projectileAimer = GetComponent <ProjectileAimer>();
            currentAttack   = -1;
        }
Esempio n. 2
0
 /// <summary>
 /// Initialise this movement and retyrn a reference to the ready to use movement.
 /// </summary>
 /// <param name="character">Character.</param>
 override public Movement Init(Character character)
 {
     this.character = character;
     // Prefer an aimer close to this object
     aimer = GetComponentInChildren <ProjectileAimer> ();
     if (aimer == null)
     {
         aimer = character.GetComponentInChildren <ProjectileAimer> ();
     }
     return(this);
 }
Esempio n. 3
0
 /// <summary>
 /// Unity start hook.
 /// </summary>
 void Start()
 {
     // This is not elegant but its a simple and effective way to handle interfaces in Unity
     animatable = (IMob)gameObject.GetComponentInParent(typeof(IMob));
     if (animatable == null)
     {
         Debug.LogWarning("UnitySpriteAimDirectionFacer can't find the animatable reference");
     }
     cachedScale  = transform.localScale;
     cachedOffset = transform.localPosition;
     myAimer      = ((Component)animatable).GetComponentInChildren <ProjectileAimer> ();
     if (myAimer == null)
     {
         Debug.LogWarning("UnitySpriteAimDirectionFacer can't find the ProjectileAimer");
     }
     if (gameObject.GetComponent <SpriteRenderer>() == null)
     {
         Debug.LogWarning("The UnitySpriteDirectionFacer should be placed on the same game object as the SpriteRenderer");
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Initialise this animation bridge.
        /// </summary>
        protected void Init()
        {
            // Get character reference
            myMob = (IMob)gameObject.GetComponent(typeof(IMob));
            if (myMob == null)
            {
                myMob = (IMob)gameObject.GetComponentInParent(typeof(IMob));
            }
            if (myMob == null)
            {
                Debug.LogError("Mecanim Animation Bridge (2D) unable to find Character or Enemy reference");
            }
            myMob.ChangeAnimationState += AnimationStateChanged;
            myAnimator = GetComponentInChildren <Animator>();
            if (myAnimator == null)
            {
                Debug.LogError("Platform Animator unable to find Unity Animator reference");
            }
            defaultController = myAnimator.runtimeAnimatorController;

            if (myMob is Character && (statesWithAimUpModifer.Count > 0 || statesWithAimDownModifer.Count > 0))
            {
                myCharacter = (Character)myMob;
                aimer       = myCharacter.GetComponentInChildren <ProjectileAimer>();
            }
            if ((statesWithAimUpModifer.Count > 0 || statesWithAimDownModifer.Count > 0) && aimer == null)
            {
                Debug.LogWarning("Can't use UP or DOWN modifiers as no aimer could be found");
            }

            animationStateOverrideLookup = new Dictionary <string, AnimatorOverrideController> ();
            foreach (AnimatorControllerMapping mapping in mappings)
            {
                animationStateOverrideLookup.Add(mapping.overrrideState, mapping.controller);
            }

            queuedStates     = new Queue <string> ();
            queuedPriorities = new Queue <int> ();
            state            = AnimationState.NONE.AsString();
            priority         = -1;

            TimeManager.Instance.GamePaused   += HandleGamePaused;
            TimeManager.Instance.GameUnPaused += HandleGameUnPaused;

#if UNITY_EDITOR
        #if UNITY_5
            // TODO also check for up and down states
            // In editor mode build a list of handled states for error messaging and the like
            if (myAnimator.runtimeAnimatorController is UnityEditor.Animations.AnimatorController)
            {
                editor_stateNames = new List <string>();
                UnityEditor.Animations.AnimatorStateMachine stateMachine = ((UnityEditor.Animations.AnimatorController)defaultController).layers[0].stateMachine;
                for (int i = 0; i < stateMachine.states.Length; i++)
                {
                    editor_stateNames.Add(stateMachine.states[i].state.name);
                }
            }
        #else
            // TODO also check for up and down states
            // In editor mode build a list of handled states for error messaging and the like
            if (myAnimator.runtimeAnimatorController is UnityEditorInternal.AnimatorController)
            {
                editor_stateNames = new List <string>();
                UnityEditorInternal.StateMachine stateMachine = ((UnityEditorInternal.AnimatorController)defaultController).GetLayer(0).stateMachine;
                for (int i = 0; i < stateMachine.stateCount; i++)
                {
                    editor_stateNames.Add(stateMachine.GetState(i).name);
                }
            }
        #endif
#endif
        }
        /// <summary>
        /// Init this instance.
        /// </summary>
        virtual protected void Init()
        {
            // Get character reference
            myCharacter = (IMob)gameObject.GetComponent(typeof(IMob));
            if (myCharacter == null)
            {
                myCharacter = (IMob)gameObject.GetComponentInParent(typeof(IMob));
            }
            if (myCharacter == null)
            {
                Debug.LogError("Mecanim Animation Bridge (3D) unable to find Character or Enemy reference");
            }

            if (myCharacter != null)
            {
                // Events
                myCharacter.ChangeAnimationState += AnimationStateChanged;
                if (myCharacter is Character)
                {
                    ((Character)myCharacter).Respawned += HandleRespawned;
                }

                myAnimator = GetComponentInChildren <Animator>();
                if (myAnimator == null)
                {
                    Debug.LogError("Platform Animator unable to find Unity Animator reference");
                }
                defaultController = myAnimator.runtimeAnimatorController;

                // Get an aimer if one is present
                ProjectileAimer tmpAimer = ((Component)myCharacter).gameObject.GetComponent <ProjectileAimer> ();
                if (tmpAimer != null && myCharacter is Character && (tmpAimer.aimType == ProjectileAimingTypes.EIGHT_WAY || tmpAimer.aimType == ProjectileAimingTypes.SIX_WAY))
                {
                    aimer = tmpAimer;
                }

                // Set up animation overrides
                animationStateOverrideLookup = new Dictionary <string, AnimatorOverrideController> ();
                foreach (AnimatorControllerMapping mapping in mappings)
                {
                    animationStateOverrideLookup.Add(mapping.overrrideState, mapping.controller);
                }
            }
#if UNITY_EDITOR
        #if UNITY_5
            // In editor mode build a list of handled states for error messaging and the like
            if (myAnimator.runtimeAnimatorController is UnityEditor.Animations.AnimatorController)
            {
                editor_stateNames = new List <string>();
                UnityEditor.Animations.AnimatorStateMachine stateMachine = ((UnityEditor.Animations.AnimatorController)defaultController).layers[0].stateMachine;
                for (int i = 0; i < stateMachine.states.Length; i++)
                {
                    editor_stateNames.Add(stateMachine.states[i].state.name);
                }
                if (!editor_stateNames.Contains("IDLE"))
                {
                    Debug.LogWarning("Its recommended that you have a default state called 'IDLE' which can act as a hard reset state for actions like respawning");
                }
            }
        #else
            // In editor mode build a list of handled states for error messaging and the like
            if (myAnimator.runtimeAnimatorController is UnityEditorInternal.AnimatorController)
            {
                editor_stateNames = new List <string>();
                UnityEditorInternal.StateMachine stateMachine = ((UnityEditorInternal.AnimatorController)defaultController).GetLayer(0).stateMachine;
                for (int i = 0; i < stateMachine.stateCount; i++)
                {
                    editor_stateNames.Add(stateMachine.GetState(i).name);
                }
                if (!editor_stateNames.Contains("IDLE"))
                {
                    Debug.LogWarning("Its recommended that you have a default state called 'IDLE' which can act as a hard reset state for actions like respawning");
                }
            }
        #endif
#endif
        }
 /// <summary>
 /// Initialise this movement and return a reference to the ready to use movement.
 /// </summary>
 override public EnemyMovement Init(Enemy enemy)
 {
     this.enemy      = enemy;
     projectileAimer = GetComponent <ProjectileAimer>();
     return(this);
 }