private void ClickTVYaoKongRightBtEvent(pcvr.ButtonState val)
 {
     if (val == pcvr.ButtonState.UP)
     {
         return;
     }
     m_ExitType                     = ExitEnum.QueDing;
     QueDingUI.mainTexture          = QueDingImg[1];
     QuXiaoUI.mainTexture           = QuXiaoImg[0];
     QueDingUI.transform.localScale = m_BigScale;
     QuXiaoUI.transform.localScale  = m_SmallScale;
     SetAcitveBtFlash();
 }
    //static SSExitGameUI _Instance;
    //public static SSExitGameUI GetInstance()
    //{
    //    return _Instance;
    //}

    public void Init()
    {
        m_ExitType = ExitEnum.QuXiao;
        SSUIRoot.GetInstance().m_ExitUICom = this;
        QueDingUI.mainTexture = QueDingImg[0];
        QuXiaoUI.mainTexture  = QuXiaoImg[1];
        SetAcitveBtFlash();
        QueDingUI.transform.localScale = m_SmallScale;
        QuXiaoUI.transform.localScale  = m_BigScale;
        //InputEventCtrl.GetInstance().ClickTVYaoKongEnterBtEvent += ClickTVYaoKongEnterBtEvent;
        //InputEventCtrl.GetInstance().ClickTVYaoKongExitBtEvent += ClickTVYaoKongExitBtEvent;
        //InputEventCtrl.GetInstance().ClickTVYaoKongLeftBtEvent += ClickTVYaoKongLeftBtEvent;
        //InputEventCtrl.GetInstance().ClickTVYaoKongRightBtEvent += ClickTVYaoKongRightBtEvent;
    }
 public void Init()
 {
     Debug.Log("SSExitGameUI::Init...");
     m_ExitType            = ExitEnum.QuXiao;
     QueDingUI.mainTexture = QueDingImg[0];
     QuXiaoUI.mainTexture  = QuXiaoImg[1];
     SetAcitveBtFlash();
     QueDingUI.transform.localScale = m_SmallScale;
     QuXiaoUI.transform.localScale  = m_BigScale;
     InputEventCtrl.GetInstance().mListenPcInputEvent.ClickTVYaoKongEnterBtEvent += ClickTVYaoKongEnterBtEvent;
     InputEventCtrl.GetInstance().mListenPcInputEvent.ClickTVYaoKongExitBtEvent += ClickTVYaoKongExitBtEvent;
     InputEventCtrl.GetInstance().mListenPcInputEvent.ClickTVYaoKongLeftBtEvent += ClickTVYaoKongLeftBtEvent;
     InputEventCtrl.GetInstance().mListenPcInputEvent.ClickTVYaoKongRightBtEvent += ClickTVYaoKongRightBtEvent;
 }
