123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- using System.Collections.Generic;
- using Fort23.UTool;
- using UnityEngine;
- using Utility;
- namespace GameLogic.Combat.CombatTool.SceneTool
- {
- public class SceneCJ2MonoConfig : SceneMonoConfigBasic
- {
- public Color fogColor;
- public float fogStartDistance;
- public float fogEndDistance;
- public GameObject[] allObject;
- public float radius;
- private Map<int, GameObjectPool> _allGameObjectPools = new Map<int, GameObjectPool>();
- private Map<int, GameObjectPool> _downAllGameObjectPools = new Map<int, GameObjectPool>();
- protected override void ProInit()
- {
- RenderSettings.fogColor= fogColor;
- RenderSettings.fogStartDistance = fogStartDistance;
- RenderSettings.fogEndDistance = fogEndDistance;
- }
- protected override void ProUpdate()
- {
-
- Vector3 pos = moveRoot.position;
- List<int> removeKey = new List<int>();
- for (_allGameObjectPools.Begin(); _allGameObjectPools.Next();)
- {
- if (_allGameObjectPools.Value == null)
- {
- continue;
- }
- Vector3 objetcPos = _allGameObjectPools.Value.own.transform.position;
- if (Vector3.Distance(pos, objetcPos) > 600)
- {
- removeKey.Add(_allGameObjectPools.Key);
- GObjectPool.Instance.Recycle(_allGameObjectPools.Value);
- // _allGameObjectPools.Value.SetActive(false);
- }
- }
- for (int i = 0; i < removeKey.Count; i++)
- {
- _allGameObjectPools.Remove(removeKey[i]);
- }
- removeKey.Clear();
- for (_downAllGameObjectPools.Begin(); _downAllGameObjectPools.Next();)
- {
- if (_downAllGameObjectPools.Value == null)
- {
- continue;
- }
- Vector3 objetcPos = _downAllGameObjectPools.Value.own.transform.position;
- if (Vector3.Distance(pos, objetcPos) > 600)
- {
- removeKey.Add(_downAllGameObjectPools.Key);
- GObjectPool.Instance.Recycle(_downAllGameObjectPools.Value);
- // _allGameObjectPools.Value.SetActive(false);
- }
- }
- for (int i = 0; i < removeKey.Count; i++)
- {
- _downAllGameObjectPools.Remove(removeKey[i]);
- }
- // float radius = radius;
- int x = (int)(pos.x / radius);
- int z = (int)(pos.z / radius);
- float xStartInit = x;
- float zStartInit = z;
- for (int i = -4; i <= 20; i++)
- {
- for (int j = -4; j <= 20; j++)
- {
- float currX = (xStartInit + i) * radius;
- float currZ = (zStartInit + j) * radius;
- int key = (int)(currX * 1000 + currZ);
- InitUp(key, currX, currZ);
- InitDown(key, currX, currZ, i, j);
- }
- }
- }
- private void InitUp(int key, float currX, float currZ)
- {
- if (_allGameObjectPools.ContainsKey(key))
- {
- return;
- }
- GameObjectPool gameObjectPool = GetObejct(80);
- if (gameObjectPool != null)
- {
- float y = Random.Range(45.0f, 65.0f);
- float x = Random.Range(-3.0f, 3.0f);
- float z = Random.Range(-2.0f, 2.0f);
- gameObjectPool.own.transform.position = new Vector3(currX + x, y, currZ + z);
- float ry = Random.Range(0, 360);
- Vector3 eulerAngles = gameObjectPool.own.transform.eulerAngles;
- gameObjectPool.own.transform.eulerAngles = new Vector3(eulerAngles.x, ry, eulerAngles.z);
- }
- _allGameObjectPools.Add(key, gameObjectPool);
- }
- private void InitDown(int key, float currX, float currZ, int xintdex, int yindex)
- {
- if (_downAllGameObjectPools.ContainsKey(key))
- {
- return;
- }
- int odds = 50;
-
- GameObjectPool gameObjectPool = GetObejct(odds);
- if (gameObjectPool != null)
- {
- float y = Random.Range(-1.0f, 5.0f);
- if(Mathf.Abs(Mathf.Abs(xintdex)-1)<=1)
- {
- y = Random.Range(-1.0f, 1.0f);
- }
-
- float x = Random.Range(-3.0f, 3.0f);
- float z = Random.Range(-2.0f, 2.0f);
- gameObjectPool.own.transform.position = new Vector3(currX + x, y, currZ + z);
- float ry = Random.Range(0, 360);
- Vector3 eulerAngles = gameObjectPool.own.transform.eulerAngles;
- gameObjectPool.own.transform.eulerAngles = new Vector3(eulerAngles.x, ry, eulerAngles.z);
- }
- _downAllGameObjectPools.Add(key, gameObjectPool);
- }
- private GameObjectPool GetObejct(int currOdds)
- {
- int odds = Random.Range(0, 100);
- if (odds < currOdds)
- {
- return null;
- }
- int index = Random.Range(0, allObject.Length);
- GameObject gameObject = allObject[index];
- // GameObject go = GameObject.Instantiate(gameObject);
- GameObjectPool gameObjectPool =
- GObjectPool.Instance.FetchAsyncForGameObject<GameObjectPool>(gameObject, gameObject.name);
- return gameObjectPool;
- }
- }
- }
|