Esempio n. 1
0
    private void Ignite()
    {
        //55 + (25 * level) // 600 범위
        int Target = 0;

        if (MousePosToWorldPosRay())
        {
            if (Vector3.Distance(Player.transform.position, hit.transform.position) >= IgniteRange)
            {
                return;
            }
            Vector3 temp = hit.point;
            temp.y = 0.5f;
            Collider[] goalCheckCollider = Physics.OverlapSphere(temp, 5f);
            if (obj == null)
            {
                obj = new List <CollisionListData>();
            }
            else
            {
                obj.Clear();
            }
            foreach (Collider col in goalCheckCollider)
            {
                if (col.transform.name.Contains("Terrain"))
                {
                    continue;
                }
                else if (col.transform.gameObject.layer.Equals(13))
                {
                    if (col.gameObject.GetComponent <ChampionBehavior>().Team.ToLower() != team && col.gameObject != this.gameObject)
                    {
                        offset           = col.gameObject.transform.position - Player.transform.position;
                        colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                        colData.obj      = col.gameObject;
                        colData.distance = offset.sqrMagnitude;
                        obj.Add(colData);
                    }
                }
            }
            if (!obj.Count.Equals(0))
            {
                obj.Sort(SortByDistanceClose);
                Playerlevel     = ChampData.totalstat.Level;
                IgniteTargetset = true;
                Target          = obj[0].obj.gameObject.GetComponent <PhotonView>().viewID;
                datas           = new object[] { Target, Playerlevel, photonview.viewID };
                PhotonNetwork.RaiseEvent(sendIgnitecode, datas, true, op);
                ChampionSound.instance.PlayPlayerFx(SoundManager.instance.Ingnite);
                SendEffect("Ignite", obj[0].obj.transform.position, team, Target);
            }
            else
            {
                IgniteTargetset = false;
            }
        }
    }
Esempio n. 2
0
    private void Heal()
    {
        //75 + (15 * level) Self, 850 for ally range
        mousepos = Input.mousePosition;
        CamRay   = Camera.main.ScreenPointToRay(mousepos);
        int Target = 0;

        Healfloat = 0;
        curhp     = aiPath.maxSpeed;

        bool ishit = Physics.Raycast(CamRay, out hit, Mathf.Infinity, layerMask); // 카메라 기준 레이

        if (ishit)
        {
            temp   = hit.point;
            temp.y = Player.transform.position.y;

            Collider[] ObjectCheck = Physics.OverlapSphere(Player.transform.position, HealRange);
            Playerlevel = ChampData.totalstat.Level;

            if (obj == null)
            {
                obj = new List <CollisionListData>();
            }
            else
            {
                obj.Clear();
            }
            //sqrMagnitude
            foreach (Collider col in ObjectCheck)
            {
                if (col.transform.gameObject.layer.Equals(13) && col.gameObject != this.gameObject)
                {
                    if (col.gameObject.GetComponent <ChampionBehavior>().Team.ToLower().Equals(team))
                    {
                        offset           = col.gameObject.transform.position - temp;
                        colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                        colData.obj      = col.gameObject;
                        colData.distance = offset.sqrMagnitude;
                        obj.Add(colData);
                    }
                }
            }
            if (!obj.Count.Equals(0)) // 주위에 챔피언이 하나라도 있으면
            {
                obj.Sort(SortByDistanceClose);
                if (obj[0].distance <= 1.5f) // 마우스커서위치에서 가까우면.
                {
                    Healfloat = 75 + (15 * Playerlevel);
                    Target    = obj[0].obj.gameObject.GetComponent <PhotonView>().viewID;
                    datas     = new object[] { Target, Healfloat, team };
                    PhotonNetwork.RaiseEvent(sendHealcode, datas, true, op);

                    ChampionSound.instance.PlayPlayerFx(SoundManager.instance.Ingnite);
                    SendEffect("Heal", transform.position, team, photonview.viewID);
                    GetComponent <ChampionData>().totalstat.Hp += Healfloat;
                    aiPath.maxSpeed += aiPath.maxSpeed * 0.3f;
                    Invoke("PlayerSpeedReset", 2f);
                    return;
                }
                else // 가깝지 않으면 HP 가장 작은 자
                {
                    float minhp = 100000f;
                    for (int i = 0; i < obj.Count; i++)
                    {
                        float curhp = obj[i].obj.gameObject.GetComponent <ChampionData>().totalstat.Hp;
                        if (minhp > curhp)
                        {
                            minhp  = curhp;
                            Target = obj[i].obj.gameObject.GetComponent <PhotonView>().viewID;
                        }
                    }
                    Healfloat = 75 + (15 * Playerlevel);
                    datas     = new object[] { Target, Healfloat, team };
                    PhotonNetwork.RaiseEvent(sendHealcode, datas, true, op);

                    SoundManager.instance.ChampSound(SoundManager.instance.Ingnite);
                    SendEffect("Heal", transform.position, team, photonview.viewID);
                    GetComponent <ChampionData>().totalstat.Hp += Healfloat;
                    aiPath.maxSpeed += aiPath.maxSpeed * 0.3f;
                    Invoke("PlayerSpeedReset", 2f);
                    return;
                }
            }
            else // 주위에 챔피언이 하나라도 없으면
            {
                ChampionSound.instance.PlayPlayerFx(SoundManager.instance.Ingnite);
                SendEffect("Heal", transform.position, team, photonview.viewID);
                Healfloat = 75 + (15 * Playerlevel);
                GetComponent <ChampionData>().totalstat.Hp += Healfloat;
                aiPath.maxSpeed += aiPath.maxSpeed * 0.3f;
                Invoke("PlayerSpeedReset", 2f);
            }
        }
    }
