コード例 #1
0
    // Update is called once per frame
    void Update()
    {
/*
 *              if (Input.GetKeyDown (KeyCode.Minus)) {
 *                      if(Monitor.TryEnter(VFDataRTGen.s_dicTreeInfoList)){
 *                              KeyValuePair<IntVector2, List<TreeInfo>> item = VFDataRTGen.s_dicTreeInfoList.ElementAt(0);
 *                              string log = "Remove ter at "+item.Key.ToString()+item.Value.Count;
 *                              foreach(TreeInfo ti in item.Value){
 *                                      log += ti.m_pos.ToString() + "," + ti.m_protoTypeIdx + "\n";
 *                              }
 *                              Debug.LogError(log);
 *                              VFDataRTGen.s_dicTreeInfoList.Remove(item.Key);
 *                              Monitor.Exit(VFDataRTGen.s_dicTreeInfoList);
 *                      }
 *              }
 */

        // Determine node area
        IntVec3 ipos = CameraIntPos;
        Vector3 min  = Vector3.zero;
        Vector3 max  = Vector3.zero;

        if (RSubTerrConstant.ChunkCountPerAxis.x % 2 == 0)
        {
            min.x = (ipos.x - (RSubTerrConstant.ChunkCountPerAxis.x / 2 - 1)) * RSubTerrConstant.ChunkSizeF;
        }
        else
        {
            min.x = (ipos.x - (RSubTerrConstant.ChunkCountPerAxis.x / 2)) * RSubTerrConstant.ChunkSizeF;
        }
        if (RSubTerrConstant.ChunkCountPerAxis.z % 2 == 0)
        {
            min.z = (ipos.z - (RSubTerrConstant.ChunkCountPerAxis.z / 2 - 1)) * RSubTerrConstant.ChunkSizeF;
        }
        else
        {
            min.z = (ipos.z - (RSubTerrConstant.ChunkCountPerAxis.z / 2)) * RSubTerrConstant.ChunkSizeF;
        }
        min.y = 0;
        max.x = (ipos.x + (RSubTerrConstant.ChunkCountPerAxis.x / 2) + 1) * RSubTerrConstant.ChunkSizeF;
        max.y = RSubTerrConstant.ChunkHeightF;
        max.z = (ipos.z + (RSubTerrConstant.ChunkCountPerAxis.z / 2) + 1) * RSubTerrConstant.ChunkSizeF;

        m_TerrainRegion.SetMinMax(min, max);
        if (Application.isEditor)
        {
            Bounds terr_region_base_bound = m_TerrainRegion;
            terr_region_base_bound.center  = new Vector3(terr_region_base_bound.center.x, 0, terr_region_base_bound.center.z);
            terr_region_base_bound.extents = new Vector3(terr_region_base_bound.extents.x, 0, terr_region_base_bound.extents.z);
            AiUtil.DrawBounds(transform, terr_region_base_bound, Color.blue);
        }

        // Determine near tree area
        if (PlayerTransform == null)
        {
            PlayerTransform = CameraTransform;
        }
        else
        {
            if (Time.frameCount % 32 == 0)
            {
                SyncChunksData();
            }
            if (Time.frameCount % 128 == 0 && IsDirty)
            {
                foreach (RSubTerrCreator cr in LayerCreators)
                {
                    if (!cr.bProcessing)
                    {
                        cr.StartCoroutine("RefreshRegion");
                        m_IsDirty = false;
                    }
                }
            }
            RefreshTempGOsIn32Meter();
        }
    }