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; } } }
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); } } }
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); } }
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; } } } } } } } }
private int SortByDistanceClose(CollisionListData p1, CollisionListData p2) { return(p1.distance.CompareTo(p2.distance)); }