﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 查找距离Player指定范围内的物体
/// </summary>
public class Player : MonoBehaviour
{
    [Range(1,5)]
    public float detectRange = 1f;
    private List<GameObject> detectedGameObjects = new List<GameObject>();

    [Header(header: "材质")]
    [SerializeField]
    private Material outMaterial;
    [SerializeField]
    private Material inMaterial;

    private Vector3 oldPos;
    private bool hasMoved = false;

    private void Start()
    {
        oldPos = transform.position;
    }

    private void Update()
    {
        hasMoved = oldPos != transform.position;
        oldPos = transform.position;
        //有位置变化再进行查询
        if(hasMoved)
        {
            foreach (var i in detectedGameObjects)
            {
                i.GetComponent<Renderer>().material = outMaterial;
            }
            detectedGameObjects.Clear();
            TreeManager.quadRoot.GetNodeRecRange(new Vector2(transform.position.x, transform.position.z), detectRange, ref detectedGameObjects);
            foreach (var i in detectedGameObjects)
            {
                i.GetComponent<Renderer>().material = inMaterial;
            }
        }
    }

    private void OnDrawGizmos()
    {
        if(Application.isPlaying)
        {
            Gizmos.color = Color.black;
            //在QuadTreeNode中使用的是vector2，绘制时在xy平面所以需要旋转90度。
            Gizmos.matrix = Matrix4x4.TRS(Vector3.zero, transform.rotation, Vector3.one);
            TreeManager.quadRoot.DrawBounds();

            Gizmos.color = Color.red;
            Gizmos.matrix = Matrix4x4.identity;
            Gizmos.DrawWireSphere(transform.position, detectRange);
        }
    }
}
