예제 #1
0
 public void ShowPuzzle(int puzzle_number) //Brian - Use this to create/show puzzles from main menu
 {
     currId = puzzle_number;
     print("Showing Puzzle " + puzzle_number.ToString());
     if (CurrentPuzzle != null)
     {
         Destroy(CurrentPuzzle.gameObject);
     }
     if (puzzle_number == -1)
     {
         quitButton.SetActive(false);
         soundOn.SetActive(false);
         soundOnImage.SetActive(false);
         soundOff.SetActive(false);
         soundOffImage.SetActive(false);
         musicOn.SetActive(false);
         musicOnImage.SetActive(false);
         musicOff.SetActive(false);
         musicOffImage.SetActive(false);
         Color c = FadeCover.GetComponent <SpriteRenderer>().color;
         FadeCover.GetComponent <SpriteRenderer>().color = new Color(c.r, c.g, c.b, 0);
         return;
     }
     else
     {
         Color c = FadeCover.GetComponent <SpriteRenderer>().color;
         FadeCover.GetComponent <SpriteRenderer>().color = new Color(c.r, c.g, c.b, 1);
         CurrentPuzzle        = Instantiate(puzzles[puzzle_number], new Vector3(0, 0, 0), Quaternion.identity);
         CurrentPuzzle.parent = this;
         quitButton.SetActive(true);
         if (PlayerPrefs.GetInt("Music") == 1)
         {
             musicOn.SetActive(true);
             musicOnImage.SetActive(true);
         }
         else
         {
             musicOff.SetActive(true);
             musicOffImage.SetActive(true);
         }
         if (PlayerPrefs.GetInt("Mute") == 1)
         {
             soundOn.SetActive(true);
             soundOnImage.SetActive(true);
         }
         else
         {
             soundOff.SetActive(true);
             soundOffImage.SetActive(true);
         }
     }
 }
예제 #2
0
    void ChangePuzzleBehaviorForPuzzleCheck(int roomID, int index, PuzzleBehavior behavior)
    {
        if (roomID == -1)
        {
            return;
        }

        if (!m_puzzleChecker.ContainsKey(roomID))
        {
            return;
        }

        if (index >= m_puzzleChecker[roomID].Count)
        {
            return;
        }

        m_puzzleChecker[roomID][index].behavior = behavior;
    }
예제 #3
0
    void UpdatePuzzleChecker(int roomID)
    {
        if (roomID == -1)
        {
            return;
        }

        if (!m_puzzleChecker.ContainsKey(roomID))
        {
            return;
        }

        float refX = 0f;
        float refY = 0f;

        for (int i = 0; i < m_puzzleChecker[roomID].Count; ++i)
        {
            Vector3 currentPos = Vector3.zero;

            PuzzleBehavior currentPiece = m_puzzleChecker[roomID][i].behavior;

            currentPos.x = currentPiece.transform.localPosition.x;
            currentPos.y = currentPiece.transform.localPosition.y;

            //Debug.Log("UPDATE " + currentPos);

            m_puzzleChecker[roomID][i].currentPos.x = currentPos.x / currentPiece.GetForegroundWidth();
            m_puzzleChecker[roomID][i].currentPos.y = currentPos.y / currentPiece.GetForegroundHeight();

            if (i == 0)
            {
                refX = currentPos.x / currentPiece.GetForegroundWidth();
                refY = currentPos.y / currentPiece.GetForegroundHeight();
            }

            m_puzzleChecker[roomID][i].currentPos.x -= refX;
            m_puzzleChecker[roomID][i].currentPos.y -= refY;

            //Debug.Log(i);
            //m_puzzleChecker[roomID][i].Display();
        }
    }