示例#4
0
 public void Init()
 {
     //创建退出游戏对话框事件.
     SSGameDataCtrl.GetInstance().m_SSUIRoot.CreatExitGameUIEvent();
     m_ExitType            = ExitEnum.QuXiao;
     QueDingUI.mainTexture = QueDingImg[0];
     QuXiaoUI.mainTexture  = QuXiaoImg[1];
     SetAcitveBtFlash();
     QueDingUI.transform.localScale = m_SmallScale;
     QuXiaoUI.transform.localScale  = m_BigScale;
     InputEventCtrl.GetInstance().ClickTVYaoKongEnterBtEvent += ClickTVYaoKongEnterBtEvent;
     InputEventCtrl.GetInstance().ClickTVYaoKongExitBtEvent  += ClickTVYaoKongExitBtEvent;
     InputEventCtrl.GetInstance().ClickTVYaoKongLeftBtEvent  += ClickTVYaoKongLeftBtEvent;
     InputEventCtrl.GetInstance().ClickTVYaoKongRightBtEvent += ClickTVYaoKongRightBtEvent;
 }
    private void LockDoorToNextRoom(int index)
    {
        if (index >= nodes.Count - 2)
        {
            throw new System.Exception($"index must be inferior to {nodes.Count - 2}");
        }

        Vector2  v        = nodes[index + 1].position - nodes[index].position;
        ExitEnum dirNode1 = ExitEnum.Down;
        ExitEnum dirNode2 = ExitEnum.Down;

        if (v.y > 0f)
        {
            dirNode1 = ExitEnum.Up;
            dirNode2 = ExitEnum.Down;
        }
        else if (v.y < 0f)
        {
            dirNode1 = ExitEnum.Down;
            dirNode2 = ExitEnum.Up;
        }
        else if (v.x > 0f)
        {
            dirNode1 = ExitEnum.Right;
            dirNode2 = ExitEnum.Left;
        }
        else if (v.y < 0f)
        {
            dirNode1 = ExitEnum.Left;
            dirNode2 = ExitEnum.Right;
        }

        roomsExit[index].SetExits(new List <ExitEnum>()
        {
            dirNode1
        }, Door.STATE.CLOSED);
        roomsExit[index + 1].SetExits(new List <ExitEnum>()
        {
            dirNode2
        }, Door.STATE.CLOSED);
    }
    private List <Node> GenerateListOfNode(Node o, List <Node> nodeList, int nbOfRooms, bool Main = false)
    {
        List <Node> nln = new List <Node>()
        {
            o
        };
        List <Node>       usedPos    = new List <Node>(nodeList);
        List <Connection> nlc        = new List <Connection>(tconnections);
        int _nbOfRoomInSameDirection = nbOfRoomInSameDirection;

        for (int i = 0; i < nbOfRooms - 1; i++)
        {
            // info on current node
            Vector2Int pos = new Vector2Int(nln[i].position.x, nln[i].position.y);

            // place current node + 1
            ExitEnum dir = ExitEnum.Down;

            // Set or Read nln[i] exit direction
            if (i == 0)
            {
                List <ExitEnum> pp = new List <ExitEnum>(possibleExits);

                if (o.exits.Contains(ExitEnum.Up) || CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y + 1)))
                {
                    pp.Remove(ExitEnum.Up);
                }
                if (o.exits.Contains(ExitEnum.Down) || CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y - 1)))
                {
                    pp.Remove(ExitEnum.Down);
                }
                if (o.exits.Contains(ExitEnum.Left) || CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x - 1, pos.y)))
                {
                    pp.Remove(ExitEnum.Left);
                }
                if (o.exits.Contains(ExitEnum.Right) || CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x + 1, pos.y)))
                {
                    pp.Remove(ExitEnum.Right);
                }

                if (pp.Count == 0)
                {
                    Debug.LogError("no path available from origin");
                    return(nodeList);
                }
                dir = pp[Random.Range(0, pp.Count)];
                o.exits.Add(dir);
            }
            else
            {
                if (nln[i].exits.Contains(ExitEnum.Up) && !CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y + 1)))
                {
                    dir = ExitEnum.Up;
                }
                if (nln[i].exits.Contains(ExitEnum.Down) && !CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y - 1)))
                {
                    dir = ExitEnum.Down;
                }
                if (nln[i].exits.Contains(ExitEnum.Left) && !CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x - 1, pos.y)))
                {
                    dir = ExitEnum.Left;
                }
                if (nln[i].exits.Contains(ExitEnum.Right) && !CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x + 1, pos.y)))
                {
                    dir = ExitEnum.Right;
                }
            }

            // Place the new node
            ExitEnum exitToAddToNewNode = ExitEnum.Down;
            switch (dir)
            {
            case ExitEnum.Up:
                pos = new Vector2Int(pos.x, pos.y + 1);
                exitToAddToNewNode = ExitEnum.Down;
                break;

            case ExitEnum.Down:
                pos = new Vector2Int(pos.x, pos.y - 1);
                exitToAddToNewNode = ExitEnum.Up;
                break;

            case ExitEnum.Left:
                pos = new Vector2Int(pos.x - 1, pos.y);
                exitToAddToNewNode = ExitEnum.Right;
                break;

            case ExitEnum.Right:
                pos = new Vector2Int(pos.x + 1, pos.y);
                exitToAddToNewNode = ExitEnum.Left;
                break;
            }

            // Select Exit Direction of the new node
            List <ExitEnum> pathToRemove   = new List <ExitEnum>();
            ExitEnum[]      pe             = new ExitEnum[0];
            bool            isGoingForward = false;
            if (_nbOfRoomInSameDirection != 0 && i != 0)
            {
                isGoingForward = true;
                switch (dir)
                {
                case ExitEnum.Up:
                    if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y + 1)))
                    {
                        isGoingForward = false;
                    }
                    break;

                case ExitEnum.Down:
                    if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y - 1)))
                    {
                        isGoingForward = false;
                    }
                    break;

                case ExitEnum.Left:
                    if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x - 1, pos.y)))
                    {
                        isGoingForward = false;
                    }
                    break;

                case ExitEnum.Right:
                    if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x + 1, pos.y)))
                    {
                        isGoingForward = false;
                    }
                    break;
                }

                if (isGoingForward)
                {
                    pe = new ExitEnum[] { dir };
                    _nbOfRoomInSameDirection -= 1;
                }
            }
            if (!isGoingForward)
            {
                // prevent overlaping between nodes
                if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y + 1)))                 // up
                {
                    pathToRemove.Add(ExitEnum.Up);
                }
                if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x, pos.y - 1)))                 // down
                {
                    pathToRemove.Add(ExitEnum.Down);
                }
                if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x + 1, pos.y)))                 // right
                {
                    pathToRemove.Add(ExitEnum.Right);
                }
                if (CheckIfNodeListContainPos(usedPos, new Vector2Int(pos.x - 1, pos.y)))                 // left
                {
                    pathToRemove.Add(ExitEnum.Left);
                }

                pathToRemove.Add(dir);

                // retrieve possible exit for new node
                pe = possibleExits.Except(pathToRemove).ToArray();

                // restart if path stucked
                if (pe.Length == 0)
                {
                    Debug.LogError("Hallway cannot continue");
                    return(nodeList);
                }

                _nbOfRoomInSameDirection = Random.Range(1, nbOfRoomInSameDirection + 1);
            }

            // create new node
            Node n = new Node();
            n.position = pos;
            n.exits.Add(exitToAddToNewNode);

            if (i != nbOfRooms - 2)
            {
                n.exits.Add(pe[Random.Range(0, pe.Length)]);
            }


            nln.Add(n);
            usedPos.Add(n);

            nlc.Add(new Connection(new Node[] { nln[i], nln[i + 1] }));
        }

        nln.Remove(o);
        tconnections = AddToList(tconnections, nlc.Except(tconnections).ToList());
        return(AddToList(nodeList, nln));
    }