public override void Activate(RPG3_AbilitySettings settings) { if (!isTargeting) { settings.owner.GetComponent <TPSC_RPG1>().activeTargetIndicator = Instantiate(Resources.Load <GameObject>("AOE_Indicator")); settings.owner.GetComponent <TPSC_RPG1>().activeTargetIndicator.transform.localScale = new Vector3(40, 40, 1); settings.owner.GetComponent <TPSC_RPG1>().abilityBeingTargeted = this; isTargeting = true; } else { // Do a thing; if (cdTimer <= 0) { Debug.Log("Firestorm Activated"); settings.owner.GetComponent <TPSC_RPG1>().isChanneling = true; settings.owner.GetComponent <TPSC_RPG1>().channelledAbility = this; settings.owner.GetComponent <TPSC_RPG1>().channelTimer = channelTime; settings.owner.GetComponent <TPSC_RPG1>().GetEntity().SubtractResource(cost); settings.owner.DelayGCD(); cdTimer = cooldown; } else { Debug.Log("On Cooldown: " + cdTimer); } } }
public override void Effect(RPG3_AbilitySettings settings) { float damage = baseDamage + settings.owner.GetComponent <TPSC_RPG1>().GetClass().spellPower *spellDamageMultplier; float critRoll = Random.Range(0.0f, 1.0f); if (critRoll <= settings.owner.GetComponent <TPSC_RPG1>().GetClass().magicalCritChance) { GameObject.Find("_GM").GetComponent <ChatManager>().SendMessageToChat("Critical Hit!", Message.MessageType.combatFlag); damage *= 2; } // Explode, deal damage Collider[] objectsInRange = Physics.OverlapSphere(settings.targetPosition, 5); foreach (Collider c in objectsInRange) { // If there's a healthscript attached, deal damage to it if (c.GetComponent <TPS_Entity>() != null) { if (c.GetComponent <TPS_Entity>() != settings.owner.GetComponent <TPSC_RPG1>().GetEntity()) { c.GetComponent <TPS_Entity>().DamageEntity(damage, null); GameObject.Find("_GM").GetComponent <ChatManager>().SendMessageToChat( settings.owner.GetComponent <TPS_Entity>().entityName + "'s <" + GetName() + "> deals <" + damage + "> to <" + c.GetComponent <TPS_Entity>().entityName + ">.", Message.MessageType.combatLog ); } } } }
public override void Activate(RPG3_AbilitySettings settings) { if (!isTargeting) { settings.owner.GetComponent <TPSC_RPG1>().activeTargetIndicator = Instantiate(Resources.Load <GameObject>("AOE_Indicator")); settings.owner.GetComponent <TPSC_RPG1>().activeTargetIndicator.transform.localScale = new Vector3(10, 10, 1); settings.owner.GetComponent <TPSC_RPG1>().abilityBeingTargeted = this; isTargeting = true; } else { // Do a thing; if (cdTimer <= 0) { Debug.Log("Grapple Activated"); Effect(settings); settings.owner.DelayGCD(); cdTimer = cooldown; } else { Debug.Log("On Cooldown: " + cdTimer); } } }
public static RPG3_AbilitySettings Initialize(TPS_Controller owner, Vector3 targetPosition) { RPG3_AbilitySettings result = new RPG3_AbilitySettings(); result.owner = owner; result.targetPosition = targetPosition; return(result); }
public static RPG3_AbilitySettings Initialize(TPS_Controller owner, TPS_Controller target) { RPG3_AbilitySettings result = new RPG3_AbilitySettings(); result.owner = owner; result.target = target; if (target != null) { result.targetEntity = target.GetComponent <TPS_Entity>(); } return(result); }
public void Initialize(TPSC_RPG1 controller, RPG3_Ability ability) { GameObject o = Instantiate(buttonObj, buttonParent.transform); UnityAction action = delegate { RPG3_AbilitySettings settings = RPG3_AbilitySettings.Initialize(controller, controller.GetCurrentTarget()); ability.Activate(settings); }; o.GetComponentInChildren <Button>().onClick.AddListener(action); o.GetComponentInChildren <RPG3_ButtonHandler>().ability = ability; o.GetComponentsInChildren <Image>()[1].sprite = ability.GetIcon(); }
public override void Activate(RPG3_AbilitySettings settings) { if (cdTimer <= 0) { if (settings.targetEntity == null) { Debug.Log("No Target Selected"); return; } if (settings.target == settings.owner) { Debug.Log("Can't target yourself with that ability"); return; } // Cost = 15 resource if (settings.owner.GetComponent <TPSC_RPG1>().GetEntity().GetCurrentResource() > cost) { // Check if owner is within distance of the target || MELEE ATTACK, 5 units if (Vector3.Distance(settings.owner.transform.position, settings.target.transform.position) < range) { Effect(settings); if (settings.owner.GetComponent <TPSC_RPG1>().GetClass().comboLevel < 5) { settings.owner.GetComponent <TPSC_RPG1>().GetClass().comboLevel++; } Debug.Log(settings.owner.GetComponent <TPSC_RPG1>().GetClass().comboLevel); settings.owner.GetComponent <TPSC_RPG1>().GetEntity().SubtractResource(cost); settings.owner.DelayGCD(); cdTimer = cooldown; } else { Debug.Log("Out of Range"); } } } else { Debug.Log("On Cooldown: " + cdTimer); } }
public override void Effect(RPG3_AbilitySettings settings) { settings.owner.disableControls = true; settings.owner.StartCoroutine(settings.owner.MoveToEntity(settings.targetEntity, 0.25f)); if (settings.owner.GetComponent <TPSC_RPG1>().GetEntity().resource + 40 <= 100) { settings.owner.GetComponent <TPSC_RPG1>().GetEntity().AddResource(40); } else { settings.owner.GetComponent <TPSC_RPG1>().GetEntity().resource = 100; } }
public override void Activate(RPG3_AbilitySettings settings) { if (cdTimer <= 0) { if (settings.targetEntity == null) { Debug.Log("No Target Selected"); return; } if (settings.target == settings.owner) { Debug.Log("Can't target yourself with that ability"); return; } if (settings.owner.GetComponent <TPSC_RPG1>().GetEntity().GetCurrentResource() > cost) { // Check if owner is within distance of the target || RANGED ATTACK, 40 units if (Vector3.Distance(settings.owner.transform.position, settings.target.transform.position) < range) { settings.owner.GetComponent <TPSC_RPG1>().isChanneling = true; settings.owner.GetComponent <TPSC_RPG1>().channelledAbility = this; settings.owner.GetComponent <TPSC_RPG1>().channelTimer = channelTime; settings.owner.GetComponent <TPSC_RPG1>().channelTarget = settings.target; settings.owner.GetComponent <TPSC_RPG1>().GetEntity().SubtractResource(cost); settings.owner.DelayGCD(); cdTimer = cooldown; } else { Debug.Log("Out of Range"); } } } else { Debug.Log("On Cooldown: " + cdTimer); } }
public override void Activate(RPG3_AbilitySettings settings) { // Do a thing; if (cdTimer <= 0) { Debug.Log("Sprint Activated"); Effect(settings); settings.owner.DelayGCD(); cdTimer = cooldown; } else { Debug.Log("On Cooldown: " + cdTimer); } }
public override void Effect(RPG3_AbilitySettings settings) { float damage = settings.owner.GetComponent <TPSC_RPG1>().GetClass().attackPower *physicalDamageMultiplier; float critRoll = Random.Range(0.0f, 1.0f); if (critRoll <= settings.owner.GetComponent <TPSC_RPG1>().GetClass().physicalCritChance) { damage *= 2; GameObject.Find("_GM").GetComponent <ChatManager>().SendMessageToChat("Critical Hit!", Message.MessageType.combatFlag); } settings.targetEntity.DamageEntity(damage, null); GameObject.Find("_GM").GetComponent <ChatManager>().SendMessageToChat( settings.owner.GetComponent <TPS_Entity>().entityName + "'s <" + GetName() + "> deals <" + damage + "> to <" + settings.targetEntity.entityName + ">.", Message.MessageType.combatLog ); }
public override void Activate(RPG3_AbilitySettings settings) { // Do a thing; if (cdTimer <= 0) { Debug.Log("Evocation Activated"); settings.owner.GetComponent <TPSC_RPG1>().isChanneling = true; settings.owner.GetComponent <TPSC_RPG1>().channelledAbility = this; settings.owner.GetComponent <TPSC_RPG1>().channelTimer = channelTime; settings.owner.DelayGCD(); cdTimer = cooldown; } else { Debug.Log("On Cooldown: " + cdTimer); } }
public override void Activate(RPG3_AbilitySettings settings) { if (cdTimer <= 0) { if (settings.targetEntity == null) { Debug.Log("No Target Selected"); return; } if (settings.target == settings.owner) { Debug.Log("Can't target yourself with that ability"); return; } // Check if owner is within distance of the target if (Vector3.Distance(settings.owner.transform.position, settings.targetEntity.transform.position) < 20.0f) { if (!settings.owner.disableControls) { Effect(settings); cdTimer = cooldown; settings.owner.DelayGCD(); } } else { Debug.Log("Out of Range"); } } else { Debug.Log("On Cooldown: " + cdTimer); } }
// ######################################################### // # ---------------------- UPDATE ----------------------- # // ######################################################### public override void Tick() { base.Tick(); if (owner != null) { if (!owner.gm.isPaused) { if (!disableControls) { Motion(); } // TARGETING SYSTEM if (activeTargetIndicator != null) { Ray ray = cam.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo)) { // Get Collision Data /////////////////////////////////////////////////////////////////////////////////////////////// activeTargetIndicator.transform.position = hitInfo.point + hitInfo.normal * 0.1f; } } // CHANNELLING if (channelledAbility != null) { channelingBar.enabled = true; channelingText.enabled = true; if (channelTimer > 0) { channelTimer -= Time.deltaTime; isChanneling = true; channelingText.text = channelledAbility.GetName() + " : " + Mathf.Round(channelTimer * 100) / 100; channelingBar.fillAmount = (channelTimer / 2.5f); } if (channelTimer <= 0) { RPG3_AbilitySettings settings = new RPG3_AbilitySettings(); switch (channelledAbility.GetAbilityMode()) { case RPG3_AbilityMode.Targeted: settings = RPG3_AbilitySettings.Initialize(this, channelTarget); break; case RPG3_AbilityMode.Positional: settings = RPG3_AbilitySettings.Initialize(this, abilityTargetPoint); break; case RPG3_AbilityMode.Self: settings = RPG3_AbilitySettings.Initialize(this, channelTarget); break; } channelledAbility.Effect(settings); channelledAbility = null; channelTarget = null; channelingBar.enabled = false; channelingText.enabled = false; } } hotbar.HotkeyTracker(); if (Input.GetKeyDown(KeyCode.Mouse0)) { // If a UI element was pressed, break out. if (uiRaycaster.Raycast().Count > 0) { return; } if (abilityBeingTargeted == null) { // Clear the active target if worldspace was clicked if (targetController != null || targetEntity != null) { targetController = null; targetEntity = null; } } // if the UI was not pressed, raycast to world position Ray ray = cam.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo)) { // Get Collision Data /////////////////////////////////////////////////////////////////////////////////////////////// GameObject targetHit = hitInfo.collider.gameObject; Debug.Log(targetHit); // Activate an ability that's being targeted if (abilityBeingTargeted != null) { if (activeTargetIndicator != null) { Destroy(activeTargetIndicator); activeTargetIndicator = null; } RPG3_AbilitySettings settings = RPG3_AbilitySettings.Initialize(this, hitInfo.point); abilityBeingTargeted.Activate(settings); abilityTargetPoint = hitInfo.point; abilityBeingTargeted.isTargeting = false; abilityBeingTargeted = null; } // Selection Command if (targetHit.GetComponentInParent <TPS_Controller>() != null) { targetController = targetHit.GetComponentInParent <TPS_Controller>(); } if (targetHit.GetComponentInParent <TPS_Entity>() != null) { //Debug.Log(hitInfo.collider.gameObject.name + " selected"); targetEntity = targetHit.GetComponentInParent <TPS_Entity>(); /////////////////////////////////////////////////////////////////////////////////////////////// } } } if (Input.GetKeyDown(KeyCode.Mouse1)) { // Activate an ability that's being targeted if (abilityBeingTargeted != null) { if (!isChanneling) { if (activeTargetIndicator != null) { Destroy(activeTargetIndicator); activeTargetIndicator = null; } abilityTargetPoint = Vector3.zero; abilityBeingTargeted.isTargeting = false; abilityBeingTargeted = null; } } } // Update Canvas if (guiCanvas.enabled) { // Health healthText.text = entity.GetCurrentHealth() + " / " + entity.GetMaxHealth(); float currentHealth = entity.GetCurrentHealth(); float maxHealth = entity.GetMaxHealth(); healthBar.fillAmount = currentHealth / maxHealth; // Resource resourceText.text = entity.GetCurrentResource() + " / " + entity.GetMaxResource(); float currentResource = entity.GetCurrentResource(); float maxResource = entity.GetMaxResource(); resourceBar.fillAmount = currentResource / maxResource; // Target System if (targetEntity != null) { if (!targetInfoDisplay.activeInHierarchy) { targetInfoDisplay.SetActive(true); } // Health targetHealthText.text = targetEntity.GetCurrentHealth() + " / " + targetEntity.GetMaxHealth(); float currentTargetHealth = targetEntity.GetCurrentHealth(); float maxTargetHealth = targetEntity.GetMaxHealth(); targetHealthBar.fillAmount = currentTargetHealth / maxTargetHealth; // Resource targetResourceText.text = targetEntity.GetCurrentResource() + " / " + targetEntity.GetMaxResource(); float currentTargetResource = targetEntity.GetCurrentResource(); float maxTargetResource = targetEntity.GetMaxResource(); targetResourceBar.fillAmount = currentTargetResource / maxTargetResource; } else { if (targetInfoDisplay.activeInHierarchy) { targetInfoDisplay.SetActive(false); } } } } } }
public abstract void Effect(RPG3_AbilitySettings settings);
public abstract void Activate(RPG3_AbilitySettings settings);
public override void Effect(RPG3_AbilitySettings settings) { // Move to position settings.owner.GetComponent <TPSC_RPG1>().StartCoroutine(settings.owner.GetComponent <TPSC_RPG1>().SpeedBuff(1.5f, 10.0f)); }
public override void Effect(RPG3_AbilitySettings settings) { // Move to position settings.owner.StartCoroutine(settings.owner.MoveTo(settings.targetPosition, 0.25f)); }
public override void Effect(RPG3_AbilitySettings settings) { settings.owner.GetComponent <TPSC_RPG1>().GetEntity().resource = settings.owner.GetComponent <TPSC_RPG1>().GetEntity().maxResource; }