// Update is called once per frame void Update() { hilightList.ForEach(i => Destroy(i.t.gameObject)); hilightList.Clear(); if (activeRay && !playingClearAnimation) { float laserPos = 0; int hilightCount = 0; LaserElement newHilight; hilightTiming = (hilightTiming + Time.deltaTime * hilightSpeed) % hilightInterval; for (int i = 0; i < laserList.Count; i++) { laserPos += laserList[i].length; if (laserPos >= hilightCount * hilightInterval + hilightTiming) { newHilight = new LaserElement(hilightPrefab, laserList[i].p, laserList[i].dir, 1.0f); hilightList.Add(newHilight); if (laserList[i].length < 1) { newHilight.length = laserList[i].length; } MeshRenderer render = newHilight.t.GetComponent <MeshRenderer>(); render.material.mainTextureScale = new Vector2(1.0f, hilightWidth * newHilight.length); render.material.mainTextureOffset = new Vector2(0.0f, -hilightWidth * (hilightCount * hilightInterval + hilightTiming + laserList[i].length - laserPos) + 0.5f); render.sortingOrder = laserList.Count; hilightCount++; } } } }
public void MakeLaserSprite() { map = MonoBehaviour.FindObjectOfType <GameLoader>().map; ArrayList visited = new ArrayList(); laserList.ForEach(i => Destroy(i.t.gameObject)); laserList.Clear(); Pos p, nextPos; p = map.start.Key; Direction dir = map.start.Value.dir; while (true) { Hexagon next; nextPos = Hexagon.NextTile(p, dir); Debug.DrawLine(Transformer.PosToWorld(p), Transformer.PosToWorld(nextPos), Color.red); LaserElement newLaser = new LaserElement(laserPrefab, p, dir, 1.0f); laserList.Add(newLaser); newLaser.t.parent = ray.transform; if (nextPos.Equals(map.end.Key) && dir == map.end.Value.dir) { // Clear Debug.Log("Level Clear"); isClear = true; /* * PlayerPrefs.SetInt(GameLoader.levelData, 1); * PlayerPrefs.Save(); * FindObjectOfType<UIButtonHandler>().onMenuOpen(); */ break; } if (map.tileset.TryGetValue(nextPos, out next)) { if (next.Reflect(dir) == Direction.Empty) { newLaser.length = 0.5f; break; } dir = next.Reflect(dir); p = nextPos; if (visited.Contains(new KeyValuePair <Pos, Direction>(p, dir))) { break; // Loop } visited.Add(new KeyValuePair <Pos, Direction>(p, dir)); } else { newLaser.length = 0.5f; break; } } laserLength = 0; laserList.ForEach(i => laserLength += i.length); for (int i = 0; i < laserList.Count; i++) { MeshRenderer render = laserList[i].t.GetComponent <MeshRenderer>(); render.material.mainTextureScale = new Vector2(1.0f, 1 / Mathf.Max(16.0f, laserLength)); render.material.mainTextureOffset = new Vector2(0.0f, i / Mathf.Max(16.0f, laserLength)); render.sortingOrder = i; } activeRay = true; hilightTiming = 0; if (isClear) { StartCoroutine(StageClear()); } }
IEnumerator StageClear() { LaserElement clearHilight = new LaserElement(hilightPrefab, laserList[0].p, laserList[0].dir, 1.0f);; PlayerPrefs.SetInt(GameLoader.levelData, 1); PlayerPrefs.Save(); playingClearAnimation = true; for (int i = 0; i < laserList.Count; i++) { laserList[i].t.gameObject.SetActive(false); } for (float clearLaserPos = 0; clearLaserPos < laserLength; clearLaserPos += Time.deltaTime * 6.0f) { if (!UIButtonHandler.clearAnimation) { break; } float drawedLaserPos = 0; for (int i = 0; i < laserList.Count; i++) { if (clearLaserPos - drawedLaserPos <= 0) { break; } else { laserList[i].t.gameObject.SetActive(true); if (clearLaserPos - drawedLaserPos <= 1.0f) { laserList[i].length = clearLaserPos - drawedLaserPos; clearHilight.SetPosition(laserList[i].p, laserList[i].dir, laserList[i].length); MeshRenderer render = clearHilight.t.GetComponent <MeshRenderer>(); render.material.mainTextureScale = new Vector2(1.0f, hilightWidth * clearHilight.length); render.material.mainTextureOffset = new Vector2(0.0f, -hilightWidth * clearHilight.length + 0.8f); render.sortingOrder = laserList.Count; } else if (laserList[i].length < 1.0f) { laserList[i].length = 1.0f; } } drawedLaserPos += laserList[i].length; } yield return(null); } for (int i = 0; i < laserList.Count; i++) { laserList[i].t.gameObject.SetActive(true); laserList[i].length = 1.0f; } Destroy(clearHilight.t.gameObject); if (UIButtonHandler.clearAnimation == true) { Transform t = (Transform)MonoBehaviour.Instantiate( hilightPrefab, Transformer.PosToWorld(Hexagon.NextTile(laserList[laserList.Count - 1].p, laserList[laserList.Count - 1].dir)) + (Vector3.back * 0.3f), Quaternion.AngleAxis(Hexagon.DirectionToDegree(laserList[laserList.Count - 1].dir) + 90, Vector3.back)); t.localScale = new Vector3(0.4f, 1.30f, 1.0f); Material m = t.GetComponent <MeshRenderer>().material; /* * for (float i = 0.1f; i < 0.7f; i += Time.deltaTime) * { * m.mainTextureScale = new Vector2(1, 0.1f / i / i); * m.mainTextureOffset = new Vector2(0, 0.5f - 0.1f / i / i / 2); * yield return null; * } * for(float i = 0.7f; i > 0.1; i -= Time.deltaTime) * { * m.mainTextureScale = new Vector2(1, 0.1f / i / i); * m.mainTextureOffset = new Vector2(0, 0.5f - 0.1f / i / i / 2); * yield return null; * } */ m.mainTextureScale = new Vector2(1f, 3f); float i = 0.0f; for (; i < 0.3f; i += Time.deltaTime) { m.mainTextureOffset = new Vector2(0, -7 * i + 3f); yield return(null); } clearSound.PlayOneShot(clearSoundClip, 0.3f); for (; i < 1f; i += Time.deltaTime) { m.mainTextureOffset = new Vector2(0, -7 * i + 3f); yield return(null); } Destroy(t.gameObject); } playingClearAnimation = false; FindObjectOfType <UIButtonHandler>().onMenuOpen(); FindObjectOfType <UIButtonHandler>().menuUI.SetActive(false); }
void OnEnable() { m_currentProperties = m_overrideExternalProperties ? m_inspectorProperties : m_data.m_properties; m_currentProperties.m_initialTimingPhase = Mathf.Clamp01(m_currentProperties.m_initialTimingPhase); m_time = m_currentProperties.m_initialTimingPhase * m_currentProperties.m_intervalTime; float angleStep = m_currentProperties.m_angularRange / m_currentProperties.m_raysNumber; m_assignSparks = m_data.m_laserSparks != null; m_assignLaserMaterial = m_data.m_laserMaterial != null; for (int i = 0; i < m_currentProperties.m_raysNumber; i++) { LaserElement element = new LaserElement(); GameObject newObj = new GameObject("lineRenderer_" + i.ToString()); if (m_currentProperties.m_physicsType == LaserProperties.PhysicsType.Physics2D) { newObj.transform.position = (Vector2)transform.position; } else { newObj.transform.position = transform.position; } newObj.transform.rotation = transform.rotation; newObj.transform.Rotate(Vector3.up, i * angleStep); newObj.transform.position += newObj.transform.forward * m_currentProperties.m_minRadialDistance; newObj.AddComponent <LineRenderer>(); if (m_assignLaserMaterial) { newObj.GetComponent <LineRenderer>().material = m_data.m_laserMaterial; } newObj.GetComponent <LineRenderer>().receiveShadows = false; newObj.GetComponent <LineRenderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; newObj.GetComponent <LineRenderer>().startWidth = m_currentProperties.m_rayWidth; newObj.GetComponent <LineRenderer>().useWorldSpace = true; newObj.GetComponent <LineRenderer>().SetPosition(0, newObj.transform.position); newObj.GetComponent <LineRenderer>().SetPosition(1, newObj.transform.position + transform.forward * m_currentProperties.m_maxRadialDistance); newObj.transform.SetParent(transform); if (m_assignSparks) { GameObject sparks = Instantiate(m_data.m_laserSparks); sparks.transform.SetParent(newObj.transform); sparks.SetActive(false); element.sparks = sparks; } element.transform = newObj.transform; element.lineRenderer = newObj.GetComponent <LineRenderer>(); element.impact = false; elementsList.Add(element); } }