예제 #1
0
 // Start is called before the first frame update
 void Start()
 {
     animator               = GetComponent <Animator>();
     startMagicAttack       = false;
     timeLeft               = 5;
     dynamicAttackDirection = mousePositionDetector.CalculateWorldPosition();
 }
예제 #2
0
    protected override void Activate()
    {
        GameObject      obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0f, 2f, 0f), new Quaternion());
        HorizontalSwipe pbh = obj.GetComponent <HorizontalSwipe>();

        obj.transform.LookAt(mpd.CalculateWorldPosition());
        var lookPos = mpd.CalculateWorldPosition() - transform.position;

        lookPos.y = 0;
        var rotation = Quaternion.LookRotation(lookPos);

        obj.transform.localScale = new Vector3(5f, 5f, 5f);
        pbh.speed = projSpeed;
        Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), false, false, true);

        pbh.dmg = stats.RealDamage(dmg);
        TimedBuff tb   = slowdown.Instance;
        Stat      stat = tb.Stats.Find(item => item.Name == Stat.MOVE_SPEED_MULT);

        // Debug.Log("just like the white winged dove : " + stat.Name + stat.Value + slowdownMult);
        stat = new Stat(stat.Name, StatBlock.CalcMult(stat.Value, slowdownMult));
        tb.Stats.Remove(new Stat(Stat.MOVE_SPEED_MULT));
        tb.Stats.Add(stat);
        tb.Duration += slowdownDur;
        tb.IsUnique  = !slowdownStack;
        pbh.dmg.buffs.Add(tb);
        pbh.friendly = true;
        pbh.ttl      = 4000f;
        pbh.player   = gameObject;
    }
예제 #3
0
    IEnumerator FireProjectile()
    {
        int currRot  = -(int)size;        //30
        int currCast = 0;

        while (currCast < projCount)
        {
            //needs to file projectile along cone shape
            GameObject obj     = Instantiate(projectile, gameObject.transform.position + new Vector3(0f, 2f, 0f), new Quaternion());
            var        lookPos = mpd.CalculateWorldPosition() - transform.position;
            lookPos.y = 0;
            var rotation         = Quaternion.LookRotation(lookPos);
            ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>();
            obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f);
            obj.transform.Rotate(new Vector3(Random.Range(0, 10), currRot, 0));
            currRot += (int)((2 * size) / projCount);
            obj.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
            pbh.speed = 15f;
            Damage dmg = new Damage(0f, 0.45f * Random.Range(dmgMin, dmgMax), true, false, false);
            pbh.dmg      = stats.RealDamage(dmg);
            pbh.ttl      = 2f;
            pbh.friendly = true;
            ++currCast;
        }
        yield return(null);
    }
예제 #4
0
    protected override void Activate()
    {
        GameObject obj = Instantiate(aoeObj, mpd.CalculateWorldPosition(), new Quaternion());

        obj.transform.localScale = new Vector3(size, 1f, size);
        AoeBehave ab = obj.GetComponent <AoeBehave>();

        ab.friendly = true;
        ab.ttl      = duration;
        ab.Friend   = new List <TimedBuff>();
        ab.Enemy    = new List <TimedBuff>();
        TimedBuff ignite = Ignite.Instance;
        Stat      stat   = ignite.Stats.Find(item => item.Name == Stat.HEALTH_REGEN);

        stat.Value = stats.RealDotDamage(stat.Value, igniteMult, false, true, false, false, true);
        ab.Enemy.Add(ignite);
        if (buffs)
        {
            ab.Friend.Add(Friendly.Instance);
        }
        if (debuffs)
        {
            ab.Enemy.Add(Enemy.Instance);
        }
    }
    protected override void Activate()
    {
        GameObject       obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 1.5f, 0), new Quaternion());
        ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>();
        var lookPos          = mpd.CalculateWorldPosition() - transform.position;

        lookPos.y = 0;
        var rotation = Quaternion.LookRotation(lookPos);

        obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f);
        obj.transform.Translate(Vector3.forward * 1.3f);
        obj.transform.localScale = new Vector3(3.3f, 1f, 3.3f);
        Damage dmg;

        if (cost < 0.00001)
        {
            dmg = new Damage(Random.Range(dmgMin, dmgMax), 0, false, true, false);
        }
        else
        {
            float hplost = StatBlock.CalcMult(stats.HealthCur, stats.PhantomHpMult) * cost;
            stats.HealthCur -= hplost;
            Debug.Log("Cost player " + hplost + " hp.");
            dmg = new Damage(Random.Range(dmgMin, dmgMax), hplost / 2f, false, true, true);
        }
        pbh.dmg          = stats.RealDamage(dmg);
        pbh.dmg.callback = this;
    }
