예제 #1
0
 private void SetUserAnimParams(SkillUser user)
 {
     user.userAnim.SetFloat("skillX", Mathf.Round(user.userAim.aimDirection.normalized.x));
     user.userAnim.SetFloat("skillY", Mathf.Round(user.userAim.aimDirection.normalized.y));
     user.userAnim.SetFloat("horizontal", user.userAim.aimDirection.normalized.x);
     user.userAnim.SetFloat("vertical", user.userAim.aimDirection.normalized.y);
 }
예제 #2
0
    private void CastProjectile(PoolObject projectile, SkillUser user, bool rotateProjectile = true)
    {
        PoolObject p = user.userPool.SpawnTargetObject(projectile, 10);

        if (soundOnCastEach)
        {
            EazySoundManager.PlaySound(soundOnCastEach, 0.1f);
        }
        if (user.skillSpawnPoint)
        {
            p.transform.position = user.skillSpawnPoint.position;
        }
        else
        {
            p.transform.position = user.transform.position;
        }
        //p.transform.position += user.userAim.aimDirection.normalized * spawnDistanceMultiplier;
        if (rotateProjectile)
        {
            user.userAim.RotateObjectToAim(p.transform);
        }
        p.GetComponent <ProjectileObject>().InitializeProjectile(user);
        if (castingKnockback > 0)
        {
            user.userStats.rb.velocity = Vector3.zero;
            Vector3 kDirection = user.userAim.aimDirection.normalized;
            if (!forwardCastingKnockback)
            {
                kDirection.y *= -1; kDirection.x *= -1; //eu sei que dava pra fazer numa conta só, mas só assim vai
            }
            user.userStats.rb.AddForce(kDirection * castingKnockback);
        }
    }
예제 #3
0
    public override bool Initialize(SkillUser user)
    {
        if (skillsToUse == null || skillsToUse.Length <= 0)//não tem skills configuradas
        {
            Debug.LogError("Skill Combo Sequence Object has no skills.");
            return(false);
        }
        //tem skills
        Skill nextSkill = skillsToUse[0];

        if (user.timeSinceLastSkill <= timeToUseNextSkill)//vamos ver qual é a proxima skill a se usar
        {
            int targetSkillIndex = 0;
            for (int i = 0; i < skillsToUse.Length; i++)
            {
                if (user.lastUsedSkill != null && user.lastUsedSkill == skillsToUse[i])
                {
                    targetSkillIndex = (i + 1) % skillsToUse.Length;
                    //Debug.Log("advancing skill");
                }
            }
            //Debug.Log("Combo skill id: "+targetSkillIndex);
            nextSkill = skillsToUse[targetSkillIndex];
        }
        user.InitializeSkill(nextSkill);
        return(false);
    }
예제 #4
0
    public object GetSkillJson()
    {
        string    jsonString  = File.ReadAllText(Application.dataPath + "/Resources/Data/Skill.json");
        SkillUser skillObject = JsonMapper.ToObject <SkillUser>(jsonString);

        return(skillObject);
    }
예제 #5
0
    public override void InitState(EntityStats receiver, EntityStats applier = null)
    {
        StateStack ss = receiver.GetStack(this);

        if (ss == null)
        {
            ss = new StateStack(this, stunDuration, 1);
            receiver.states.Add(ss);
        }
        else
        {
            ss.ResetTimer();
        }

        /* receiver.canMove = false;
         * SkillUser su = receiver.GetComponent<SkillUser>();
         * if(su){
         *  su.canCastSkills = false;
         * } */
        SkillUser su = receiver.GetComponent <SkillUser>();

        if (su)
        {
            su.canCastSkills = false;
        }
        receiver.stunned = true;
    }
예제 #6
0
 public static void Damage(object key, SkillUser su, Tile target, GameEvent ge)
 {
     if (target.Inhabitant != null)
     {
         ge.AddDamageApplication(target.Inhabitant, new Damage(target.Inhabitant, su.SkillUsageStats[key]));
     }
 }