예제 #4
0
    void AddPuzzlePieceToChecker(int roomID, PuzzleBehavior puzzlePiece)
    {
        if (roomID == -1)
        {
            return;
        }

        if (puzzlePiece == null)
        {
            return;
        }

        Vector3 currentPos = Vector3.zero;

        currentPos.x = puzzlePiece.transform.localPosition.x;
        currentPos.y = puzzlePiece.transform.localPosition.y;

        //	Debug.Log("ADD " + currentPos);

        if (!m_puzzleChecker.ContainsKey(roomID))
        {
            m_puzzleChecker[roomID] = new List <PuzzleSolutionCheck>();
        }

        PuzzleSolutionCheck currentSolutionCheck = new PuzzleSolutionCheck();

        currentSolutionCheck.initialPos.x = currentPos.x / puzzlePiece.GetForegroundWidth();
        currentSolutionCheck.initialPos.y = currentPos.y / puzzlePiece.GetForegroundHeight();

        currentSolutionCheck.behavior = puzzlePiece;

        m_puzzleChecker[roomID].Add(currentSolutionCheck);

        m_puzzleChecker[roomID][m_puzzleChecker[roomID].Count - 1].solutionPos.x = currentSolutionCheck.initialPos.x - m_puzzleChecker[roomID][0].initialPos.x;
        m_puzzleChecker[roomID][m_puzzleChecker[roomID].Count - 1].solutionPos.y = currentSolutionCheck.initialPos.y - m_puzzleChecker[roomID][0].initialPos.y;

        //Debug.Log(m_puzzleChecker[roomID].Count-1);
        //m_puzzleChecker[roomID][m_puzzleChecker[roomID].Count-1].Display();
    }
