Beispiel #1
0
        /// <summary>
        /// Initialise the spell system global settings
        /// </summary>
        /// <remarks>
        /// Includes inputs, class links targeting layers and more
        /// </remarks>
        protected virtual void Start()
        {
            iLastLevel = 1;
            animator   = GetComponent <Animator>();
#if !VANILLA
            vThirdPerson = GetComponent <vThirdPersonController>();
#endif
            GlobalFuncs.DEBUGGING_MESSAGES = DebuggingMessages;
            GlobalFuncs.MAGICAL_POOL       = PooledMagic;
            GlobalFuncs.EnemyDestroyDelay  = EnemyDestroyDelay;
            GlobalFuncs.OnDeathDropRadius  = OnDeathDropRadius;

            // init targeting
            //Test = CollisionLayers.value | EnemyLayers.value;
            GlobalFuncs.targetingLayerMaskAll       = FriendLayers.value | EnemyLayers.value;
            GlobalFuncs.targetingLayerMaskFriend    = FriendLayers;
            GlobalFuncs.targetingLayerMaskEnemy     = EnemyLayers;
            GlobalFuncs.targetingTagsAll            = FriendTags.Union(EnemyTags).ToArray();
            GlobalFuncs.targetingTagsFriend         = FriendTags;
            GlobalFuncs.targetingTagsEnemy          = EnemyTags;
            GlobalFuncs.targetingLayerMaskCollision = CollisionLayers;
            GlobalFuncs.targetingLayerMaskPhysics   = PhysicsLayers;
            //Test = GlobalFuncs.targettingLayerMaskCollision.value | GlobalFuncs.targettingLayerMaskEnemy.value;

            // add a listener to the leveling component if available
            CharacterBase levelingSystem = GetComponent <CharacterBase>();
            if (levelingSystem)
            {
                levelingSystem.NotifyUpdateHUD += new CharacterBase.UpdateHUDHandler(UpdateHUDListener);
                GlobalFuncs.GiveXPToPlayer      = new SetIntValue(levelingSystem.AddXP);
                AddMana    = new SetIntValue(levelingSystem.AddMana);
                SetManaMAX = new CallFunction(levelingSystem.SetManaMAX);
                levelingSystem.ForceUpdateHUD();
            }
        }
        private static void FixGrimmkinFSM(PlayMakerFSM fsm, int level)
        {
            var init     = fsm.GetState("Init");
            var levelVar = init.GetActionsOfType <GetPlayerDataInt>().First().storeValue;

            init.RemoveActionsOfType <GetPlayerDataInt>();
            var fixLevel = new SetIntValue();

            fixLevel.intVariable = levelVar;
            fixLevel.intValue    = level;
            fixLevel.everyFrame  = false;
            init.AddAction(fixLevel);
        }
Beispiel #3
0
        /// <summary>
        /// Initialise listeners and component references.
        /// </summary>
        protected virtual void Start()
        {
            // initialise invector AI handling
            player    = GlobalFuncs.FindPlayerInstance();
            agent     = GetComponent <NavMeshAgent>();
            animator  = GetComponent <Animator>();
            inventory = GetComponent <MagicAIItemManager>();
#if !VANILLA
            ai = GetComponent <v_AIController>();
            if (ai)
            {                                                          // don't start if invector AI and all components are not present
                // invector ai event handlers
                ai.onReceiveDamage.AddListener(OnReceiveDamage_Chase); // listen for damage to enable chase when out of FOV
                ai.onChase.AddListener(delegate { OnChase(); });       // listen for start of chase mode
                ai.onIdle.AddListener(delegate { OnIdle(); });         // listen for start of idle mode
                //ai.onPatrol.AddListener(delegate { OnPatrol(); });  // listen for start of idle mode
                ai.onDead.AddListener(delegate { OnDead(); });         // listen for sudden death

                // store original FOV
                fOriginal_maxDetectDistance    = ai.maxDetectDistance;
                fOriginal_distanceToLostTarget = ai.distanceToLostTarget;
                fOriginal_fieldOfView          = ai.fieldOfView;
            }
#else
            // handle non invector events
#endif

            // add a listener to the leveling component if available
            CharacterBase levelingSystem = GetComponentInParent <CharacterBase>();
            if (levelingSystem)
            {
                useMana = new SetIntValue(levelingSystem.UseMana);
                levelingSystem.NotifyUpdateHUD += new CharacterBase.UpdateHUDHandler(UpdateHUDListener);
                levelingSystem.ForceUpdateHUD();
            }

#if !VANILLA
            // make short list of spells in inventory
            if (inventory && AnimatorTrigger.Length > 0 && HasMagicAbilities)
            {
                SpellsShortList = new List <MagicAIAvailableSpell>();                        // init the list
                foreach (ItemReference ir in inventory.startItems)
                {                                                                            // process all start items
                    vItem item = inventory.itemListData.items.Find(t => t.id.Equals(ir.id)); // find the vItem by id
                    if (item.type == vItemType.Spell)
                    {                                                                        // only after spells
                        SpellsShortList.Add(new MagicAIAvailableSpell()
                        {
                            MagicID  = item.attributes.Find(ia => ia.name.ToString() == "MagicID").value,
                            ManaCost = item.attributes.Find(ia => ia.name.ToString() == "ManaCost").value
                        });  // add to the short list
                    }
                }
                if (SpellsShortList.Count == 0)
                {                           // none found
                    SpellsShortList = null; // reset back to null for fast checking
                    if (GlobalFuncs.DEBUGGING_MESSAGES)
                    {
                        Debug.Log("Warning spells NOT found in magic AI inventory");
                    }
                }
            }
#endif

            // birth animation & magic spawning
            if (BirthStartTrigger != "")
            {                                                                                                                                                                                                                   // birth animation specified
                animator.SetTrigger(BirthStartTrigger);                                                                                                                                                                         // trigger the random magic state selector
            }
            CoDelayedSpawn = StartCoroutine(GlobalFuncs.SpawnAllDelayed(SpawnOnBirth, BirthSpawnDelay, NoneSequentialSpawns, transform, null, 0, false, (gameObject.tag == "Enemy" ? SpawnTarget.Friend : SpawnTarget.Enemy))); // trigger all birth spawns the the array
        }