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);
        }
    }
Example #14
0
    // #########################################################
    // # ---------------------- 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;
 }