public static GameObject GenObject(this SkyLayer layer, FezUnitySky parent, int index, float offsetScale = 1f) { float maxSize = Mathf.Max(FezUnityLevel.Current.Level.Size.x, FezUnityLevel.Current.Level.Size.y, FezUnityLevel.Current.Level.Size.z); float sizeFactor = Mathf.Max(1f, maxSize / 32f); float offset = sizeFactor * (index * 32f + FezManager.Instance.SkySpace) * offsetScale; GameObject obj = new GameObject(layer.Name); obj.transform.parent = parent.transform; obj.transform.localPosition = new Vector3( FezUnityLevel.Current.Level.Size.x / 2f, FezUnityLevel.Current.Level.Size.y / 2f + offset / 2f, FezUnityLevel.Current.Level.Size.z / 2f ); obj.transform.localScale = new Vector3( maxSize + offset, maxSize + offset, maxSize + offset ); FezUnitySkyLayer fezHolder = obj.AddComponent <FezUnitySkyLayer>(); fezHolder.Fill(parent, layer, index); obj.isStatic = true; // Fix Unity / Trixel Engine Z direction conflict obj.FezZ(); return(obj); }
public void Fill() { if (!IsInstance) { return; } Layers = new GameObject[Sky.Layers.Count]; int indexOffset = 0; bool isOuterSpace = Name == "OUTERSPACE"; float offsetScale = FezHelper.IsSkyClouded(Name) ? 2f : 1f; for (int i = 0; i < Layers.Length; i++) { SkyLayer layer = Sky.Layers[i]; if (!isOuterSpace && layer.Name.StartsWith("OUTERSPACE")) { // TODO handle space layer separately //indexOffset++; //continue; } GameObject layerObj = layer.GenObject(this, Layers.Length - (i - indexOffset), offsetScale); layerObj.transform.parent = transform; Layers[i] = layerObj; } if (!skyInstantiated) { skyInstantiated = true; RenderSettings.skybox = Instantiate(RenderSettings.skybox); } }
private void button_LayerDown_Click(object sender, EventArgs e) { int iIndex = SelectedLayerIndex; if (iIndex < 0 || iIndex >= SkyConfig.Layers.Count - 1) { return; } SkyLayer layer = SkyConfig.Layers[iIndex]; SkyConfig.Layers.RemoveAt(iIndex); SkyConfig.Layers.InsertAt(iIndex + 1, layer); FillLayerList(iIndex + 1); SkyConfig.Update(); }