private void HunterController() { if (!IsHunter) { return; } if (Input.GetKeyDown(KeyCode.L)) { Vector3 euler = new Vector3(0f, Random.Range(0f, 360f), 0f); SetVelocity(transform.position, Quaternion.Euler(euler) * Vector3.forward * -12f, euler, .8f); RpcPlayAnimation("Flying"); GameScreenDrawer.SetShaderValue(new ShaderValue { ShaderType = GameScreenDrawer.ShaderType.ColorGrading_Filter, ColorValue = Color.red, TimeFull = .8f, TimeIn = 0f, TimeOut = .4f }); GameScreenDrawer.SetShaderValue(new ShaderValue { ShaderType = GameScreenDrawer.ShaderType.DepthOfField_Distance, FloatValue = .1f, TimeFull = .8f, TimeIn = 0f, TimeOut = .4f }); GameScreenDrawer.SetShaderValue(new ShaderValue { ShaderType = GameScreenDrawer.ShaderType.ChromaticAberration_Intensity, FloatValue = 1f, TimeFull = .8f, TimeIn = 0f, TimeOut = .4f }); } if (NetworkTime.time >= LastAction + Cooldown) { RaycastHit[] hits = Physics.SphereCastAll(transform.position, Distance, Vector3.up, Distance / 2f); Transform nearest = PhysicsUtils.GetNearestPlayerHit(hits.Where(hit => { Player p; return((p = hit.transform.GetComponent <Player>()) != null && !p.IsHunter); }).ToArray(), transform); if (nearest != null) { RaycastHit[] hits1 = Physics.RaycastAll(transform.position + new Vector3(0f, 1f, 0f), (nearest.position + new Vector3(0f, 1f, 0f)) - (transform.position + new Vector3(0f, 1f, 0f)), Distance); Transform nearest1 = PhysicsUtils.GetNearestHit(hits1, transform); if (nearest1 == nearest) { _lineRenderer.positionCount = 2; _lineRenderer.startColor = new Color32(255, 155, 155, 255); _lineRenderer.endColor = new Color32(255, 155, 155, 255); _lineRenderer.startWidth = .25f; _lineRenderer.endWidth = .25f; _lineRenderer.SetPositions(new[] { transform.position + new Vector3(0f, 1f, 0f), nearest.position + new Vector3(0f, 1f, 0f) }); if (Input.GetKeyDown(KeyCode.Q) && !IsFlying) { CmdKill(nearest.gameObject); } } else { _lineRenderer.positionCount = 0; } } else { _lineRenderer.positionCount = 0; } } else { _lineRenderer.positionCount = 0; } // Check other player vision Collider[] victimColliders = Physics.OverlapSphere(transform.position, GameManager.Instance.HunterVision - 1f, 1 << 9); foreach (Collider victimCollider in victimColliders) { Player p = victimCollider.GetComponent <Player>(); if (p == null) { continue; } LineRenderer line = p.GetComponent <LineRenderer>(); bool inDistance = Vector3.Distance(transform.position, victimCollider.transform.position) <= p.Vision - 1f; line.startWidth = .01f; line.endWidth = .01f; line.startColor = inDistance ? Color.magenta : Color.green; line.endColor = inDistance ? Color.magenta : Color.green; line.positionCount = 2; line.SetPositions(new[] { transform.position + new Vector3(0f, 1f, 0f), victimCollider.transform.position + new Vector3(0f, 1f, 0f) }); } }