예제 #7
0
파일: Gear.cs 프로젝트: ActionAlgot/srpg
        public override void AffectEffect(object key, SkillUser su, Tile target, GameEvent ge, Action <object, SkillUser, Tile, GameEvent> effect)
        {
            if (target.Inhabitant != null)
            {
                int dif = su.Place.X - target.X;
                if (dif == 0)
                {
                    dif = su.Place.Y - target.Y;
                }
                dif = Math.Abs(dif);

                var nKey = new { s = key, w = this, dist = dif };
                if (!su.SkillUsageStats.ContainsKey(nKey))
                {
                    su.SkillUsageStats[nKey] = new StatSet();
                    su.SkillUsageStats[nKey].AddSubSet(su.SkillUsageStats[key]);
                    foreach (var m in PrivMods)
                    {
                        m.Affect(su.SkillUsageStats[nKey]);
                    }
                    if (dif == 2)                       //halve effect v targets 2 tiles away
                    {
                        SecondaryTargetMod.Affect(su.SkillUsageStats[nKey]);
                    }
                }

                effect(nKey, su, target, ge);
            }
        }
예제 #8
0
 public override void FrameUpdate(SkillUser user)
 {
     if (updateAimDuringVolley)
     {
         SetUserAnimParams(user);
     }
 }
예제 #9
0
    public override void InitializeProjectile(SkillUser user)
    {
        anim.Play("Idle", 0, 0);
        //hitCollider.enabled = false;
        meleeDirection = user.userAim.GetGeneralDirection();
        projectileDamageSource.damageValue = (int)(Random.Range(user.userStats.strength.Value - 1, user.userStats.strength.Value + 2) * strengthMultiplier);
        projectileDamageSource.hostileTo   = user.userStats.enemyEntitySets;
        projectileDamageSource.owner       = user.userStats;
        projectileDamageSource.skillType   = SkillType.Melee;
        projectileDamageSource.damageType  = DamageType.Physical;

        if (meleeDirection == GeneralDirection.DOWN)
        {
            projectileDamageSource.transform.rotation = Quaternion.Euler(0, 0, -90);
        }
        else if (meleeDirection == GeneralDirection.UP)
        {
            projectileDamageSource.transform.rotation = Quaternion.Euler(0, 0, 90);
        }
        else if (meleeDirection == GeneralDirection.RIGHT)
        {
            projectileDamageSource.transform.rotation = Quaternion.Euler(0, 0, 0);
        }
        else if (meleeDirection == GeneralDirection.LEFT)
        {
            projectileDamageSource.transform.rotation = Quaternion.Euler(0, 0, 180);
        }

        StartCoroutine(HitRoutine());
    }
예제 #10
0
 public override void FrameUpdate(SkillUser user)
 {
     if (keepUpdatingSkillAnim)
     {
         user.userAnim.SetFloat("skillX", Mathf.Round(user.userAim.aimDirection.normalized.x));
         user.userAnim.SetFloat("skillY", Mathf.Round(user.userAim.aimDirection.normalized.y));
     }
 }
예제 #11
0
    private void Awake()
    {
        trans       = GetComponent <Transform>();
        skillUser   = playerMovement.GetComponent <SkillUser>();
        playerStats = playerMovement.GetComponent <PlayerStats>();
        int curID = EazySoundManager.PlaySound(singleAudio, baseVolume, true, null);

        currentAudio = EazySoundManager.GetAudio(curID);
    }
예제 #12
0
    public override void InitializeProjectile(SkillUser user)
    {
        anim.Play("Fire", 0, 0);
        damageInfo.damageValue    = (int)(baseHitDamage * damageMultiplier.GetValue());
        damageInfo.hostileTo      = user.userStats.enemyEntitySets;
        damageInfo.owner          = user.userStats;
        damageInfo.knockbackForce = 0;

        //skill e damage type setada no inspector
    }
예제 #13
0
    public override void ConcludeState(EntityStats receiver)
    {
        receiver.stunned = false;
        SkillUser su = receiver.GetComponent <SkillUser>();

        if (su)
        {
            su.canCastSkills = true;
        }
    }
예제 #14
0
 public override void FrameUpdate(SkillUser user)
 {
     if (user.timeSinceLastSkill >= healingTime)
     {
         if (stopAnim)
         {
             user.ReplaceSkillAnimationSet(stopAnim.GetSetForRace(user.userStats.baseRace));
         }
         //user.userAnim.Play("Skill",0,0);
     }
 }
