コード例 #1
0
        public static Entity CreatePlanetTemplate(uint planetIndex)
        {
            PlanetData data = PlanetInfo.GetData(planetIndex);

            float  initialAngle   = Random.Range(0f, 360f);          // TODO: calculate this from position
            double orbitRadius    = data.distanceFromSun() * Scales.au2km;
            float  orbitPeriod    = data.orbitalPeriod * 365.25f;
            float  rotationPeriod = data.rotationPeriod;
            double diameter       = data.diameter * Scales.earthDiameter;

            var position        = new Vector3d(0, 0, 0);
            var rotation        = Quaternion.identity;
            var scale           = new Vector3d(diameter, diameter, diameter);
            var spatialPosition = position / Scales.spatialFactor;

            var prefabName = (planetIndex == 5 || planetIndex == 6) ? SimulationSettings.RingedPlanetPrefabName : SimulationSettings.PlanetPrefabName;

            var planetTemplate = EntityBuilder.Begin()
                                 .AddPositionComponent((Vector3)spatialPosition, CommonRequirementSets.PhysicsOnly)
                                 .AddMetadataComponent(entityType: prefabName)
                                 .SetPersistence(true)
                                 .SetReadAcl(CommonRequirementSets.PhysicsOrVisual)
                                 .AddComponent(new TransformInfo.Data(position.ToImprobable(), rotation.ToImprobable(), scale.ToImprobable()), CommonRequirementSets.PhysicsOnly)
                                 .AddComponent(new OrbitInfo.Data(initialAngle, orbitRadius, orbitPeriod, rotationPeriod), CommonRequirementSets.PhysicsOnly)
                                 .AddComponent(new PlanetIndex.Data(planetIndex), CommonRequirementSets.PhysicsOnly)
                                 .Build();

            return(planetTemplate);
        }
コード例 #2
0
ファイル: PlanetSetup.cs プロジェクト: bpepers-me/SolarSystem
        void OnEnable()
        {
            var index      = planetIndexReader.Data.index;
            var planetData = PlanetInfo.GetData(index);

            Material material = (Material)Resources.Load("Materials/" + planetData.name + "_mat");

            GetComponent <Renderer>().material = material;

            if (planetData.name == "Saturn")
            {
                Material ringMaterial = (Material)Resources.Load("Materials/Saturn_ring_mat");
                transform.GetChild(0).GetComponent <Renderer>().material = ringMaterial;
            }

            if (planetData.name == "Uranus")
            {
                Material ringMaterial = (Material)Resources.Load("Materials/Uranus_ring_mat");
                transform.GetChild(0).GetComponent <Renderer>().material = ringMaterial;
            }
        }
コード例 #3
0
        private void OnWarp(Warp warp)
        {
            if (warp.planetIndex == 999)
            {
                myRigidbody.position = new Vector3(0f, 0f, -340f);
                myRigidbody.rotation = UnityEngine.Quaternion.Euler(0, 0, 0);
                myRigidbody.velocity = Vector3.zero;
                return;
            }

            var planetQuery = Query.HasComponent <PlanetIndex>().ReturnAllComponents();

            SpatialOS.WorkerCommands.SendQuery(planetQuery)
            .OnSuccess(result =>
            {
                var entities = result.Entities.Values;
                foreach (var entity in entities)
                {
                    if (entity.Get <PlanetIndex>().Value.Get().Value.index == warp.planetIndex)
                    {
                        var position      = entity.Get <TransformInfo>().Value.Get().Value.position.FromImprobable();
                        var unityPosition = (Vector3)(position / Scales.unityFactor);

                        var data       = PlanetInfo.GetData(warp.planetIndex);
                        var diameter   = data.diameter * Scales.earthDiameter / Scales.unityFactor;
                        unityPosition -= unityPosition.normalized * (float)diameter * 3f;

                        myRigidbody.position = unityPosition;
                        myRigidbody.rotation = UnityEngine.Quaternion.LookRotation(unityPosition);
                        myRigidbody.velocity = Vector3.zero;
                    }
                }
            })
            .OnFailure(errorDetails => {
                Debug.Log("Planet query failed: " + errorDetails);
            });
        }