Esempio n. 3
0
 public void FindClosestObject(Vector3 pos)
 {
     Collider[] ObjectCheck = Physics.OverlapSphere(pos, 10f); // 목표지점에 무언가 있는지 검사
     if (obj == null)
     {
         obj = new List <CollisionListData>();
     }
     else
     {
         obj.Clear();
     }
     //sqrMagnitude
     foreach (Collider col in ObjectCheck)
     {
         if (col.transform.name.Contains("Terrain"))
         {
             continue;
         }
         else if (col.transform.name.Contains("Tower"))
         {
             if (col.gameObject.GetComponent <TowerBehaviour>().Team.ToLower().Equals(team))
             {
                 offset           = col.gameObject.transform.position - Player.transform.position;
                 colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                 colData.obj      = col.gameObject;
                 colData.distance = offset.sqrMagnitude;
                 obj.Add(colData);
             }
         }
         else if (col.transform.name.Contains("Minion"))
         {
             if (col.gameObject.GetComponent <MinionBehavior>().team.ToString().ToLower().Equals(team))
             {
                 offset           = col.gameObject.transform.position - Player.transform.position;
                 colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                 colData.obj      = col.gameObject;
                 colData.distance = offset.sqrMagnitude;
                 obj.Add(colData);
             }
         }
         else if (col.transform.gameObject.layer.Equals(13))
         {
             if (col.gameObject.GetComponent <ChampionBehavior>().Team.ToLower().Equals(team) && col.gameObject != this.gameObject)
             {
                 offset           = col.gameObject.transform.position - Player.transform.position;
                 colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                 colData.obj      = col.gameObject;
                 colData.distance = offset.sqrMagnitude;
                 obj.Add(colData);
             }
         }
         else if (col.transform.name.Contains("Ward"))
         {
             if (col.gameObject.GetComponent <Ward>().team.ToLower().Equals(team))
             {
                 offset           = col.gameObject.transform.position - Player.transform.position;
                 colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                 colData.obj      = col.gameObject;
                 colData.distance = offset.sqrMagnitude;
                 obj.Add(colData);
             }
         }
         else if (col.transform.name.Contains("Nexus") || col.transform.name.Contains("Suppressor"))
         {
             if (col.gameObject.GetComponent <SuppressorBehaviour>().Team.ToLower().Equals(team))
             {
                 offset           = col.gameObject.transform.position - Player.transform.position;
                 colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                 colData.obj      = col.gameObject;
                 colData.distance = offset.sqrMagnitude;
                 obj.Add(colData);
             }
         }
     }
     if (!obj.Count.Equals(0))
     {
         ChampionSound.instance.PlayPlayerFx(SoundManager.instance.Teleport);
         //cursor.SetCursor(cursor.PreCursor, Vector2.zero);
         obj.Sort(SortByDistanceClose);
         dir               = (obj[0].obj.transform.position - Player.transform.position).normalized;
         TeleportDestPos   = obj[0].obj.transform.position + dir * +5.0f;
         TeleportDestPos.y = 0.5f;
         Target            = obj[0].obj.gameObject;
         isTeleportDestSet = true;
         return;
     }
     else if (obj.Count.Equals(0))
     {
         //cursor.SetCursor(cursor.PreCursor, Vector2.zero);
     }
 }
