void LateUpdate() { if (localPosition != transform.position) { universalPosition += BigVec3.create((transform.position - localPosition) * precision); localPosition = transform.position; } }
private void Start() { if (!universe) { universe = FindObjectOfType <InfiniteUniverse>(); } if (localPosition != transform.position) { universalPosition = BigVec3.create(transform.position * precision); localPosition = transform.position; } }
void updateVisible() { var visibleSuperstructurePositions = new HashSet <BigVec3>(); var superstructureCenter = observer.UniversalPosition / observer.precision; superstructureCenter = superstructureCenter / superstructureRegionSize * superstructureRegionSize; int n = 2; int nn = (n * 2 + 1); int n3 = nn * nn * nn; for (int i = -n; i <= n; i++) { var x = superstructureCenter.x + i * superstructureRegionSize; for (int j = -n; j <= n; j++) { var y = superstructureCenter.y + j * superstructureRegionSize; for (int k = -n; k <= n; k++) { var z = superstructureCenter.z + k * superstructureRegionSize; var superstructurePos = new BigVec3(x, y, z) * superstructurePrecision; visibleSuperstructurePositions.Add(superstructurePos); if (!superstructures.ContainsKey(superstructurePos) && superstructures.Count < n3) { var newSuperstructure = Instantiate(intergalacticSuperstructurePrefab, transform); newSuperstructure.universe = this; newSuperstructure.regionSize = superstructureRegionSize; var newEntity = newSuperstructure.GetComponent <UniverseEntity>(); newEntity.universe = this; newEntity.unitSize = superstructureUnitSize; newEntity.precision = superstructurePrecision; newEntity.UniversalPosition = superstructurePos; superstructures.Add(superstructurePos, newSuperstructure); } } } } foreach (var pos in new List <BigVec3>(superstructures.Keys)) { if (!visibleSuperstructurePositions.Contains(pos)) { var oldSuperstructure = superstructures[pos]; Destroy(oldSuperstructure.gameObject); superstructures.Remove(pos); } } }
void Update() { var entities = FindObjectsOfType <UniverseEntity>(); var observerOffset = observer.UniversalPosition - OriginOffset; if (BigInteger.Abs(observerOffset.x) > offsetRegionSize || BigInteger.Abs(observerOffset.y) > offsetRegionSize || BigInteger.Abs(observerOffset.z) > offsetRegionSize) { originOffset = observer.UniversalPosition; foreach (UniverseEntity entity in entities) { entity.UpdateGameObjectPosition(); } } updateVisible(); }
void FixedUpdate() { float dt = Time.deltaTime; entity.UniversalPosition += BigVec3.create(velocity * entity.precision * Time.deltaTime); }
void CreateChildren() { foreach (var node in nodes) { var galaxyFilamentNode = Instantiate(galaxyFilamentNodePrefab, universe.transform); var filamentNodeEntity = galaxyFilamentNode.GetComponent <UniverseEntity>(); filamentNodeEntity.universe = universe; filamentNodeEntity.UniversalPosition = entity.UniversalPosition * filamentNodeEntity.precision / entity.precision + BigVec3.create(node.pos * filamentNodeEntity.precision); galaxyFilamentNode.radius = node.radius; galaxyFilamentNode.density = node.density; children.Add(galaxyFilamentNode.gameObject); } foreach (var segment in segments) { var galaxyFilament = Instantiate(galaxyFilamentPrefab, universe.transform); var filamentEntity = galaxyFilament.GetComponent <UniverseEntity>(); filamentEntity.universe = universe; var center = 0.5f * segment.a.pos + 0.5f * segment.b.pos; filamentEntity.UniversalPosition = entity.UniversalPosition * filamentEntity.precision / entity.precision + BigVec3.create(center * filamentEntity.precision); galaxyFilament.start = segment.a.pos - center; galaxyFilament.startRadius = segment.a.radius; galaxyFilament.startDensity = segment.a.density; galaxyFilament.end = segment.b.pos - center; galaxyFilament.endRadius = segment.b.radius; galaxyFilament.endDensity = segment.b.density; galaxyFilament.middleRadius = segment.radius; galaxyFilament.middleDensity = segment.density; children.Add(galaxyFilament.gameObject); } }
public static UnityEngine.Vector3 vec(BigVec3 bigvec) { return(new UnityEngine.Vector3((float)bigvec.x, (float)bigvec.y, (float)bigvec.z)); }