예제 #15
0
 public override void StepSkill(SkillUser user)
 {
     if (user.skillStep == 1)
     {
         ApplyBuffs(user);
     }
     else if (user.skillStep > 1)
     {
         ConcludeSkill(user);
     }
 }
예제 #16
0
    public void CastSkill(PoolObject projectile, SkillUser user)
    {
        PoolObject p = user.userPool.SpawnTargetObject(projectile, 1);

        if (user.userAim.focusPoint != null)
        {
            p.transform.position = user.userAim.focusPoint;
        }
        p.transform.position = new Vector3(p.transform.position.x, p.transform.position.y, 0);
        p.GetComponent <ProjectileObject>().InitializeProjectile(user);
    }
예제 #17
0
 public override void StepSkill(SkillUser user)
 {
     if (user.skillStep == 1)
     {
         CastSkill(effectToSpawn, user);
     }
     else if (user.skillStep > 1)
     {
         ConcludeSkill(user);
     }
 }
예제 #18
0
 public override void StepSkill(SkillUser user)
 {
     if (user.skillStep == 1)
     {
         ApplyAOE(user);
     }
     else if (user.skillStep > 1)
     {
         EndSkill(user);
     }
 }
예제 #19
0
 public override void StepSkill(SkillUser user)
 {
     //Debug.Log("step");
     if (user.skillStep == 1)
     {
         SpawnSlash(user);
     }
     else if (user.skillStep > 1)
     {
         ConcludeSlash(user);
     }
 }
예제 #20
0
파일: Gear.cs 프로젝트: ActionAlgot/srpg
        public override IEnumerable <Tile> Range(object key, SkillUser su)
        {
            if (su.Place == null)
            {
                throw new ArgumentException("SkillUser must be placed.");
            }
            Tile t;

            t = su.Place.North;
            if (t != null)
            {
                yield return(t);

                t = t.North;
                if (t != null)
                {
                    yield return(t);
                }
            }
            t = su.Place.East;
            if (t != null)
            {
                yield return(t);

                t = t.East;
                if (t != null)
                {
                    yield return(t);
                }
            }
            t = su.Place.West;
            if (t != null)
            {
                yield return(t);

                t = t.West;
                if (t != null)
                {
                    yield return(t);
                }
            }
            t = su.Place.South;
            if (t != null)
            {
                yield return(t);

                t = t.South;
                if (t != null)
                {
                    yield return(t);
                }
            }
        }
예제 #21
0
 public override bool Initialize(SkillUser user)
 {
     if (castingAnimSet)
     {
         user.ReplaceSkillAnimationSet(castingAnimSet.GetSetForRace(user.userStats.baseRace));
     }
     user.userStats.rb.velocity = Vector3.zero;
     user.userStats.canMove     = false;
     user.userAnim.Play("Skill", 0, 0);
     user.ComputeSkill(this);
     user.userStats.ChangeMana(-skillCost);
     return(true);
 }
예제 #22
0
 public override void InitializeProjectile(SkillUser user)
 {
     anim.ResetTrigger("fade");
     anim.Play("Travel", 0, 0);
     currentSpeed = travelSpeed;
     //col.enabled = true;
     moving    = true;
     fadeTimer = timeToFade;
     projectileDamageSource.owner          = user.userStats;
     projectileDamageSource.damageValue    = (int)(Random.Range(user.userStats.mind.Value - 1, user.userStats.mind.Value + 1) * 1.5f);
     projectileDamageSource.hostileTo      = user.userStats.enemyEntitySets;
     projectileDamageSource.knockbackForce = knockback;
 }
예제 #23
0
    public override void InitializeProjectile(SkillUser user)
    {
        float currentAngle = 0;

        while (currentAngle < 360)
        {
            PoolObject p = pool.SpawnTargetObject(iceShardPrefab, 20);
            p.GetComponent <ProjectileObject>().InitializeProjectile(user);
            p.transform.position = transform.position;
            p.transform.rotation = Quaternion.Euler(0, 0, currentAngle);
            currentAngle        += angleBetweenShards;
        }
    }
