Ejemplo n.º 1
0
 // 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++;
             }
         }
     }
 }
Ejemplo n.º 2
0
    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());
        }
    }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
        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);
            }
        }