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); }
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; } }
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); }); }