using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
private Item netItem;
public bool ForceLocal;
public bool IsLocal
{
get
{
return ForceLocal || (netItem != null && netItem.IsLocal);
}
}
private UIHookup uiHookup;
private CharacterController charControl;
private PlayerFade playerFade;
private Camera playerFadeCam;
// Start is called before the first frame update
void Awake()
{
netItem = GetComponentInChildren<Item>();
castLight = transform.Find("CastLight").gameObject;
uiHookup = FindObjectOfType<UIHookup>();
if (ForceLocal)
{
StartLocal();
}
}
private GameObject castLight;
private float bottomOffset;
void StartLocal()
{
castLight.SetActive(true);
charControl = GetComponentInChildren<CharacterController>();
charControl.enabled = true;
bottomOffset = -charControl.center.y + charControl.height * 0.5f;
playerFade = FindObjectOfType<PlayerFade>();
playerFadeCam = playerFade.GetComponent<Camera>();
}
public float Speed;
private List<Touch> touches = new List<Touch>();
public float MoveTouchFullZone = 0.7f;
public float MoveTouchRadiusSize = 1.45f;
private float viewRadius = 4;
// Update is called once per frame
void Update()
{
if (IsLocal && charControl != null)
{
RaycastHit hit;
if (Physics.Raycast(new Ray(transform.position, Vector3.down), out hit, 10f))
{
Vector3 pos = transform.position;
pos.y = hit.point.y + (bottomOffset + 0.01f);
transform.position = pos;
}
Vector3 wantMove = new Vector3();
if (Input.GetKey(KeyCode.UpArrow))
{
wantMove.z += 1;
}
if (Input.GetKey(KeyCode.DownArrow))
{
wantMove.z -= 1;
}
if (Input.GetKey(KeyCode.RightArrow))
{
wantMove.x += 1;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
wantMove.x -= 1;
}
wantMove.Normalize();
if (uiHookup != null && uiHookup.MoveTouch != null && uiHookup.MainCanvas != null)
{
float radius = uiHookup.MoveTouch.rect.width * 0.5f * MoveTouchRadiusSize;
touches.Clear();
touches.AddRange(Input.touches);
if (Input.GetMouseButton(0))
{
touches.Add(new Touch { position = Input.mousePosition });
}
foreach (Touch touch in touches)
{
Vector2 diff = new Vector2();
RectTransformUtility.ScreenPointToLocalPointInRectangle(uiHookup.MoveTouch, touch.position, null, out diff);
if (diff.magnitude < radius)
{
wantMove = new Vector3(diff.x, 0, diff.y) / (radius * MoveTouchFullZone);
if (wantMove.magnitude > 1) wantMove.Normalize();
}
}
}
if (wantMove.sqrMagnitude > 0)
{
wantMove *= Speed * Time.deltaTime;
wantMove.y = -0.1f * Time.deltaTime;
CollisionFlags flags = charControl.Move(wantMove);
}
if (playerFade != null && playerFadeCam != null)
{
Vector3 playerScreen3 = playerFadeCam.WorldToScreenPoint(transform.position);
Vector3 edgeScreen3 = playerFadeCam.WorldToScreenPoint(transform.position + playerFadeCam.transform.right * viewRadius);
Vector2 playerScreen2 = new Vector2(playerScreen3.x / playerFadeCam.pixelWidth, playerScreen3.y / playerFadeCam.pixelHeight);
Vector2 edgeScreen2 = new Vector2(edgeScreen3.x / playerFadeCam.pixelWidth, edgeScreen3.y / playerFadeCam.pixelHeight);
float radius = (edgeScreen2 - playerScreen2).magnitude;
playerFade.PlayerFadeMat.SetVector("_MainCameraPos", new Vector4(playerScreen2.x, playerScreen2.y, 0, 0));
playerFade.PlayerFadeMat.SetFloat("_Radius", radius);
}
}
}
}