예제 #1
0
파일: BattleHero.cs 프로젝트: TimonYoon/Dev
    IEnumerator Knockback2A(SkillBase attackerSkill, float force, float time = 1)
    {
        float startTime   = Time.time;
        float elapsedTime = 0f;
        //Debug.Log("밀림시작");

        bool isTestA = transform.position.x < attackerSkill.transform.position.x;

        ProjectileNormal projectile = attackerSkill.GetComponent <ProjectileNormal>();

        if (projectile)
        {
            if (projectile.isMoveForwardRight != isTestA)
            {
                yield break;
            }
        }
        //if(test != isTestA)
        //{
        //    test = isTestA;
        //    yield break;
        //}

        if (transform.position.x < attackerSkill.transform.position.x)
        {
            force = -force;
        }

        //bool isTestA = transform.position.x < attackerSkill.transform.position.x;
        //bool isTestC = false;
        while (elapsedTime < 1)
        {
            if (this.isDie)
            {
                break;
            }

            yield return(null);

            // 시간 판단
            elapsedTime = (Time.time - startTime) / time;


            //bool isTestB = transform.position.x < attackerSkill.transform.position.x;
            //isTestC = isTestA == isTestB;

            //if (isTestC)
            //{

            //}

            //if (force < 0)
            //{
            //    Debug.Log("날라가");
            //}



            //isBlockMove = true;
            Vector2 pushPoint = new Vector2(attackerSkill.transform.position.x + force, transform.position.y);

            //float dis = Vector2.Distance((Vector2.right * pushPoint.x), (Vector2.right * transform.position.x));
            //if (dis < 2)
            //{
            //    break;
            //}



            if (attackerSkill.IsCastTargetInSkillRange())
            {
                //transform.position = Vector2.Lerp(transform.position, pushPoint, elapsedTime);
                transform.position = Vector2.MoveTowards(transform.position, pushPoint, 1);
            }
            else
            {
                break;
            }
        }
        //isBlockMove = false;
        pushCoroutine = null;
    }
예제 #2
0
    override public void TriggerEffect()
    {
        //발사체 없으면 아무일 없음? ㅇㅇ 아무일 없어야 할 듯..
        if (!skillEvent.projectile)
        {
            return;
        }

        skill.CollectTargets();

        if (skill.targetList == null || skill.targetList.Count == 0)
        {
            if (skill.onTriggerEvent != null)
            {
                skill.onTriggerEvent(skill, skillEvent);
            }
            return;
        }

        for (int i = 0; i < skill.targetList.Count; i++)
        {
            BattleHero target = skill.targetList[i];

            //풀링 안되어 있으면 함
            GameObject projectileObj = Battle.GetObjectInPool(skillEvent.projectile.name);
            if (!projectileObj)
            {
                projectileObj = GameObject.Instantiate(skillEvent.projectile, skill.owner.transform.position, Quaternion.identity, skill.owner.transform.parent) as GameObject;
                projectileObj.transform.localPosition = Vector3.zero;
                projectileObj.name = skillEvent.projectile.name;
                projectileObj.SetActive(false);
                if (!projectileObj.GetComponent <BattleGroupElement>())
                {
                    projectileObj.AddComponent <BattleGroupElement>();
                }

                Battle.AddObjectToPool(projectileObj);
            }

            if (!projectileObj)
            {
                if (skill.onTriggerEvent != null)
                {
                    skill.onTriggerEvent(skill, skillEvent);
                }
                return;
            }

            //시작 위치로 이동
            projectileObj.transform.position = skillEvent.projectilePivot.position;// + Vector3.back;


            //발사체에서 발생하는 스킬의 대상과, 스킬의 owner 설정
            Projectile  projectile          = projectileObj.GetComponent <Projectile>();
            IProjectile interfaceProjectile = null;
            if (projectile)
            {
                interfaceProjectile = projectile as IProjectile;
            }

            //발사 후 돌아오는 발사체
            ReturnProjectile returnProjectile = projectileObj.GetComponent <ReturnProjectile>();
            if (returnProjectile)
            {
                interfaceProjectile = returnProjectile as IProjectile;
            }

            ProjectileChain projectileChain = projectileObj.GetComponent <ProjectileChain>();
            if (projectileChain)
            {
                interfaceProjectile = projectileChain as IProjectile;
            }

            ProjectileNormal projectileNormal = projectileObj.GetComponent <ProjectileNormal>();
            if (projectileNormal)
            {
                interfaceProjectile = projectileNormal as IProjectile;
            }

            ProjectileGround projectileGround = projectileObj.GetComponent <ProjectileGround>();
            if (projectileGround)
            {
                interfaceProjectile = projectileGround as IProjectile;
            }

            if (interfaceProjectile != null)
            {
                projectileObj.gameObject.SetActive(true);
                interfaceProjectile.Init(skill.owner, target, skill);
                interfaceProjectile.SetBattleGroup(skill.owner.battleGroup);
                interfaceProjectile.Launch();
            }
        }

        if (skill.onTriggerEvent != null)
        {
            skill.onTriggerEvent(skill, skillEvent);
        }
    }