Exemplo n.º 1
0
 void LateUpdate()
 {
     if (localPosition != transform.position)
     {
         universalPosition += BigVec3.create((transform.position - localPosition) * precision);
         localPosition      = transform.position;
     }
 }
Exemplo n.º 2
0
 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();
    }
Exemplo n.º 5
0
    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);
        }
    }
Exemplo n.º 7
0
 public static UnityEngine.Vector3 vec(BigVec3 bigvec)
 {
     return(new UnityEngine.Vector3((float)bigvec.x, (float)bigvec.y, (float)bigvec.z));
 }