/// <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); }
/// <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 }