예제 #6
0
    protected override void Activate()
    {
        GameObject       obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion());
        ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>();
        //obj.transform.LookAt(mpd.CalculateWorldPosition());
        var lookPos = mpd.CalculateWorldPosition() - transform.position;

        lookPos.y = 0;
        var rotation = Quaternion.LookRotation(lookPos);

        obj.transform.rotation   = Quaternion.Slerp(transform.rotation, rotation, 1f);
        obj.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f);
        pbh.speed = projSpeed;
        Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), false, false, true);

        pbh.dmg = stats.RealDamage(dmg);
        TimedBuff tb   = ignite.Instance;
        Stat      stat = tb.Stats.Find(item => item.Name == Stat.HEALTH_REGEN);

        stat.Value   = stats.RealDotDamage(stat.Value, igniteMult, false, true, false, false, true);
        tb.Duration += igniteDur;
        tb.IsUnique  = !igniteStack;
        pbh.dmg.buffs.Add(tb);
        pbh.friendly = true;
        pbh.ttl      = 2f;
    }
예제 #7
0
    // Start is called before the first frame update
    protected override void Activate()
    {
        fastness = speed;
        ttl      = duration;
        if (fasttimes)
        {
            abil.cdRemain = 0.1f;
            taptime       = doubletapTolerance;
        }
        else
        {
            abil.cdRemain = MajorCooldown;
        }
        fasttimes = !fasttimes;

        destination = mpd.CalculateWorldPosition();
        RemyMovement.destination = destination;
    }
예제 #8
0
    void FireProjectile()
    {
        GameObject obj     = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion());
        var        lookPos = mpd.CalculateWorldPosition() - transform.position;

        lookPos.y = 0;
        var rotation         = Quaternion.LookRotation(lookPos);
        ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>();

        obj.transform.rotation   = Quaternion.Slerp(transform.rotation, rotation, 1f);
        obj.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
        pbh.speed = projSpeed;
        Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), true, false, false);

        pbh.dmg      = stats.RealDamage(dmg);
        pbh.ttl      = 2f;
        pbh.friendly = true;
    }
예제 #9
0
    IEnumerator FireProjectile()
    {
        Vector3 posMod    = Vector3.zero;
        int     rotMod    = 0;
        int     tempCount = 1;
        int     currCount = 0;

        while (currCount < projCount)
        {
            GameObject       obj = Instantiate(projectile, mpd.CalculateWorldPosition() + new Vector3(0, 6, 0), new Quaternion()); //at mouse position, 6m up.
            ProjectileBehave phb = obj.GetComponent <ProjectileBehave>();
            obj.transform.Rotate(90, rotMod, 0);                                                                                   //rotate around pivot
            obj.transform.Translate(posMod);                                                                                       //adjust forward
            obj.transform.localScale = new Vector3(2f, 2f, 2f);
            currCount++;
            rotMod = rotMod + (360 / tempCount);
            if (currCount == 1)
            {
                posMod = new Vector3(2, 0, 0);
                if (projCount != 7)
                {
                    tempCount = (int)((projCount - 1) / 3);
                }
                else
                {
                    tempCount = 6;
                }
            }
            else if (currCount == ((projCount - 1) / 3) + 1 && projCount != 7)
            {
                posMod    = new Vector3(4, 0, 0);
                tempCount = (int)(projCount - 1) - tempCount;
                rotMod    = 0;
            }
            phb.friendly = true;
            phb.speed    = 15;
            Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), true, false, false);
            phb.dmg = stats.RealDamage(dmg);
            phb.ttl = 2f;
        }
        yield return(null);
    }
예제 #10
0
    void FireProjectile()
    {
        GameObject       obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion());
        ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>();
        //obj.transform.LookAt(mpd.CalculateWorldPosition());
        var lookPos = mpd.CalculateWorldPosition() - transform.position;

        lookPos.y = 0;
        var rotation = Quaternion.LookRotation(lookPos);

        obj.transform.rotation   = Quaternion.Slerp(transform.rotation, rotation, 1f);
        obj.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f);

        obj.transform.Rotate(Vector3.up * 90 * Random.Range(-projSpread, projSpread), Space.World);
        pbh.speed = projSpeed;
        Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), false, false, true);

        //Debug.Log("Magic Dmg: " + dmg.magicDmgReal);
        pbh.dmg = stats.RealDamage(dmg);
        //Debug.Log("Real Magic Dmg: " + pbh.dmg.magicDmgReal);
        pbh.friendly = true;
        pbh.ttl      = 2f;
    }