diff --git a/Assets/Scripts/Functional Definitions/Abilities/InvertTractor.cs b/Assets/Scripts/Functional Definitions/Abilities/InvertTractor.cs index d49f3d01d..8d4c9f334 100644 --- a/Assets/Scripts/Functional Definitions/Abilities/InvertTractor.cs +++ b/Assets/Scripts/Functional Definitions/Abilities/InvertTractor.cs @@ -7,6 +7,7 @@ public override void SetTier(int abilityTier) if (abilityTier < 1) abilityTier = 1; base.SetTier(abilityTier); activeDuration = 5 * abilityTier; + cooldownDuration = 5 + abilityTier * 5; } protected override void Awake() @@ -19,11 +20,11 @@ protected override void Awake() } /// - /// Returns the engine power to the original value + /// Disable invert tractor /// public override void Deactivate() { - Core.tractorSwitched = false; + Core.invertTractors--; if (Core is ShellCore core && !MasterNetworkAdapter.lettingServerDecide) core.SetTractorTarget(null); base.Deactivate(); } @@ -35,13 +36,12 @@ public override void ActivationCosmetic(Vector3 targetPos) Execute(); } - /// - /// Increases core engine power to speed up the core + /// Invert tractor /// protected override void Execute() { - Core.tractorSwitched = true; + Core.invertTractors++; AudioManager.PlayClipByID("clip_buff", transform.position); base.Execute(); } diff --git a/Assets/Scripts/Functional Definitions/Interaction Definitions/TractorBeam.cs b/Assets/Scripts/Functional Definitions/Interaction Definitions/TractorBeam.cs index 45a44d9a0..de2734160 100644 --- a/Assets/Scripts/Functional Definitions/Interaction Definitions/TractorBeam.cs +++ b/Assets/Scripts/Functional Definitions/Interaction Definitions/TractorBeam.cs @@ -138,14 +138,14 @@ protected void FixedUpdate() } else if (dist > 2f) { - if (!owner.tractorSwitched) + if (!owner.isTractorSwitched) { rigidbody.AddForce(dir.normalized * (dist - 2F) * rigidbody.mass * tractorStrength / Time.fixedDeltaTime); } else { - owner.GetComponent().AddForce(-dir.normalized * (dist - 2F) * - rigidbody.mass * tractorStrength / Time.fixedDeltaTime); + var ownerRigbody = owner.GetComponent(); + ownerRigbody.AddForce(-dir.normalized * (dist - 2F) * ownerRigbody.mass * tractorStrength / Time.fixedDeltaTime); } } } @@ -165,7 +165,7 @@ protected void LateUpdate() private float auxillaryScaleY = 0.6F; protected void TractorBeamUpdate() { - lineRenderer.material.color = owner.tractorSwitched ? new Color32(255, 32, 255, 128) : new Color32(88, 239, 255, 128); + lineRenderer.material.color = owner.isTractorSwitched ? new Color32(255, 32, 255, 128) : new Color32(88, 239, 255, 128); this.energyPickupTimer -= Time.fixedDeltaTime * this.energyPickupSpeed; // Grab energy automatically after a while when the craft is not pulling something more important if (energyEnabled && (!target) && (this.energyPickupTimer < 0) && !owner.IsInvisible && !owner.isAbsorbing) @@ -209,7 +209,7 @@ protected void TractorBeamUpdate() coreGlow.gameObject.SetActive(true); targetGlow.gameObject.SetActive(true); var x = auxillaryParticleSystem.GetComponentInChildren().main; - x.startColor = new ParticleSystem.MinMaxGradient(owner.tractorSwitched ? new Color32(255, 32, 255, 128) : new Color32(88, 239, 255, 128)); + x.startColor = new ParticleSystem.MinMaxGradient(owner.isTractorSwitched ? new Color32(255, 32, 255, 128) : new Color32(88, 239, 255, 128)); auxillaryParticleSystem.SetActive(true); auxillaryParticleSystem.transform.position = Vector3.Lerp(transform.position, target.transform.position, 0.5F); auxillaryParticleSystem.transform.localScale = new Vector3((target.transform.position - transform.position).magnitude/0.2F, auxillaryScaleY, 1); @@ -262,7 +262,7 @@ public void SetTractorTarget(Draggable newTarget, bool fromClient = false, bool lineRenderer.enabled = (newTarget != null); } - if (target) + if (target && (!owner.isTractorSwitched || !target.GetComponent())) { target.RemoveDrag(); } @@ -277,7 +277,7 @@ public void SetTractorTarget(Draggable newTarget, bool fromClient = false, bool } } - if (target && ((MasterNetworkAdapter.mode != MasterNetworkAdapter.NetworkMode.Client && (!owner.tractorSwitched || !target.GetComponent())) || fromServer)) + if (target && ((MasterNetworkAdapter.mode != MasterNetworkAdapter.NetworkMode.Client && (!owner.isTractorSwitched || !target.GetComponent())) || fromServer)) { target.AddDrag(); } @@ -314,7 +314,7 @@ private bool IsValidDraggableTarget(Draggable newTarget) public static bool InvertTractorCheck(Entity owner, Draggable newTarget) { Entity requestedTarget = newTarget.gameObject.GetComponent(); - if (owner.tractorSwitched || !requestedTarget || (FactionManager.IsAllied(requestedTarget.faction, owner.faction) && (requestedTarget.isStandardTractorTarget))) + if (owner.isTractorSwitched || !requestedTarget || (FactionManager.IsAllied(requestedTarget.faction, owner.faction) && (requestedTarget.isStandardTractorTarget))) { return true; } diff --git a/Assets/Scripts/Game Object Definitions/Entity Definitions/Entity.cs b/Assets/Scripts/Game Object Definitions/Entity Definitions/Entity.cs index 26a85f330..4a1c53d2b 100644 --- a/Assets/Scripts/Game Object Definitions/Entity Definitions/Entity.cs +++ b/Assets/Scripts/Game Object Definitions/Entity Definitions/Entity.cs @@ -337,6 +337,8 @@ public float GetDamageFactor() [HideInInspector] public int absorptions = 0; + [HideInInspector] + public int invertTractors = 0; public bool canUseAbilities = true; @@ -344,7 +346,11 @@ public float GetDamageFactor() { get { return absorptions > 0; } } - public bool tractorSwitched = false; + + public bool isTractorSwitched // if true, switch tractor + { + get { return invertTractors > 0; } + } public SectorManager sectorMngr; protected Entity lastDamagedBy; @@ -753,6 +759,7 @@ public virtual void Rebuild() stealths = 0; absorptions = 0; + invertTractors = 0; BuildEntity(); GetComponentInChildren().Initialize(); // initialize the minimap dot diff --git a/Assets/Scripts/HUD Scripts/ReticleScript.cs b/Assets/Scripts/HUD Scripts/ReticleScript.cs index 5721d1236..70755d65b 100644 --- a/Assets/Scripts/HUD Scripts/ReticleScript.cs +++ b/Assets/Scripts/HUD Scripts/ReticleScript.cs @@ -302,7 +302,7 @@ void Update() // it's draggable if it's not an entity or it's a draggable entity with the same faction if (draggable && (targSys.GetTarget().position - craft.transform.position).sqrMagnitude <= 400 && (!targSys.GetTarget().GetComponent() - || FactionManager.IsAllied(targSys.GetTarget().GetComponent().faction, craft.faction) || craft.tractorSwitched)) + || FactionManager.IsAllied(targSys.GetTarget().GetComponent().faction, craft.faction) || craft.isTractorSwitched)) { craft.SetTractorTarget((craft.GetTractorTarget() == draggable) ? null : draggable); }