예제 #5
0
    IEnumerator UpdateSceneCoroutine()
    {
        //GenericLog.Log("UPDATE SCENE");
        while (!SEGMentPath.instance.ArePathGenerated())
        {
            yield return(null);
        }

        //Author - Vincent Casamayou - June 2019
        //Check and Update the Radar
        m_disableRadar = true;
        Debug.Log("The Radar is " + m_SEGMentEngine.GetCurrentRadar());
        if (m_SEGMentEngine.GetCurrentRadar() == true)
        {
            m_disableRadar = false;
        }


        if (m_backgroundDisplay != null)
        {
            GenericLog.Log("APPLI PATH : " + SEGMentPath.instance.GetSEGMentDiagramPath());
            //GenericLog.Log("GDATADIRECTORY PATH : " + m_gameDataDirectoryName);
            GenericLog.Log("GETCURRENTROOMBACKGROUND PATH : " + m_SEGMentEngine.GetCurrentRoomBackgroundImageURL());

            m_backgroundDisplay.ChangeImageFromURL(Path.Combine(SEGMentPath.instance.GetSEGMentGameDataPath(), m_SEGMentEngine.GetCurrentRoomBackgroundImageURL()));

            while (m_backgroundDisplay.IsLoadingNewImage())
            {
                yield return(null);
            }


            MetricLogger.instance.Log("CHANGE_ROOM", m_SEGMentEngine.GetCurrentRoomBackgroundImageURL());

            yield return(null);
        }

        foreach (KeyValuePair <int, GameObject> currentItemKeyValue in m_sceneItemsBySEGMentIndex)
        {
            //for (int i = 0; i < m_sceneItems.Count ; ++i) {
            //foreach (GameObject item in m_sceneItems) {
            //GameObject currentItem = m_sceneItems[i];
            GameObject     currentItem           = currentItemKeyValue.Value;
            SpriteSetter   currentSpriteSetter   = currentItem.GetComponent <SpriteSetter> ();
            PuzzleBehavior currentPuzzleBehavior = currentItem.GetComponent <PuzzleBehavior>();

            if (currentSpriteSetter != null)
            {
                m_SEGMentEngine.SetItemStartFrame(currentItemKeyValue.Key, currentSpriteSetter.GetCurrentSpriteFrameNum());
                currentSpriteSetter.ReleaseSprite();
            }

            if (currentPuzzleBehavior != null)
            {
                if (currentPuzzleBehavior.IsDragDropEnabled())
                {
                    //AddPuzzleSavPos(m_roomID, i, currentItem.transform.localPosition, currentItem.transform.localScale);
                    AddPuzzleSavPos(currentItemKeyValue.Key, currentItem.transform.localPosition, currentItem.transform.localScale);
                }
                //currentPuzzleBehavior.
            }

            Destroy(currentItem);
        }

        //m_sceneItems.Clear();
        m_sceneItemsBySEGMentIndex.Clear();

        List <int> itemIndexes  = m_SEGMentEngine.GetItemIndexes();
        int        orderInLayer = 0;

        m_roomID = m_SEGMentEngine.GetCurrentRoomID();

        int currentPuzzleIndex = 0;

        m_objectStateToSolutionCheck.Clear();

        foreach (int index in itemIndexes)
        {
            string itemImageURL = m_SEGMentEngine.GetItemImageURL(index);

            if (itemImageURL != "")
            {
                BoundingBox relativeItemPosBB = m_SEGMentEngine.GetItemBoundingBox(index);
                GameObject  currentItem       = Instantiate(m_itemObject, Vector3.zero, Quaternion.identity) as GameObject;



                SpriteSetter itemSpriteSetter = currentItem.GetComponent <SpriteSetter> ();

                if (itemSpriteSetter != null)
                {
                    itemSpriteSetter.SetUIManager(m_UIManager);
                    StartCoroutine(itemSpriteSetter.SetSpriteByURLRelativelyToAnotherOneCoroutine(Path.Combine(SEGMentPath.instance.GetSEGMentGameDataPath(), itemImageURL),
                                                                                                  m_backgroundDisplay.GetMainSpriteRenderer(),
                                                                                                  relativeItemPosBB.x1,
                                                                                                  relativeItemPosBB.y1,
                                                                                                  relativeItemPosBB.x2,
                                                                                                  relativeItemPosBB.y2,
                                                                                                  orderInLayer));

                    while (!itemSpriteSetter.IsSpriteLoaded())
                    {
                        yield return(null);
                    }
                }

                string itemSoundName       = m_SEGMentEngine.GetItemSoundName(index);
                string itemDescriptionName = m_SEGMentEngine.GetItemDescription(index);

                bool isPuzzlePiece = m_SEGMentEngine.IsItemPuzllePiece(index);

                if (isPuzzlePiece)
                {
                    PuzzleBehavior currentPuzzleBehavior = currentItem.GetComponent <PuzzleBehavior>();

                    if (currentPuzzleBehavior)
                    {
                        currentPuzzleBehavior.SetUIManager(m_UIManager);
                        currentPuzzleBehavior.EnableDragDrop(true);

                        //if (IsPuzzleSavExist(m_roomID, m_sceneItems.Count)) {
                        //int key = GetHashForPuzzleSav(m_roomID, m_sceneItems.Count);

                        if (IsPuzzleSavExist(index))
                        {
                            //int key = GetHashForPuzzleSav(m_roomID, index);
                            currentItem.transform.localPosition = m_puzzleSavPositions[index].puzzlePos;
                            currentItem.transform.localScale    = m_puzzleSavPositions[index].puzzleScale;

                            ChangePuzzleBehaviorForPuzzleCheck(m_roomID, currentPuzzleIndex, currentPuzzleBehavior);
                            currentPuzzleIndex++;
                        }
                        else
                        {
                            AddPuzzlePieceToChecker(m_roomID, currentPuzzleBehavior);
                            currentPuzzleBehavior.RandomizePos();
                        }
                    }
                }



                if (itemDescriptionName != "")
                {
                    Text itemText = currentItem.GetComponent <Text>();

                    if (itemText != null)
                    {
                        itemText.text = itemDescriptionName;
                    }
                }



                SoundLauncher itemSoundLauncher = currentItem.GetComponent <SoundLauncher>();

                if (itemSoundName != "")
                {
                    if (itemSoundLauncher != null)
                    {
                        itemSoundLauncher.LoadSoundByURL(SEGMentPath.instance.GetSoundPath(itemSoundName), true);
                    }

                    itemSoundLauncher.PlayLoadedSoundWhenReady();
                }

                List <int> stopFrames     = m_SEGMentEngine.GetItemStopFrames(index);
                List <int> solutionFrames = m_SEGMentEngine.GetItemSolutionFrames(index);

                AudioSource itemAudioSource = currentItem.GetComponent <AudioSource>();

                if (itemAudioSource != null)
                {
                    if (stopFrames.Count > 0)
                    {
                        itemAudioSource.volume = 0f;
                    }
                }

                foreach (int stopFrame in stopFrames)
                {
                    itemSpriteSetter.SetStopFrame(stopFrame);
                }

                if (solutionFrames.Count > 0)
                {
                    m_objectStateToSolutionCheck[itemSpriteSetter] = solutionFrames;
                }

                itemSpriteSetter.setFrameIndex(m_SEGMentEngine.GetItemStartFrame(index));

                itemSpriteSetter.StartGifLoop();

                //m_sceneItems.Add(currentItem);

                m_sceneItemsBySEGMentIndex[index] = currentItem;

                orderInLayer++;
                yield return(null);
            }
        }

        List <int> clickTextIndexes = m_SEGMentEngine.GetClickTextIndexes();

        foreach (GameObject clickText in m_sceneClickTexts)
        {
            Destroy(clickText);
        }

        foreach (GameObject radarIcon in m_sceneClickTextRadarIcons)
        {
            Destroy(radarIcon);
        }

        m_sceneClickTexts.Clear();
        m_sceneClickTextRadarIcons.Clear();

        foreach (int index in clickTextIndexes)
        {
            SpriteRenderer clickTextSpriteRenderer = m_clickTextObject.GetComponent <SpriteRenderer>();

            if (clickTextSpriteRenderer != null)
            {
                GameObject currentClickText          = Instantiate(m_clickTextObject, Vector3.zero, Quaternion.identity) as GameObject;
                GameObject currentClickTextRadarIcon = Instantiate(m_clickTextRadarIcon, Vector3.zero, Quaternion.identity) as GameObject;

                BoundingBox relativeClickTextPosBB = m_SEGMentEngine.GetClickTextBoundingBox(index);

                SpriteSetter clickTextSpriteSetter = currentClickText.GetComponent <SpriteSetter> ();

                if (clickTextSpriteSetter != null)
                {
                    clickTextSpriteSetter.SetSpriteRelativelyToAnotherOne(clickTextSpriteRenderer.sprite,
                                                                          m_backgroundDisplay.GetMainSpriteRenderer(),
                                                                          relativeClickTextPosBB.x1,
                                                                          relativeClickTextPosBB.y1,
                                                                          relativeClickTextPosBB.x2,
                                                                          relativeClickTextPosBB.y2);
                }

                string clickTextSoundName = m_SEGMentEngine.GetClickTextSoundName(index);
                string clickTextText      = m_SEGMentEngine.GetClickTextText(index);
                bool   isClickTextAnURL   = m_SEGMentEngine.IsClickTextAnURL(index);

                if (clickTextText != "")
                {
                    Text actualText = currentClickText.GetComponent <Text>();

                    if (actualText != null)
                    {
                        actualText.text = clickTextText;
                    }
                }

                if (clickTextSoundName != "")
                {
                    SoundLauncher clickTextSoundLauncher = currentClickText.GetComponent <SoundLauncher>();

                    if (clickTextSoundLauncher != null)
                    {
                        clickTextSoundLauncher.LoadSoundByURL(SEGMentPath.instance.GetSoundPath(clickTextSoundName), false);
                    }
                }

                MustTextBeConsideredAsURL mustClicTextBeSeenAsAnURL = currentClickText.GetComponent <MustTextBeConsideredAsURL>();

                if (mustClicTextBeSeenAsAnURL != null)
                {
                    mustClicTextBeSeenAsAnURL.SetTextAsBeingAnURL(isClickTextAnURL);
                }

                m_sceneClickTexts.Add(currentClickText);

                // Create a click text radar icon with a respected ratio
                if (currentClickText.transform.localScale.x < currentClickText.transform.localScale.y)
                {
                    currentClickTextRadarIcon.transform.localScale = new Vector3(currentClickText.transform.localScale.x, currentClickText.transform.localScale.x, 1.0f);
                }
                else
                {
                    currentClickTextRadarIcon.transform.localScale = new Vector3(currentClickText.transform.localScale.y, currentClickText.transform.localScale.y, 1.0f);
                }

                currentClickTextRadarIcon.transform.localPosition = currentClickText.transform.localPosition;

                m_sceneClickTextRadarIcons.Add(currentClickTextRadarIcon);
                // *********** //

                yield return(null);
            }
        }

        if (m_preventInputByKeyboard != null)
        {
            if (m_sceneClickTexts.Count > 0)
            {
                m_preventInputByKeyboard.SetActive(true);
            }
            else
            {
                m_preventInputByKeyboard.SetActive(false);
            }
        }


        foreach (GameObject goTo in m_sceneGoTos)
        {
            Destroy(goTo);
        }

        foreach (GameObject radarIcon in m_sceneGoToRadarIcons)
        {
            Destroy(radarIcon);
        }

        List <BoundingBox> goToAreas = m_SEGMentEngine.GetListOfDisplacementAreas();

        foreach (BoundingBox currentGoToBB in goToAreas)
        {
            SpriteRenderer goToAreaSpriteRenderer = m_gotoObject.GetComponent <SpriteRenderer> ();

            if (goToAreaSpriteRenderer != null)
            {
                GameObject currentGoTo          = Instantiate(m_gotoObject, Vector3.zero, Quaternion.identity) as GameObject;
                GameObject currentGoToRadarIcon = Instantiate(m_gotoRadarIcon, Vector3.zero, Quaternion.identity) as GameObject;

                BoundingBox relativeGoToPosBB = currentGoToBB;

                SpriteSetter goToSpriteSetter = currentGoTo.GetComponent <SpriteSetter> ();

                if (goToSpriteSetter != null)
                {
                    goToSpriteSetter.SetSpriteRelativelyToAnotherOne(goToAreaSpriteRenderer.sprite,
                                                                     m_backgroundDisplay.GetMainSpriteRenderer(),
                                                                     relativeGoToPosBB.x1,
                                                                     relativeGoToPosBB.y1,
                                                                     relativeGoToPosBB.x2,
                                                                     relativeGoToPosBB.y2);
                }



                m_sceneGoTos.Add(currentGoTo);

                // Create a click text radar icon with a respected ratio
                if (currentGoTo.transform.localScale.x < currentGoTo.transform.localScale.y)
                {
                    currentGoToRadarIcon.transform.localScale = new Vector3(currentGoTo.transform.localScale.x, currentGoTo.transform.localScale.x, 1.0f);
                }
                else
                {
                    currentGoToRadarIcon.transform.localScale = new Vector3(currentGoTo.transform.localScale.y, currentGoTo.transform.localScale.y, 1.0f);
                }

                currentGoToRadarIcon.transform.localPosition = currentGoTo.transform.localPosition;

                m_sceneGoToRadarIcons.Add(currentGoToRadarIcon);
                // *********** //
            }
        }

        m_mustHighlightDiary = false;

        string diaryEntry = m_SEGMentEngine.PopCurrentRoomDiaryEntryName();

        if (diaryEntry != "")
        {
            m_UIManager.AddDiaryImage(SEGMentPath.instance.GetDiaryPath(diaryEntry));

            while (m_UIManager.IsDiaryImageStillLoading())
            {
                yield return(null);
            }

            if (m_SEGMentEngine.ShouldDiaryEntryBeHighlighted())
            {
                m_mustHighlightDiary = true;
            }
        }


        UpdatePuzzleChecker(m_roomID);

        while (Time.fixedTime - m_launchDate < m_minimumWaitTimeForFirstLoad)
        {
            yield return(null);
        }

        if (m_SEGMentEngine.GetCurrentRoomBackgroundMusicName() != "")
        {
            if (m_currentlyPlayedMusic != m_SEGMentEngine.GetCurrentRoomBackgroundMusicName())
            {
                AudioManager.instance.PlayMusicByURL(SEGMentPath.instance.GetSoundPath(m_SEGMentEngine.GetCurrentRoomBackgroundMusicName()),
                                                     m_SEGMentEngine.MustCurrentRoomBackgroudMusicLoop());
                while (!AudioManager.instance.isMusicLoaded())
                {
                    yield return(null);
                }
            }
        }
        else
        {
            AudioManager.instance.StopMusic();
        }



        yield return(null);


        m_currentlyPlayedMusic = m_SEGMentEngine.GetCurrentRoomBackgroundMusicName();

        m_isSceneLoaded = true;
    }
예제 #6
0
 public PuzzleSolutionCheck()
 {
     behavior    = null;
     solutionPos = Vector2.zero;
     currentPos  = Vector2.zero;
 }