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); } }
public void Update() { Vector3 ssPositionOld = Camera.main.WorldToScreenPoint(transform.position); if (CurrentAction == NpcAction.Idle || CurrentAction == NpcAction.Idle3 || CurrentAction == NpcAction.Walk) { TimeSinceActionChange += Time.deltaTime; if (TimeUntilActionChange <= TimeSinceActionChange) { ToggleAction(); } } else if (!CurrentTiming.Loop && CurrentTiming.Ended && CurrentAction != NpcAction.Hide) { ToggleAction(); } if (CurrentAction != NpcAction.Talk) { if (CanTalk && (NPC.Speech.Count > 0 || NPC.CustomSpeechLine != null)) { Talk(); } if (CurrentAction == NpcAction.Walk) { Walk(); } } else if (StopTalking() && CurrentAction != NpcAction.TakeOff) { ToggleAction(); } Vector3 ssPosition = Camera.main.WorldToScreenPoint(transform.position); bool lookingRight; if (FezHelper.AlmostEqual(ssPositionOld.x, ssPosition.x)) { lookingRight = LookingRight; } else { lookingRight = ssPositionOld.x < ssPosition.x; } if (lookingRight) { transform.LookAt(transform.position + (transform.position - Camera.main.transform.position)); } else { transform.LookAt(Camera.main.transform.position); } }
public void Fill(Sky sky) { Sky = sky; IsFullbright = FezHelper.IsSkyFullbright(Name); Texture = FezManager.Instance.GetTexture("skies/" + sky.Name + "/" + sky.Background) as Texture2D; FogColors = Texture.GetPixels(0, (int)(Texture.height / 2f), Texture.width, 1); //Horizontal repeat, vertical clamp Texture2D fix = new Texture2D(Texture.width, Texture.height + 2, Texture.format, false); fix.SetPixels(0, 0, Texture.width, 1, Texture.GetPixels(0, 0, Texture.width, 1)); // Upper clamp fix.SetPixels(0, 1, Texture.width, Texture.height, Texture.GetPixels(0, 0, Texture.width, Texture.height)); // Main gradient fix.SetPixels(0, fix.height - 1, Texture.width, 1, Texture.GetPixels(0, Texture.height - 1, Texture.width, 1)); // Lower clamp fix.Apply(false, false); DestroyImmediate(Texture); Texture = fix; Texture.wrapMode = TextureWrapMode.Repeat; Fill(); }
public void Update() { Vector3 ssPositionOld = Camera.main.WorldToScreenPoint(transform.position); if (CurrentAction == NpcAction.Idle || CurrentAction == NpcAction.Idle3 || CurrentAction == NpcAction.Walk) { TimeSinceActionChange += Time.deltaTime; if (TimeUntilActionChange <= TimeSinceActionChange) { ToggleAction(); } } else if (!CurrentTiming.Loop && CurrentTiming.Ended && CurrentAction != NpcAction.Hide) { ToggleAction(); } bool shouldStopTalking = ShouldStopTalking != null && ShouldStopTalking(this); if (shouldStopTalking) { CurrentTextLine = -1; } if (CurrentAction != NpcAction.Talk) { if (ShouldStartTalking != null && CanTalk && (NPC.Speech.Count > 0 || NPC.CustomSpeechLine != null) && CurrentTextLine == -1 && ShouldStartTalking(this)) { CurrentAction = NpcAction.Talk; UpdateText(0); } if (CurrentAction == NpcAction.Walk) { Walk(); } } else if ((shouldStopTalking || CurrentTextLine < 0 || CurrentTextLine >= NPC.Speech.Count) && CurrentAction != NpcAction.TakeOff) { StartCoroutine(FadeTextOut()); ToggleAction(); } else { Talking(this); } transform.LookAt(transform.position + (transform.position - Camera.main.transform.position)); Vector3 ssPosition = Camera.main.WorldToScreenPoint(transform.position); bool lookingRight; if (FezHelper.AlmostEqual(ssPositionOld.x, ssPosition.x)) { lookingRight = LookingRight; } else { lookingRight = ssPositionOld.x < ssPosition.x; } if ((!lookingRight && 0f < meshRenderer.sharedMaterial.mainTextureScale.x) || (lookingRight && meshRenderer.sharedMaterial.mainTextureScale.x < 0f)) { CurrentAnimation.FlipH = !lookingRight; } }
public void Fill(FezUnitySky sky, SkyLayer layer, int index) { Layer = layer; float skyScale = 1f; if (sky.Name == "ROOTS" || sky.Name == "ORR_SKY") { skyScale = 2f; } if (sky.Name == "SEWERS") { skyScale = 32f; } Material materialBase = FezManager.Instance.SkyLayerMaterial; if (sky.IsFullbright) { // Full-bright sky (no fog, lighting) looks better materialBase = FezManager.Instance.SkyLayerFullbrightMaterial; } MeshFilter meshFilter = gameObject.AddComponent <MeshFilter>(); meshFilter.sharedMesh = FezManager.Instance.SkyLayerMesh; MeshRenderer meshRenderer = gameObject.AddComponent <MeshRenderer>(); Texture2D tex = FezManager.Instance.GetTexture2D("skies/" + sky.Name + "/" + layer.Name); meshRenderer.sharedMaterial = Instantiate(tex.GenMaterial(materialBase)); transform.localScale = new Vector3( transform.localScale.x, transform.localScale.y * Scale, transform.localScale.z ); float ratio = tex.width / tex.height; meshRenderer.sharedMaterial.mainTextureScale = new Vector2(1f * skyScale, Scale * ratio * skyScale); meshRenderer.sharedMaterial.color = new Color(1f, 1f, 1f, layer.Opacity); // TODO add further special cases if (FezHelper.IsSkyExtending(sky.Name)) { // The ceiling / bottom should extend, not repeat meshRenderer.sharedMaterial.mainTexture.wrapMode = TextureWrapMode.Clamp; meshRenderer.sharedMaterial.mainTextureOffset = new Vector2(0f, -meshRenderer.sharedMaterial.mainTextureScale.y / 2f + 1f); } else { // The sky layer repeats into infinity meshRenderer.sharedMaterial.mainTexture.wrapMode = TextureWrapMode.Repeat; } if (sky.Name == "OUTERSPACE") { // Scale the repeating star texture properly meshRenderer.sharedMaterial.mainTextureScale = new Vector2( (index / 4f) * 24f * meshRenderer.sharedMaterial.mainTextureScale.x, (index / 4f) * 24f * meshRenderer.sharedMaterial.mainTextureScale.y ); } if (sky.Name == "GRAVE") { // Offset the various layers to add variance in FPV transform.localPosition = new Vector3( transform.localPosition.x, transform.localPosition.y + index * 8f * Scale, transform.localPosition.z ); } // Fix shadow artifacting meshRenderer.shadowCastingMode = ShadowCastingMode.Off; // Fix sky flip and offset meshRenderer.sharedMaterial.mainTextureOffset = new Vector2( meshRenderer.sharedMaterial.mainTextureOffset.x, meshRenderer.sharedMaterial.mainTextureScale.y + meshRenderer.sharedMaterial.mainTextureOffset.y - 1f + (sky.Name == "ABOVE" ? -0.0125f : 0.625f) ); meshRenderer.sharedMaterial.mainTextureScale = new Vector2( meshRenderer.sharedMaterial.mainTextureScale.x, -meshRenderer.sharedMaterial.mainTextureScale.y ); }