private void FixedUpdate() { if ((playerTransform.position - _transform.position).magnitude >= Player.instance.despawnDistance) { QueueActionPlayer action = new QueueActionPlayer(false, new CubeStruct(new Vector3Int((int)_transform.position.x, (int)_transform.position.y, (int)_transform.position.z), id)); Player.instance.actionsQueue.Enqueue(action); } }
private void FixedUpdate() { foreach (var cubeStruct in grid[false]) { if ((_transform.position - cubeStruct.position).magnitude < despawnDistance) { var action = new QueueActionPlayer(true, cubeStruct); actionsQueue.Enqueue(action); } } NoContains: while (actionsQueue.Count > 0) { var queueAction = actionsQueue.Dequeue(); if (queueAction.add) { foreach (var cubeStruct in grid[false]) { if (queueAction.cube.position == cubeStruct.position) { goto Contains; } } goto NoContains; Contains: grid[false].Remove(queueAction.cube); grid[true].Add(queueAction.cube); cube.GetComponent <Cube>().SetID(queueAction.cube.id); dictObjects[queueAction.cube.position] = PoolManager.instance.Spawn(cube, queueAction.cube.position, Quaternion.identity); } else { foreach (var cubeStruct in grid[true]) { if (queueAction.cube.position == cubeStruct.position) { goto Contains; } } goto NoContains; Contains: grid[true].Remove(queueAction.cube); grid[false].Add(queueAction.cube); PoolManager.instance.Despawn(dictObjects[queueAction.cube.position]); dictObjects[queueAction.cube.position] = null; } } }