Esempio n. 4
0
    private void Flash()
    {
        if (!Player)
        {
            Player = this.gameObject;
        }
        if (Player != null)
        {
            //effectForviewid = gameObject.GetComponent<PhotonView>().viewID;
            ChampionSound.instance.PlayPlayerFx(SoundManager.instance.Flash);
            SendEffect("Flash", Player.transform.position, team, photonview.viewID);
            mousepos     = Input.mousePosition;
            CamRay       = Camera.main.ScreenPointToRay(mousepos);
            CamRayHitPOs = Vector3.zero;

            bool ishit = Physics.Raycast(CamRay, out hit, Mathf.Infinity, layerMask); // 카메라 기준 레이
            if (ishit)                                                                //카메라 기준 레이 저장
            {
                temp   = hit.point;
                temp.y = Player.transform.position.y;
            }

            CurFlashdist = Vector3.Distance(Player.transform.position, temp); // 마우스 와 플레이어 오브젝트 거리 계산
            if (CurFlashdist > MaxFalshMax)                                   // 최대 점멸 거리 보다 긴가?
            {
                CurFlashdist = MaxFalshMax;
            }

            dir         = (temp - Player.transform.position).normalized;             // 방향 계산
            startRayPos = Player.transform.position - dir * adjustFlashDistance;     // 레이 시작점 설정

            RaycastHit[] hits  = Physics.RaycastAll(startRayPos, dir, CurFlashdist); // 레이 시작점에서 끝점까지 레이
            bool         noHit = true;
            if (obj != null)
            {
                obj.Clear();
            }
            else
            {
                obj = new List <CollisionListData>();
            }
            temp   = startRayPos + dir * CurFlashdist;
            temp.y = 0.5f;
            foreach (RaycastHit h in hits)
            {
                if (h.collider.name.Contains("MapLine"))
                {
                    Vector3 dir = h.point - transform.position;
                    transform.position = h.point - dir * 0.5f;
                    return;
                }
                else if (!h.collider.name.Contains("Terrain")) // 터레인이 아니면
                {
                    //sqrmagnitude
                    noHit = false;
                    Vector3 offset = startRayPos - h.collider.gameObject.transform.position;
                    colData          = new CollisionListData(); // 장애물 게임 오브젝트와 거리 저장
                    colData.obj      = h.collider.gameObject;
                    colData.distance = temp.sqrMagnitude;
                    obj.Add(colData);
                }
            }

            if (noHit) // 아무것도 안맞으면 가라
            {
                if (mybehav.isDead)
                {
                    return;
                }
                Player.transform.position      = temp;
                AstarTarget.transform.position = temp;
                SendEffect("Flash", temp, team, photonview.viewID);
            }
            else // 무언가 맞으면
            {
                obj.Sort(SortByDistanceFar); // 장애물 거리가 먼 순서대로 정렬
                Vector3    goal = Player.transform.position + dir * CurFlashdist;  //점멸 목표지점 저장
                Collider[] goalCheckCollider = Physics.OverlapSphere(goal, 0.25f); // 목표지점에 무언가 있는지 검사
                bool       bAllTerrain       = true;
                foreach (Collider c in goalCheckCollider)
                {
                    if (!c.name.Contains("Terrain")) // 무언가 있으면
                    {
                        bAllTerrain = false;
                    }
                }

                if (bAllTerrain) // 무언가 없으면 가라
                {
                    if (mybehav.isDead)
                    {
                        return;
                    }
                    Player.transform.position      = temp;
                    AstarTarget.transform.position = temp;
                    SendEffect("Flash", temp, team, photonview.viewID);
                }
                else // 무언가 있을때
                {
                    foreach (CollisionListData o in obj) // 저장한 장애물 데이터에서
                    {
                        foreach (RaycastHit h in hits)                                         //최초 플레이어기준 레이 충돌체
                        {
                            if (h.collider.name == o.obj.name)                                 // 최초 검사한 레이와 비교
                            {
                                Vector3    now            = h.point - dir * 0.5f;              // 장애물에서 조금 떨어진곳으로
                                Collider[] FinalGoalCheck = Physics.OverlapSphere(now, 0.25f); // 마지막 확인
                                bAllTerrain = true;
                                foreach (Collider c in FinalGoalCheck)
                                {
                                    if (c.name == "Terrain")
                                    {
                                        bAllTerrain = false;
                                    }
                                }
                                if (bAllTerrain)
                                {
                                    if (mybehav.isDead)
                                    {
                                        return;
                                    }
                                    now.y = Player.transform.position.y;
                                    Player.transform.position      = now;
                                    AstarTarget.transform.position = Player.transform.position;
                                    SendEffect("Flash", temp, team, photonview.viewID);
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Esempio n. 5
0
 private int SortByDistanceClose(CollisionListData p1, CollisionListData p2)
 {
     return(p1.distance.CompareTo(p2.distance));
 }