protected override void Update() { if (initialized) { var enemyTargetFound = false; if (BattleZoneManager.getTargets() != null && BattleZoneManager.getTargets().Length > 0) { foreach (var target in BattleZoneManager.getTargets()) { if (!FactionManager.IsAllied(target.faction, faction) && !target.GetIsDead()) { enemyTargetFound = true; break; } } } foreach (ActiveAbility active in GetComponentsInChildren <ActiveAbility>()) { if (!(active is SpawnDrone) || enemyTargetFound) { active.Tick(1); } } base.Update(); TargetManager.Enqueue(targeter); } }
protected override void Update() { base.Update(); if (pathfindTimer >= 0f) { pathfindTimer -= Time.deltaTime; if (pathfindTimer <= 0f) { pathfindToTarget(); } } if (isOnGround && !isDead) { TargetManager.Enqueue(targeter); if (!isDead && Weapon && !draggable.dragging) { Weapon.Tick(0); } drive(); } else { hasPath = false; } }
void Shoot() { if (State == AbilityState.Ready && Core.GetHealth()[2] >= energyCost && !Core.GetIsDead()) // if energy is sufficient, core isn't dead and key is pressed { Transform target = targetingSystem.GetTarget(); if (target == null || !target || target.GetComponent <IDamageable>().GetIsDead() || !DistanceCheck(target)) { TargetManager.Enqueue(targetingSystem, category); } else if (target && target.GetComponent <IDamageable>() != null) { // check if there is a target Core.SetIntoCombat(); // now in combat IDamageable tmp = target.GetComponent <IDamageable>(); // check if allied if (!FactionManager.IsAllied(tmp.GetFaction(), Core.faction)) { if (targetingSystem.GetTarget() && Core.RequestGCD()) { bool success = Execute(target.position); // execute ability using the position to fire if (success) { Core.TakeEnergy(energyCost); // take energy, if the ability was executed startTime = Time.time; } } } } } }
public Transform target; // target of the targeting system /// <summary> /// Get the target of the targeting system /// </summary> /// <param name="findNew">Whether or not the targeting system should find a new target</param> /// <returns>The target of the targeting system</returns> public Transform GetTarget() { if (DialogueSystem.isInCutscene) { return(null); // TODO: remove the hack and prevent weapons from firing somehow else } Transform tmp = ability?.Core?.GetTargetingSystem()?.GetTarget(); // get the core's target if it has one // Performance: Don't allow weapon targeting for non-ShellCores/Carriers //if(!(ability.Core as ShellCore) && !(ability.Core is ICarrier)) //{ // if(IsValidTarget(tmp)) // target = tmp; // else target = null; // return target; //} // Disabled because weapon targeting is needed for turrets and tanks with specific target categories if (tmp != null && tmp && IsValidTarget(tmp)) { target = tmp; return(target); // if the manual target is compatible it overrides everything } if (!IsValidTarget(target)) { TargetManager.Enqueue(this, ability.category); return(null); } return(target); // return the target }
protected override void Update() { if (!isDead) { foreach (WeaponAbility weapon in GetComponentsInChildren <WeaponAbility>()) { weapon.Tick(); } } base.Update(); TargetManager.Enqueue(targeter); if (PlayerCore.Instance && FactionManager.IsAllied(faction, PlayerCore.Instance.faction)) { RepairPlayerAndPartyMembers(); GrabCollectiblesFromAllies(); // Notify the player that their parts have been collected if (Yard.partsTakenCombo > 0 && Time.time - Yard.lastPartTakenTime > 1) { if (Yard.partsTakenCombo > 1) { string message = string.Format("<color=lime>Your {0} parts have been added into your inventory.</color>", Yard.partsTakenCombo); PassiveDialogueSystem.Instance.PushPassiveDialogue(GetComponent <Entity>().ID, message, 4); } else { PassiveDialogueSystem.Instance.PushPassiveDialogue(GetComponent <Entity>().ID, "<color=lime>Your part has been added into your inventory.</color>", 4); } Yard.partsTakenCombo = 0; } } }
protected override void Update() { base.Update(); TargetManager.Enqueue(targeter); WeaponAbility[] weapons = GetComponentsInChildren <WeaponAbility>(); for (int i = 0; i < weapons.Length; i++) { weapons[i].Tick(0); } }
protected override void Update() { if (!isDead) { foreach (WeaponAbility weapon in GetComponentsInChildren <WeaponAbility>()) { weapon.Tick(); } } base.Update(); TargetManager.Enqueue(targeter); if (FactionManager.IsAllied(faction, 0)) { if ((transform.position - PlayerCore.Instance.transform.position).sqrMagnitude <= 75) { var player = PlayerCore.Instance; if (player.GetTractorTarget() && (player.GetTractorTarget().GetComponent <ShellPart>() || player.GetTractorTarget().GetComponent <Shard>()) && !tractor.GetTractorTarget()) { tractor.SetTractorTarget(player.GetTractorTarget()); player.SetTractorTarget(null); } } if (tractor.GetTractorTarget() && (transform.position - tractor.GetTractorTarget().transform.position).sqrMagnitude <= 10) { if (tractor.GetTractorTarget().GetComponent <ShellPart>()) { PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your part has been added into your inventory.</color>"); var shellPart = tractor.GetTractorTarget().GetComponent <ShellPart>(); var info = shellPart.info; info = ShipBuilder.CullSpatialValues(info); ShipBuilder.AddOriginToDictionary(shellPart); PlayerCore.Instance.cursave.partInventory.Add(info); PartIndexScript.AttemptAddToPartsObtained(info); PartIndexScript.AttemptAddToPartsSeen(info); if (NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect != null) { NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect.Invoke(info.partID, info.abilityID, shellPart.droppedSectorName); } Destroy(shellPart.gameObject); } else if (tractor.GetTractorTarget().GetComponent <Shard>()) { PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your shard has been added into your stash.</color>"); var shard = tractor.GetTractorTarget().GetComponent <Shard>(); var tiers = new int[] { 1, 5, 20 }; PlayerCore.Instance.shards += tiers[shard.tier]; ShardCountScript.DisplayCount(PlayerCore.Instance.shards); Destroy(shard.gameObject); } } } }
/// <summary> /// Override for tick that integrates the targeting system of the core for players /// and adjusted for the new isActive behaviour /// </summary> /// <param name="key">the associated trigger key of the ability</param> public override void Tick(int key) { if (isDestroyed) { return; // Part has been destroyed, ability can't be used } if (Core.IsInvisible || Core.isAbsorbing) { return; // Core is in stealth mode, weapons are disabled } if (key == 1) { // toggle ability Core.MakeBusy(); // make core busy isActive = !isActive; } if (isOnCD) // on cooldown { TickDown(cooldownDuration, ref CDRemaining, ref isOnCD); // tick the cooldown time } else if (isActive && Core.GetHealth()[2] >= energyCost && !Core.GetIsDead()) // if energy is sufficient, core isn't dead and key is pressed { Transform target = targetingSystem.GetTarget(); if (target == null || !target || target.GetComponent <IDamageable>().GetIsDead() || !DistanceCheck(target)) { TargetManager.Enqueue(targetingSystem, category); } else if (target && target.GetComponent <IDamageable>() != null) // check if there is a target { Core.SetIntoCombat(); // now in combat IDamageable tmp = target.GetComponent <IDamageable>(); // check if allied if (!FactionManager.IsAllied(tmp.GetFaction(), Core.faction)) { bool success = Execute(target.position); // execute ability using the position to fire if (success) { Core.TakeEnergy(energyCost); // take energy, if the ability was executed } } } } }
protected override void Update() { if (initialized) { TickAbilitiesAsStation(); base.Update(); TargetManager.Enqueue(targeter); if (!SectorManager.instance.carriers.ContainsKey(faction) || (SectorManager.instance.carriers[faction] == null || SectorManager.instance.carriers[faction].Equals(null)) || SectorManager.instance.carriers[faction].GetIsDead()) { if (!GetIsDead()) { SectorManager.instance.carriers[faction] = this; } } } }
protected override void Update() { if (!isDead) { foreach (WeaponAbility weapon in GetComponentsInChildren <WeaponAbility>()) { weapon.Tick(); } } base.Update(); TargetManager.Enqueue(targeter); if (PlayerCore.Instance && FactionManager.IsAllied(faction, PlayerCore.Instance.faction)) { if ((transform.position - PlayerCore.Instance.transform.position).sqrMagnitude <= YardProximitySquared) { var player = PlayerCore.Instance; foreach (var partyMember in PartyManager.instance.partyMembers) { if ((transform.position - partyMember.transform.position).sqrMagnitude > YardProximitySquared && !partyMember.HasRepaired && !partyMember.IsFullyRepaired()) { partyMember.Warp(transform.position + new Vector3(Random.Range(-2, 2), Random.Range(-2, 2))); } } if (!player.HasRepaired) { if (!player.IsFullyRepaired() && !player.GetIsDead()) { player.repairFinalized = false; StartCoroutine(player.StartYardRepair()); } } else if (player.repairFinalized) { player.HealToMax(); } player.HasRepaired = true; if (player.GetTractorTarget() && (player.GetTractorTarget().GetComponent <ShellPart>() || player.GetTractorTarget().GetComponent <Shard>()) && !tractor.GetTractorTarget()) { tractor.SetTractorTarget(player.GetTractorTarget()); player.SetTractorTarget(null); } } foreach (var partyMember in PartyManager.instance.partyMembers) { if (partyMember && partyMember.GetAI().getMode() == AirCraftAI.AIMode.Follow && (transform.position - partyMember.transform.position).sqrMagnitude <= YardProximitySquared) { if (!partyMember.HasRepaired) { if (!partyMember.IsFullyRepaired() && !partyMember.GetIsDead()) { partyMember.repairFinalized = false; StartCoroutine(partyMember.StartYardRepair()); } } else if (partyMember.repairFinalized) { partyMember.HealToMax(); } partyMember.HasRepaired = true; } } if (tractor.GetTractorTarget() && (transform.position - tractor.GetTractorTarget().transform.position).sqrMagnitude <= 10) { if (tractor.GetTractorTarget().GetComponent <ShellPart>()) { PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your part has been added into your inventory.</color>", 4); var shellPart = tractor.GetTractorTarget().GetComponent <ShellPart>(); var info = shellPart.info; info = ShipBuilder.CullSpatialValues(info); ShipBuilder.AddOriginToDictionary(shellPart); PlayerCore.Instance.cursave.partInventory.Add(info); PartIndexScript.AttemptAddToPartsObtained(info); PartIndexScript.AttemptAddToPartsSeen(info); if (NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect != null) { NodeEditorFramework.Standard.YardCollectCondition.OnYardCollect.Invoke(info.partID, info.abilityID, shellPart.droppedSectorName); } Destroy(shellPart.gameObject); } else if (tractor.GetTractorTarget().GetComponent <Shard>()) { PassiveDialogueSystem.Instance.PushPassiveDialogue(ID, "<color=lime>Your shard has been added into your stash.</color>", 4); var shard = tractor.GetTractorTarget().GetComponent <Shard>(); var tiers = new int[] { 1, 5, 20 }; PlayerCore.Instance.shards += tiers[shard.tier]; ShardCountScript.DisplayCount(PlayerCore.Instance.shards); Destroy(shard.gameObject); } } } }