예제 #24
0
 public void ApplyBuffs(SkillUser user)
 {
     user.userStats.ApplyState(buffToApply);
     if (stillGraph)
     {
         PoolObject p = user.userPool.SpawnTargetObject(stillGraph, 1, user.transform);
         p.GetComponent <StillGraph>().Initialize(null, user.userStats.GetStack(buffToApply).stateDuration, user.transform);
     }
     if (castEffect)
     {
         PoolObject p = user.userPool.SpawnTargetObject(castEffect, 1, user.transform);
         p.transform.localPosition = Vector3.zero;
     }
 }
예제 #25
0
 public IEnumerable <Tile> Range(SkillUser su)
 {
     //init statset here because this is always first method called on skill
     if (!su.SkillUsageStats.ContainsKey(this))
     {
         su.SkillUsageStats[this] = new StatSet();
         su.SkillUsageStats[this].AddSubSet(su.Stats);
         foreach (var m in Mods)
         {
             m.Affect(su.SkillUsageStats[this]);
         }
     }
     return(_Range(this, su));
 }
예제 #26
0
    void Start()
    {
        rb     = GetComponent <Rigidbody2D>();
        anim   = GetComponent <Animator>();
        spr    = GetComponent <SpriteRenderer>();
        skills = GetComponent <SkillUser>();
        sp     = spr.sprite;

        MapaCyber mc = FindObjectOfType <MapaCyber>();

        if (mc != null)
        {
            transform.position = MapaCyber.sala[0].transform.position;
        }
    }
예제 #27
0
파일: Gear.cs 프로젝트: ActionAlgot/srpg
        public virtual void AffectEffect(object key, SkillUser su, Tile target, GameEvent ge, Action <object, SkillUser, Tile, GameEvent> effect)
        {
            var nKey = new { s = key, w = this };

            if (!su.SkillUsageStats.ContainsKey(nKey))
            {
                su.SkillUsageStats[nKey] = new StatSet();
                su.SkillUsageStats[nKey].AddSubSet(su.SkillUsageStats[key]);
                foreach (var m in PrivMods)
                {
                    m.Affect(su.SkillUsageStats[nKey]);
                }
            }
            effect(nKey, su, target, ge);
        }
예제 #28
0
 public override void InitializeProjectile(SkillUser user)
 {
     anim.ResetTrigger("fade");
     anim.Play("Travel", 0, 0);
     currentSpeed = travelSpeed;
     tickCounter  = 0; fadeTimer = 0; tickTimer = 0;
     col.enabled  = true;
     moving       = true;
     victim       = null;
     fadeTimer    = timeToFade;
     projectileDamageSource.damageValue    = (int)(Random.Range(user.userStats.strength.Value - 1, user.userStats.strength.Value + 1) * impactMultipler);
     projectileDamageSource.hostileTo      = user.userStats.enemyEntitySets;
     projectileDamageSource.knockbackForce = knockback;
     projectileDamageSource.owner          = user.userStats;
 }
예제 #29
0
 public void ApplyAOE(SkillUser user)
 {
     if (globalEntitySet.Items.Count > 0)
     {
         for (int i = 0; i < globalEntitySet.Items.Count; i++)
         {
             float dist = Vector2.Distance(user.transform.position, globalEntitySet.Items[i].transform.position);
             if (dist < range * rangeMultiplier.GetValue())
             {
                 globalEntitySet.Items[i].TakeDamage(damageInformation);
                 damageInformation.ApplyStatesToEntity(globalEntitySet.Items[i]);
                 globalEntitySet.Items[i].ApplyKnockback(user.transform.position, victimsKnockback * knockbackMultiplier.GetValue());
             }
         }
     }
 }
예제 #30
0
 public override void StepSkill(SkillUser user)
 {
     if (user.skillStep > 0 && user.skillStep <= numberOfProjectiles)
     {
         if (user.skillStep == numberOfProjectiles && ultimateProjectile)
         {
             CastProjectile(ultimateProjectile, user, rotateUltimateProjectile);
         }
         else
         {
             CastProjectile(baseProjectile, user, rotateBasicProjectile);
         }
     }
     else if (user.skillStep > numberOfProjectiles)
     {
         ConcludeVolley(user);
     }
 }