public CollisionManager(PerfectExplosionManager perfectManager, GoodExplosionManager goodManager, BadExplosionManager badManager, ExplosionManager goldGetManager,
            ScoreManager scoreManager, MemberManager memberManager, ItemManager itemManager,
            PerfectBannerManager perfectBannerManager, GoodBannerManager goodBannerManager, BadBannerManager badBannerManager, MissBannerManager missBannerManager, Vector2 sizeScreen,
            ComboNumberManager comboNumberManager, CharismaManager charismaManager, DragNoteManager dragNoteManager)
        {
            this.perfectManager = perfectManager;
            this.goodManager = goodManager;
            this.badManager = badManager;
            this.goldGetManager = goldGetManager;

            this.perfectBannerManager = perfectBannerManager;
            this.goodBannerManager = goodBannerManager;
            this.badBannerManager = badBannerManager;
            this.missBannerManager = missBannerManager;
            
            this.comboNumberManager = comboNumberManager;

            this.scoreManager = scoreManager;

            this.charismaManager = charismaManager;

            //화면사이즈
            this.sizeScreen = sizeScreen;
            this.memberManager = memberManager;
            this.itemManager = itemManager;

            this.dragNoteManager = dragNoteManager;

        
            this.perfectLocation = new Vector2(sizeScreen.X / 2 - (perfectSize.X * perfectBannerScale) / 2, sizeScreen.Y / 2 - (perfectSize.Y * perfectBannerScale) / 2);


            this.goodLocation = new Vector2(sizeScreen.X / 2 - (goodSize.X * goodBannerScale) / 2, sizeScreen.Y / 2 - (goodSize.Y * goodBannerScale) / 2);


            this.badLocation = new Vector2(sizeScreen.X / 2 - (badSize.X * badBannerScale) / 2, sizeScreen.Y / 2 - (badSize.Y * badBannerScale) / 2);


            this.missLocation = new Vector2(sizeScreen.X / 2 - (missSize.X * missBannerScale) / 2, sizeScreen.Y / 2 - (missSize.Y * missBannerScale) / 2);


            //this.goodLocation = new Vector2(sizeScreen.X / 2 - 170, sizeScreen.Y / 2 - 30);
            
          
            //this.badLocation = new Vector2(sizeScreen.X / 2 - 130, sizeScreen.Y / 2 - 30);


            //this.missLocation = new Vector2(sizeScreen.X / 2 - 100, sizeScreen.Y / 2 );

           
            
            this.comboLocation = new Vector2(sizeScreen.X / 2 , sizeScreen.Y / 2 + 40);
          //  this.goodComboLocation = new Vector2(sizeScreen.X / 2, sizeScreen.Y / 2 + 60);
        }
Esempio n. 2
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);


#if Debug
        blackRect= Content.Load<Texture2D>(@"Textures\darkBackground");
#endif
            goldPlusEffect10 = Content.Load<Texture2D>(@"ui\goldPlus10");
            goldPlusEffect15 = Content.Load<Texture2D>(@"ui\goldPlus15");

            lifePlusEffect10 = Content.Load<Texture2D>(@"ui\lifePlus10");
            lifePlusEffect15 = Content.Load<Texture2D>(@"ui\lifePlus15");

            darkBackgroundImage = Content.Load<Texture2D>(@"Textures\darkBackground");
            go_back = Content.Load<Texture2D>(@"ui\go_back");
            go_front = Content.Load<Texture2D>(@"ui\go_front");

            //이거 없으면 STARTNOTE TEXTURE가 NULL이라 위치값을 잘못 줄때가 있다.
            spriteSheet = Content.Load<Texture2D>(@"ui\SpriteSheet8");
     
            backJesture = Content.Load<Texture2D>(@"game1\backJesture");
            backJestureManager = new BackJestureManager(backJesture, new Rectangle(0, 0, 204, 204), 10, new Vector2(800, 500));

       
           //타이틀화면
            menuScene = new MenuScene();
            menuScene.LoadContent(Content);

            uiEnergyBackground = Content.Load<Texture2D>(@"ui\uiEnergyBackground");
            energyDarkBack = Content.Load<Texture2D>(@"ui\energyDarkBack");

            processBar = Content.Load<Texture2D>(@"ui\processBar");
            processMark = Content.Load<Texture2D>(@"ui\processMark");

            //아이템관리
            //startnotemanager 생성보다 앞에 있어야 한다.
            itemManager = new ItemManager();
            itemManager.LoadContent(Content);
            itemManager.Init();

            loadingScene = new LoadingScene();
            //loadingScene.LoadContent(Content);


            //게임중 점수관리
            scoreManager = new ScoreManager();

            //상점 대문2
            shopDoor = new ShopDoor(scoreManager);
            shopDoor.LoadContent(Content);
            
            //점수 기록 (TO FILE)
            reportManager = new ReportManager(scoreManager);


            /////아이템 상점 -START
            rightItemShop = new RightItemShop(itemManager,  scoreManager, reportManager);
            rightItemShop.LoadContent(Content);

            leftItemShop = new LeftItemShop(itemManager, scoreManager, reportManager);
            leftItemShop.LoadContent(Content);

            effectItemShop = new EffectItemShop(itemManager, scoreManager, reportManager);
            effectItemShop.LoadContent(Content);
            
            noteItemShop = new NoteItemShop(itemManager, scoreManager, reportManager);
            noteItemShop.LoadContent(Content);

            backgroundItemShop = new BackgroundItemShop(itemManager, scoreManager, reportManager);
            backgroundItemShop.LoadContent(Content);
            /////아이템 상점 -START

            //연주자
            memberManager = new MemberManager(scoreManager);
            memberManager.LoadContent(Content);
            memberManager.init();

            /////텍스쳐 로드 -START
            //배경
            //playBackgroud1 = Content.Load<Texture2D>(@"background\ConcertHall_3");
            //playBackgroud2 = Content.Load<Texture2D>(@"background\crosswalk3");
            
            
            //노트,마커
           // spriteSheet = Content.Load<Texture2D>(@"Textures\SpriteSheet8");
            
            //드래그 노트
           // heart = Content.Load<Texture2D>(@"Textures\heart");
           
            //진행상황
            //uiBackground = Content.Load<Texture2D>(@"ui\background");
            energy = Content.Load<Texture2D>(@"ui\energy");

            //골드 업어
            getGold = Content.Load<Texture2D>(@"gold\getGold");
            //폰트
            georgia = Content.Load<SpriteFont>(@"Fonts\Georgia");

            
            //perfect,good,bad,miss 판정 배너 
            perfectBanner = Content.Load<Texture2D>(@"judgement\perfect");

            goodBanner = Content.Load<Texture2D>(@"judgement\good");

            badBanner = Content.Load<Texture2D>(@"judgement\bad");

            missBanner = Content.Load<Texture2D>(@"judgement\miss");


            noPerson = Content.Load<Texture2D>(@"game1\noperson");



            rightHandTextures = itemManager.GetRightHandTexture();
            leftHandTextures = itemManager.GetLeftHandTexture();
            
            
            //드래그 노트 셀떄

            one = Content.Load<Texture2D>(@"ui\one");
            two = Content.Load<Texture2D>(@"ui\two");
            three = Content.Load<Texture2D>(@"ui\three");


            previousButton = Content.Load<Texture2D>(@"game1\previousButton");
            hoverPreviousButton = Content.Load<Texture2D>(@"game1\hoverPrevious");
            

            nextButton = Content.Load<Texture2D>(@"game1\nextButton");
            hoverNextButton = Content.Load<Texture2D>(@"game1\hoverNextButton");

            loadingForAngle = Content.Load<Texture2D>(@"ui\LoadingKinect");
            //   charisma1 = Content.Load<Texture2D>(@"shopdoor\nogold");
            /////텍스쳐 로드 -END

         

            /////////////////드래그 라인 관련
            

            //드래그 라인
         //   drawLineNote1 = Content.Load<Texture2D>(@"DrawLine\drawLineNote1");

            //드래그 라인 마커점
            drawLineMarker = Content.Load<Texture2D>(@"DrawLine\drawLineMark");
            

            gold = Content.Load<Texture2D>(@"gold\gold");
            menuGold = Content.Load<Texture2D>(@"game1\menuGold");
           
            levelTexture = Content.Load<Texture2D>(@"game1\level");


            //로드하고, 기본적으로 넣어줌
            itemManager.LoadFileItem();

                   
            //현재 장착한 이펙트의 인덱스를 전체 베이스에 찾음
            int effectIndex = itemManager.getEffectIndex();

     
            //콤보 숫자
            comboNumberManager = new ComboNumberManager();
            comboNumberManager.LoadContent(Content);

            //***결과화면 숫자
            //resultNumberManager = new ResultNumberManager();
           // resultNumberManager.LoadContent(Content);

            tutorialScene = new TutorialScene();
            tutorialScene.Load(Content);
              

            //드래그 라인 렌더링
            dragLineRenderer = new LineRenderer();


            //드래그 라인 안의 마커점의 렌더링 
            dragLineMarkerRenderer = new LineRenderer();

            //드래그라인 
            curveManager = new CurveManager(dragLineRenderer, dragLineMarkerRenderer,dragNoteManager,itemManager);

            //가이드 라인 렌더링

            guideLineRenderer = new LineRenderer();

            //가이드 라인 
            guideLineManager = new GuideLineManager(guideLineRenderer);

            //텍스쳐 크기
            ///////이펙트 생성 -START
            

            //폭발 효과
            perfectManager = new PerfectExplosionManager();
            perfectManager.ExplosionInit(itemManager.GetEffectTexture()[effectIndex], itemManager.GetEffectInitFrame()[effectIndex], itemManager.GetEffectFrameCount()[effectIndex], itemManager.GetEffectScale()[effectIndex], itemManager.GetEffectDulation()[effectIndex]);

            goodManager = new GoodExplosionManager();
            goodManager.ExplosionInit(itemManager.GetGoodEffectTexture()[effectIndex], itemManager.GetEffectInitFrame()[effectIndex], itemManager.GetEffectFrameCount()[effectIndex], itemManager.GetEffectScale()[effectIndex], itemManager.GetEffectDulation()[effectIndex]);

            badManager = new BadExplosionManager();
            badManager.ExplosionInit(itemManager.GetBadEffectTexture()[effectIndex], itemManager.GetEffectInitFrame()[effectIndex], itemManager.GetEffectFrameCount()[effectIndex], itemManager.GetEffectScale()[effectIndex], itemManager.GetEffectDulation()[effectIndex]);


            //판정 글씨 나타내기 
            perfectBannerManager = new PerfectBannerManager();
            perfectBannerManager.BannerInit(perfectBanner,new Rectangle(0,0,1380,428),/*sprite로 바꾸면 frameCount바꾸기*/1,0.5f,30);


            goodBannerManager = new GoodBannerManager();
            goodBannerManager.BannerInit(goodBanner, new Rectangle(0, 0, 1020, 368),/*sprite로 바꾸면 frameCount바꾸기*/1, 0.5f, 30);


            badBannerManager = new BadBannerManager();
            badBannerManager.BannerInit(badBanner, new Rectangle(0, 0, 782, 400),/*sprite로 바꾸면 frameCount바꾸기*/1, 0.7f, 30);

            missBannerManager = new MissBannerManager();
            missBannerManager.BannerInit(missBanner, new Rectangle(0, 0, 975, 412),/*sprite로 바꾸면 frameCount바꾸기*/1, 0.5f,30);


      

            //일단은 miss effect로
            goldGetManager = new ExplosionManager();
            goldGetManager.ExplosionInit(getGold,new Rectangle(0,0,200,200), 5, 1.0f, 40);

            ///////이펙트 생성 -END
       
            //시작 노트 관리 생성    
            //여기에 들어가는 텍스쳐가 노트의 텍스쳐가 된다.
            //상점의 텍스쳐가 들어가야 한다. 


            startNoteManager = new StartNoteManager(
                spriteSheet,
                new Rectangle(0, 200, 52, 55),
                1);


            //첫 마커 위치   
            //마커 위치 처음 시작은 일단 마커매니저의 제일 0번째 것으로 시작
            Vector2[] initMarkLocation = MarkManager.GetPattern(0);

        //    removeAreaRec = MarkManager.GetRemoveArea(0);

            //마크 관리 초기화 (STATIC)
            //***시작시 마커 위치에 관한 사항 결정 못함.  
            MarkManager.initialize(
                spriteSheet,
                new Rectangle(0, 200, 50, 55),
                1,
                initMarkLocation[0],
                initMarkLocation[1],
                initMarkLocation[2],
                initMarkLocation[3],
                initMarkLocation[4],
                initMarkLocation[5],
                startNoteManager
                
                );

            //카리스마 매니저
            charismaManager = new CharismaManager();
            charismaManager.LoadContent(Content);

          

            //드래그노트 초기화
            //이것은 노트 안에서 움직이는 마커점
            dragNoteManager = new DragNoteManager(
                 drawLineMarker,
                 itemManager.GetDragNoteBackground()[itemManager.getNoteIndex()],
                 new Rectangle(0, 0, 100, 100),
                 1,
                 15,
                 0,
                 missBannerManager,
                 scoreManager);



            //충돌관리 생성
            collisionManager = new CollisionManager(perfectManager, goodManager, badManager, goldGetManager, scoreManager, memberManager,/*effect크기*/itemManager,perfectBannerManager,goodBannerManager,badBannerManager,missBannerManager,new Vector2(this.Window.ClientBounds.Width,this.Window.ClientBounds.Height),comboNumberManager,charismaManager,dragNoteManager);
            
            //노트정보 관리 생성
            noteFileManager = new NoteFileManager();
            //드래그 라인 렌더링
            dragLineRenderer = new LineRenderer();

            dragLineMarkerRenderer = new LineRenderer();
            //드래그라인 
            curveManager = new CurveManager(dragLineRenderer, dragLineMarkerRenderer, dragNoteManager,itemManager);

          

        //    photoManager = new PhotoManager();
        //    photoManager.LoadContent(Content);


            //노트파일 읽기 관리 생성
            file = new File(startNoteManager, noteFileManager, collisionManager, scoreManager, itemManager, curveManager, guideLineManager, charismaManager);

            SoundFmod.initialize(file);
            //곡선택화면 곡 불러오는 폴더 
          
            //노래폴더 만들기 위해서 테스트
           // String songFile = System.Environment.CurrentDirectory+"\\beethovenSong\\song.txt";
            String dir = System.Environment.CurrentDirectory + "\\beethovenSong";

            DirectoryInfo di = new DirectoryInfo(dir);
            if (di.Exists == false)
            {
                di.Create();
            }
            
           
            //기록 만들기 위해서 테스트
          //  String songRecordFile = System.Environment.CurrentDirectory + "\\beethovenRecord\\song.txt";
            String songRecorddir = System.Environment.CurrentDirectory + "\\beethovenRecord";

            DirectoryInfo diRecord = new DirectoryInfo(songRecorddir);
            if (diRecord.Exists == false)
            {
                diRecord.Create();
            }
            


            
            //사진 폴더  위해서 테스트
            //String picFile = System.Environment.CurrentDirectory + "\\beethovenRecord\\userPicture\\song.txt";
            String picddir = System.Environment.CurrentDirectory + "\\beethovenRecord\\userPicture";
            String defaultPicture = System.Environment.CurrentDirectory + "\\No_Image.png";


            DirectoryInfo diPic = new DirectoryInfo(picddir);
            if (diPic.Exists == false)
            {
                diPic.Create();
                FileInfo fileInfo = new FileInfo(defaultPicture);
                fileInfo.CopyTo(System.Environment.CurrentDirectory + "\\beethovenRecord\\UserPicture\\No_Image.png");
            
            }
            
            
                      

            //곡을 불러오기
            file.FileLoading(dir, "*.mnf");
            
            ////드래그노트 초기화
            ////이것은 노트 안에서 움직이는 마커점
            //dragNoteManager = new DragNoteManager(
            //     drawLineMarker,
            //     new Rectangle(0, 0, 100, 100),
            //     1,
            //     15,
            //     0,
            //     missBannerManager,
            //     scoreManager);

            //골드 초기화
            //크기 0.3
            GoldManager.initialize(
                gold,
                new Rectangle(0, 0, 200, 200),
                1,
                70,
                0,
                0.3f);
            
            
            //***
           

            
            resultManager = new ResultManager(scoreManager);
            resultManager.LoadContent(Content);



            //점수기록판 화면
            recordBoard = new RecordBoard();
            recordBoard.LoadContent(Content);

#if Kinect
            settingBoard = new SettingBoard(this);
            settingBoard.LoadContent(Content);
#endif

            showPictureScene = new ShowPictureScene();
            showPictureScene.LoadContent(Content);

            

            songMenu = new SongMenu(noteFileManager, reportManager);
            songMenu.Load(Content, graphics.GraphicsDevice);




            //LOAD REPORT SCORE FILE
            //점수기록판을 로드해서 게임에 올린다. 

            reportManager.LoadReport();

            //골드를 로드해서 게임에 올린다. 
            reportManager.LoadGoldFromFile();

            currentSongName = "";
           
           // itemManager.LoadFileItem();
#if Kinect
          
        //    messageFont = Content.Load<SpriteFont>("MessageFont");
            setupKinect();

            /*제스쳐 인식인데 
             전체 구간에서 계속 실행 된다. 
             *이것이 다른것에 영향을 줄 수도 있다. 
             */
            activeRecognizer = CreateRecognizer();

            //!!! 페이스 인식, 디버깅 시에 잠시 

#if StartDetact
            settingBoard.LoadCheckFile();
            if(settingBoard.CheckFaceDetact)
            {
                //0 각도 재야함 // 1 각도 잴필요없음 //2 끝남 
                loadingTime = 0;

                ts4 = new ThreadStart(FaceDetect);
                th4 = new Thread(ts4);
                th4.Start();
            }

#endif


#endif
            playingPictures = new Queue();
            showPictureTextures = new Texture2D[5];

            metronomes = new Texture2D[8];
            metronomes[0] = Content.Load<Texture2D>(@"metronome\metronome0");
            metronomes[1] = Content.Load<Texture2D>(@"metronome\metronome1");
            metronomes[2] = Content.Load<Texture2D>(@"metronome\metronome2");
            metronomes[3] = Content.Load<Texture2D>(@"metronome\metronome3");
            metronomes[4] = Content.Load<Texture2D>(@"metronome\metronome4");
            metronomes[5] = Content.Load<Texture2D>(@"metronome\metronome5");
            metronomes[6] = Content.Load<Texture2D>(@"metronome\metronome6");
            metronomes[7] = Content.Load<Texture2D>(@"metronome\metronome7");
        }
Esempio n. 3
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        /// 


        //카리스마 타임이맞는지 확인한다.
//        public void JudgeCharisma()
//        {

//#if Kinect
//            if(charismaManager.IsCharismaTime == 1 && !charismaManager.IsJudgeCheck) 
//            {
//                if(!kinectMessage.Contains("__UNKNOWN"))
//                {

//                }
//                //나중에는 타입마다 이렇게 설정
//                //else if(charismaManager.Type == 0 && kinectMessage.Contains("@xxxxxx");
//                else
//                {
//                    //perfectBannerManager.AddBanners(new Vector2(this.Window.ClientBounds.Width / 2 - 1380 / 4, this.Window.ClientBounds.Height / 2 - 428 / 4));
//                    //scoreManager.Perfomance = scoreManager.Perfomance + 1;
//                    charismaManager.IsJudgeCheck = true;
//                }
            
//            }
//#endif
//        }
            
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
             // Update
            _elapsed_time += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
 
            // 1 Second has passed
            if (_elapsed_time >= 1000.0f)
            {
                _fps = _total_frames;
                _total_frames = 0;
                _elapsed_time = 0;
            }
            //Trace.WriteLine(_fps);

            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
      
            mouseStateCurrent = Mouse.GetState();

#if Kinect
            Rectangle rightHandPosition = new Rectangle((int)j1r.Position.X, (int)j1r.Position.Y, 5, 5);

#else
            Rectangle rightHandPosition = new Rectangle(0, 0, 1, 1);

#endif


            
           switch (gameState)
           {
               #region 타이틀
               //타이틀 화면
                case GameStates.Menu:


                    menuScene.Update(gameTime, rightHandPosition);

                break;
               #endregion

               #region 상점대문
                //상점대문
               case GameStates.ShopDoor:

                    //타이틀화면으로 돌아가는 키보드처리
                    //HandleKeyboardInputGoToMenu(Keyboard.GetState());
                    shopDoor.Update(gameTime, rightHandPosition);
                   // pastClick = finalClick;

                break;

                #endregion

               #region 아이템상점들


               #region 오른쪽상점
               case GameStates.RightItemShop:
                   //상점대문으로 돌아가는 키보드처리

                 
                   //HandleKeyboardInputinItemShop(Keyboard.GetState());
                   rightItemShop.Update(gameTime, rightHandPosition);
                   
             
                   break;

               #endregion

               #region 왼쪽상점

               case GameStates.LeftItemShop:
                   //상점대문으로 돌아가는 키보드처리
                    //HandleKeyboardInputinItemShop(Keyboard.GetState());
                    leftItemShop.Update(gameTime, rightHandPosition);


                   break;

               #endregion 

               #region 노트상점
               case GameStates.NoteItemShop:
                    //HandleKeyboardInputinItemShop(Keyboard.GetState());
                    noteItemShop.Update(gameTime, rightHandPosition);
             
                   break;
               #endregion
               #region 이펙트상점


               case GameStates.EffectItemShop:


                   //HandleKeyboardInputinItemShop(Keyboard.GetState());
                   effectItemShop.Update(gameTime, rightHandPosition);
                  
                
                   break;
               #endregion



               #region 배경상점
               case GameStates.BackgroundItemShop:
                   //상점대문으로 돌아가는 키보드처리
                   //HandleKeyboardInputinItemShop(Keyboard.GetState());
                   backgroundItemShop.Update(gameTime, rightHandPosition);

                break;

               #endregion
               #endregion

               #region 플레이화면
               case GameStates.Playing:
                   //if (scoreManager.Gage < 1)
                   //{//$$$게이지
                   //    file.SetEndFile(true);
                   //    resultManager.FailGame = true;
                   //}

                   //곡이 끝내게 되면 결과 화면으로
                   //go to result scene right after finishing a piece
                   if (file.GetEndFile())
                   {
                      
                       
                       //노래 총 시간으로 끝을 바꾸자
                       gameState = GameStates.ResultManager;
                       //점수기록판에 기재
                      
                       //reportManager의 scoreInfoManager에 곡명과 자기사진 추가
                       //여기에 현재 자신의 사진 이름이 들어가야 함.(날짜시간 포함해서 독립적으로)
                       if(ScorePic == null)
                       {
                           ScorePic = "No_Image.png";
                       }


                       reportManager.AddSongInfoManager(scoreManager.SongName, scoreManager.TotalScore, ScorePic);


                       isScorePic = false;
                       //현재 노래 제목
                       currentSongName = scoreManager.SongName;

                       if (scoreManager.Combo > scoreManager.Max)
                       {
                           scoreManager.Max = scoreManager.Combo;
                       }
                       //scoreManager.Combo = 0;

                       
                       //점수 기록 파일로 저장
                       //save recored scores in the file
                       reportManager.SaveReport();

                       //photoManager.PhotoFrams.Clear();
                       //gold 파일에  저장
                       int indexGoldPlusItem = 3;

                       double goldEffect = 1;

                     //  int goldPlus = 0;
                       if (itemManager.getRightHandIndex() == indexGoldPlusItem)
                       {
                           goldEffect *= 1.1;
                       }
                       if(itemManager.getLeftHandIndex() == indexGoldPlusItem)
                       {
                        
                             goldEffect *= 1.1;
                       }

                       if(   itemManager.getNoteIndex() == indexGoldPlusItem)
                       {
                           goldEffect *= 1.1;
                          
                       }

                       if (itemManager.getBackgroundIndex() == indexGoldPlusItem)
                       {
                             goldEffect *= 1.15;
                       }
                       if (itemManager.getEffectIndex() == indexGoldPlusItem)
                       {
                            goldEffect *= 1.15;
                       }

                         
                       // goldPlus = 1;
                       scoreManager.Gold = (int)(scoreManager.Gold * goldEffect); 
                           
                       ////골드추가 아이템을 장착 했으면 추가 점수 
                       //if (goldPlus == 1)
                       //{
                           

                       //}
                       //else if (goldPlus == 2)
                       //{

                         

                       //}


                



                       scoreManager.TotalGold += scoreManager.Gold;
                       reportManager.SaveGoldToFile();

                       //도중에 꺼져도 모든 드래그모양 지우기 

                       curveManager.DeleteAllCurve();

                       //도중에 꺼져도 두번째 가이드라인 지우기 
                       
                       guideLineManager.DeleteAllSecondGuideLine();

                       //기록판에 보여줄 유저 사진 찾기
                       //Fine user pictures which will be seen in score board
                       reportManager.MakePictures(currentSongName, GraphicsDevice);

                       playPicturesCount = 0;
                       showPictureTextures = new Texture2D[5];
                       //Texture2D texture = null; 
                       //Stream str = System.IO.File.OpenWrite("gesture.jpg");
                       //texture.SaveAsJpeg(str, 1200, 900);

                       //
                       resultManager.FailGame = false;

                       bool isPlay = false;
                       SoundFmod.sndChannel.isPlaying(ref isPlay);
                       if (isPlay)
                       {
                           SoundFmod.StopSound();
                       }
                      
                       SoundFmod.PlaySound(resultMusic);
                      // resultNumberManager.AddResultNumbers(new Vector2(200, 300), scoreManager.Perfect);
               
                   }



                   double playTime = 0;

                   if (isPlayingSong)
                   {

                       
                       SoundFmod.sndChannel.getPosition(ref songLength, TIMEUNIT.MS);
          //             Trace.WriteLine("Time" + (songLength / 1000 / 60) + ":" + (songLength / 1000 % 60) + ":" + (songLength / 10 % 100));
                       playTime = (songLength / 1000 / 60) * 60 + (songLength / 1000 % 60) + ((songLength / 10 % 100) * 0.01 );
                       //Trace.WriteLine(playTime);
                   }

                   





                   //마크 업데이트
                    MarkManager.Update(gameTime);
                    startNoteManager.Update(gameTime);
                    HandleKeyboardInput(Keyboard.GetState());
                    HandleMouseInput(Mouse.GetState());
                    file.Update(spriteBatch, playTime, SoundFmod.changedTempo, SoundFmod.optionalTime);
                    //*** 어떻게 돼는건지 모르겠음 
                    dragNoteManager.Update(gameTime);
                   ////
                    GoldManager.Update(gameTime);
                    perfectManager.Update(gameTime);
                    goodManager.Update(gameTime);
                    badManager.Update(gameTime);
                    goldGetManager.Update(gameTime);
                    scoreManager.Update(gameTime);
                    memberManager.Update(gameTime);
                    
                    

                    SoundFmod.StartChangedTime(gameTime);
                    //photoManager.Update(gameTime);


                    perfectBannerManager.Update(gameTime);
                    goodBannerManager.Update(gameTime);
                    badBannerManager.Update(gameTime);
                    missBannerManager.Update(gameTime);

                    comboNumberManager.Update(gameTime);
                 //   collisionManager.DeleteMarks();
#if Kinect
                    HandleInput();
#endif
                    collisionManager.CheckRightNoteInCenterArea();
                    collisionManager.CheckLeftNoteInCenterArea();

                  //JudgeCharisma();


                    //3초만에 원상복귀
                    //       AutoRetrunChangeTempo(gameTime);

                break;

               #endregion

               #region Setting
               case GameStates.SettingBoard:

                //HandleKeyboardInputGoToMenu(Keyboard.GetState());
#if Kinect
                settingBoard.Update(gameTime, rightHandPosition);
#endif


                pastClick = finalClick;

                break;

               
               
               #endregion

               #region 결과 결산
               //결과 창
                case GameStates.ResultManager:

                   //resultNumberManager.Update(gameTime);

                    Rectangle rectMouse = new Rectangle(mouseStateCurrent.X, mouseStateCurrent.Y, 5, 5);
                 
                    
                    //nextButton 위에 마우스를 올려놨을 때
                    //mousecursor on nextButton item section
                    if (rectMouse.Intersects(resultManager.getRectNextButton()) || rightHandPosition.Intersects(resultManager.getRectNextButton()))
                    {
                        nearButton = true;
                        GetCenterOfButton(resultManager.getRectNextButton());



                        resultManager.setClickNextButton(true);
                        //click the right hand item section
                        if ((mouseStateCurrent.LeftButton == ButtonState.Pressed && mouseStatePrevious.LeftButton == ButtonState.Released )|| (finalClick &&!pastClick))
                        {
                            gameState = GameStates.ShowPictures;
                            nearButton = false;
                           
                            //현재 마커 위치 저장
                            //Vector2 mark1Location = MarkManager.Marks[0].MarkSprite.Location;
                            //Vector2 mark2Location = MarkManager.Marks[1].MarkSprite.Location;
                            //Vector2 mark3Location = MarkManager.Marks[2].MarkSprite.Location;
                            //Vector2 mark4Location = MarkManager.Marks[3].MarkSprite.Location;
                            //Vector2 mark5Location = MarkManager.Marks[4].MarkSprite.Location;
                            //Vector2 mark6Location = MarkManager.Marks[5].MarkSprite.Location;

                            //현재 위치 말고, 기본은 0으로 해놓고


                            Vector2 markerSize = MarkManager.GetMarkerSize();


                            Vector2[] zeroIndexMarkers = MarkManager.GetPattern(0);
                         //   removeAreaRec = MarkManager.GetRemoveArea(0);
                            //두번째꺼 재실행시 이상한거 생기는것 방지
                            startNoteManager.DeleateAllNote();
                            //StartNoteManager.rightNoteManager.DeleteAllNote();
                            //StartNoteManager.leftNoteManager.DeleteAllNote();
                            //StartNoteManager.longNoteManager.DeleteAllNote();
                            
                            //@@@이걸 지워서 무제가 될수도 있다. 패턴이 바뀌었는데도 다음번에 안바뀌어서 이걸 넣음
                            //startNoteManager = new StartNoteManager(
                            //    spriteSheet,
                            //    new Rectangle(0, 200, 52, 55),
                            //    1);

                            //드로우 라인
                            file.SetDrawLine(false);
                            
                            //골드 초기화 
                            GoldManager.DeleteAll();
                            //카리스마
                          //  charismaManager.IsCharismaTime = 0;

                            //froze 방지
                            MarkManager.initialize(
                                // markManager = new MarkManager(
                                spriteSheet,
                                new Rectangle(0, 200, 50, 55),
                                1,
                                zeroIndexMarkers[0],
                                zeroIndexMarkers[1],
                                zeroIndexMarkers[2],
                                zeroIndexMarkers[3],
                                zeroIndexMarkers[4],
                                zeroIndexMarkers[5],
                                startNoteManager
                               

                                );


                            //파일을 다시 만들 필요는 없고 초기화만 시켜주면 된다.
                            //여러개 파일 다시 생성되서

                            //파일 저장
                            //file = new File(startNoteManager, noteFileManager, collisionManager, scoreManager, itemManager, curveManager, guideLineManager);

                            file.SetEndFile(false);
                            file.SetTime(TimeSpan.Zero);

                            //if (!System.IO.File.Exists(songsDir))
                            //{
                            //    System.IO.Directory.CreateDirectory(songsDir);
                            //}

                            //file.FileLoading(songsDir, "*.mnf");
                           
                            scoreManager.init();

                          }
                    }
                    else
                    {
                        nearButton = false;
                        resultManager.setClickNextButton(false);
                    }

                    pastClick = finalClick;
                break;
                #endregion
                   
                #region 사진들
                case GameStates.ShowPictures:
                //Rectangle rectMouseShowPictures = new Rectangle(mouseStateCurrent.X, mouseStateCurrent.Y, 5, 5);

                showPictureScene.Update(gameTime, rightHandPosition);

                break;
                #endregion 
                #region 순위판
                case GameStates.RecordBoard:

                    recordBoard.Update(gameTime, rightHandPosition);

                break;

                
                #endregion
               
               #region 곡선택메뉴
                case GameStates.SongMenu:


                resultSongMenu = songMenu.Update(rightHandPosition);


                
                   
#if Kinect

                //제스쳐//좌우 만 있음
             //   activeRecognizer = CreateRecognizer();
#endif


                //뒤로가기
                if (resultSongMenu == -1)
                    {
                        gameState = GameStates.Menu;
                        bool isPlay = false;
                        SoundFmod.sndChannel.isPlaying(ref isPlay);
                        if (isPlay)
                        {
                            SoundFmod.StopSound();
                        }
                       
                        SoundFmod.PlaySound(title_Music);

                    }
                // 선택 되었음
                else if (resultSongMenu != -2)
                    {

                        //*** 롱노트와 왼손노트에도 다른 텍스쳐를 입혀야 함.
                        ////각 아이템에 따른 텍스쳐 변경

                        Texture2D[] rightNoteTextures = itemManager.GetRightNoteTexture();

                        ////왼손 노트 // 일단은 오른손노트랑 같이 함.
                        Texture2D[] leftNoteTextures = itemManager.GetLeftNoteTexture();

                        ////롱노트 // 일단은 오른손노트랑 같이 함.
                        Texture2D[] longNoteTextures = itemManager.GetLongNoteTexture();


                            
                        ////노트 - 달라야 될때도 있어서 나누어 놨다.
                        ////오른손노트


                    //프로세스 타임 초기화
                        uiProcessTime = 0;

                        lifePlusEffect = 1;

                        //노트 맞는 scale 
                        float[] rightNoteScale = itemManager.GetRightNoteScale();
                        float[] leftNoteScale = itemManager.GetRightNoteScale();
                        float[] longNoteScale = itemManager.GetRightNoteScale();
                       
                      

                      Texture2D[] backgroudTextures  =itemManager.GetBackgroundTexture();

                      ScorePic = null;
                       
                         //배경 바꾸기
                        playBackgroud = backgroudTextures[itemManager.getBackgroundIndex()];
                        
                        ////롱노트 //*** 임시로 오른손노트랑 똑같은걸로 해놓음
                        startNoteManager.changeLongNoteImage(longNoteTextures[itemManager.getNoteIndex()], new Rectangle(0, 0, longNoteTextures[itemManager.getNoteIndex()].Width, longNoteTextures[itemManager.getNoteIndex()].Height), longNoteScale[0]);

                        ////왼손노트

                        //고스톱이 아니면
                        if (itemManager.getNoteIndex() != 3)
                        {
                            startNoteManager.changeLeftNoteImage(leftNoteTextures[itemManager.getNoteIndex()], new Rectangle(0, 0, leftNoteTextures[itemManager.getNoteIndex()].Width, leftNoteTextures[itemManager.getNoteIndex()].Height), leftNoteScale[0]);
                        }
                    // 고스톱이면 스프라이트 적용
                        else if (itemManager.getNoteIndex() == 3)
                        {
                            startNoteManager.changeLeftNoteImage(leftNoteTextures[itemManager.getNoteIndex()], new Rectangle(0, 0, 100, leftNoteTextures[itemManager.getNoteIndex()].Height), leftNoteScale[0],15, 10);

                        }





                        //오른손 노트 이미지 바꾸기

                        //고스톱이 아니면
                        if (itemManager.getNoteIndex() != 3)
                        {
                            startNoteManager.changeRightNoteImage(rightNoteTextures[itemManager.getNoteIndex()], new Rectangle(0, 0, rightNoteTextures[itemManager.getNoteIndex()].Width, rightNoteTextures[itemManager.getNoteIndex()].Height), rightNoteScale[0]);
                        }


                        // 고스톱이면 스프라이트 적용
                        //
                        else if (itemManager.getNoteIndex() == 3)
                        {
                            startNoteManager.changeRightNoteImage(rightNoteTextures[itemManager.getNoteIndex()], new Rectangle(0, 0, 100, rightNoteTextures[itemManager.getNoteIndex()].Height), rightNoteScale[0],15 ,10);
                 
                        }

                        //curveManager.DeleteAllCurve();

                        Texture2D[] dragTextures = itemManager.GetDragNoteTexture();
                        Texture2D[] dragTextureBackgrounds = itemManager.GetDragNoteBackground();
                        
                        int noteIndex = itemManager.getNoteIndex();

                        //드래그노트 이미지 바꾸기
                        dragNoteManager.Texture = dragTextures[noteIndex];

                        //드래그노트 가 무엇인지 인덱스
                        dragNoteManager.Index = noteIndex;

                        //드래그노트 크기 설정
                     //   dragNoteManager.InitialFrame = itemManager.GetDragNoteInitFrame()[noteIndex];

                        //드래그노트 백그라운드 이마지 바꾸기
                        dragNoteManager.Background = dragTextureBackgrounds[noteIndex];

                        

                        //마커리스트 텍스쳐 가져오기
                        Texture2D[] markersTextures = itemManager.GetMarkerTexture();
                        
                        //*** 마커리스트에 맞는 rect, 바로width와 height 를 가져와서 넣기 때문에 필요 없을 수 도 있다.
                        //Rectangle[] markersRectangle = new Rectangle[5];
                        //markersRectangle[0] = new Rectangle(0,0,265,240);

                        //***마커리스트에 맞는 =>>itemManager로 옮김
                        float[] markersScale = itemManager.GetMarkersScale();

                    //배너문구 초기화
                        perfectBannerManager.Clear();
                        goodBannerManager.Clear();
                        badBannerManager.Clear();
                        missBannerManager.Clear();
                    //콤보숫자 초기화
                        comboNumberManager.Clear();


                    //템포 초기화 
                        SoundFmod.isChangedTempo = 0;
                        SoundFmod.changedTempo = 0;
                        for (int q = 0; q < 6; q++)
                        {
                            memberManager.SetMemberState(q, 0);
                        }
                    //속도초기화 
                        memberManager.SetMembersFrameTime(0.1f);
                        //현재 장착한 마커로 설정//(마커,마커의 rect크기. scale)
                        //개별 마커및 전체 마커에도 설정함
                        MarkManager.chageMarksImages(markersTextures[itemManager.getNoteIndex()], new Rectangle(0,0,markersTextures[itemManager.getNoteIndex()].Width,markersTextures[itemManager.getNoteIndex()].Height), markersScale[0]);
                        
                        //노트 사라지는 영역 지정을 위해 사용
                        Vector2 markerSize = MarkManager.GetMarkerSize();

                        //일단 처음은 항상 0 부터 시작
                      //  MarkManager.GetPattern(0, (int)markerSize.X, (int)markerSize.Y);
                        MarkManager.SetRemoveArea(0, (int)markerSize.X, (int)markerSize.Y);
                     

                      //  Vector2[] zeroIndexMarkers = MarkManager.GetPattern(0, (int)markerSize.X, (int)markerSize.Y);
                        //   removeAreaRec = MarkManager.GetRemoveArea(0);
                  

 
                        //MarkManager.initialize(
                        //    // markManager = new MarkManager(
                        //    markersTextures[itemManager.getNoteIndex()],
                        //   new Rectangle(0, 0, markersTextures[itemManager.getNoteIndex()].Width, markersTextures[itemManager.getNoteIndex()].Height),
                        //    1,
                        //    zeroIndexMarkers[0],
                        //    zeroIndexMarkers[1],
                        //    zeroIndexMarkers[2],
                        //    zeroIndexMarkers[3],
                        //    zeroIndexMarkers[4],
                        //    zeroIndexMarkers[5],
                        //    startNoteManager,
                        //    markersScale[0]


                        //    );


                        /////이펙트 생성 -START
                        Texture2D[] explosionTexture = itemManager.GetEffectTexture();
                        
                        //특성 로드
                        Rectangle[] effectInitFrame = itemManager.GetEffectInitFrame();
                        int[] effectFramCount = itemManager.GetEffectFrameCount();
                        float[] effecScale = itemManager.GetEffectScale();

        
                        //이펙트 
                        int effectIndex = itemManager.getEffectIndex();

                        perfectManager = new PerfectExplosionManager();
                        perfectManager.ExplosionInit(itemManager.GetEffectTexture()[effectIndex], itemManager.GetEffectInitFrame()[effectIndex], itemManager.GetEffectFrameCount()[effectIndex], itemManager.GetEffectScale()[effectIndex], itemManager.GetEffectDulation()[effectIndex]);

                        goodManager = new GoodExplosionManager();
                        goodManager.ExplosionInit(itemManager.GetGoodEffectTexture()[effectIndex], itemManager.GetEffectInitFrame()[effectIndex], itemManager.GetEffectFrameCount()[effectIndex], itemManager.GetEffectScale()[effectIndex], itemManager.GetEffectDulation()[effectIndex]);

                        badManager = new BadExplosionManager();
                        badManager.ExplosionInit(itemManager.GetBadEffectTexture()[effectIndex], itemManager.GetEffectInitFrame()[effectIndex], itemManager.GetEffectFrameCount()[effectIndex], itemManager.GetEffectScale()[effectIndex], itemManager.GetEffectDulation()[effectIndex]);

                        //미스도 투입되면
                        //missManager = new ExplosionManager();
                        //missManager.ExplosionInit(missEffectTextures[effectIndex], new Rectangle(0, 0, 166, 162), 9, 1f, 45);

                        goldGetManager = new ExplosionManager();
                        goldGetManager.ExplosionInit(getGold, new Rectangle(0, 0, 200, 200), 5, 0.7f, 30);

                     

                        ////일단은 miss effect로
                        //goldGetManager = new ExplosionManager();
                        //goldGetManager.ExplosionInit(itemManager.GetMissEffectTexture()[effectIndex], itemManager.GetEffectInitFrame()[effectIndex], itemManager.GetEffectFrameCount()[effectIndex], itemManager.GetEffectScale()[effectIndex], itemManager.GetEffectDulation()[effectIndex]);

                        collisionManager = new CollisionManager(perfectManager, goodManager, badManager, goldGetManager, scoreManager, memberManager, itemManager, perfectBannerManager, goodBannerManager, badBannerManager, missBannerManager, new Vector2(this.Window.ClientBounds.Width, this.Window.ClientBounds.Height), comboNumberManager, charismaManager,dragNoteManager);
            

                        /////이펙트 생성 -END

                        //lifeplus 아이템 장착
                        int indexLifePlusItem = 2;
                        //라이프아이템의 인덱스

                        if (itemManager.getRightHandIndex() == indexLifePlusItem)
                        {
                            lifePlusEffect*=1.1f;
                        }
                        if(itemManager.getLeftHandIndex() == indexLifePlusItem)
                        {
                            lifePlusEffect*=1.1f;
                        }
                        if (itemManager.getNoteIndex() == indexLifePlusItem)
                        {
                            lifePlusEffect*=1.1f;
                        }
                        if(itemManager.getBackgroundIndex() == indexLifePlusItem)
                        {
                            lifePlusEffect*=1.15f;
                        }
                        if(itemManager.getEffectIndex() == indexLifePlusItem)
                        {
                            lifePlusEffect*=1.15f;
                        }
                         

                        gameState = GameStates.Playing;
                        
                        file.Loading(resultSongMenu);

                        uiEndTime = file.EndTime;

                        bool isPlay = false;
                        SoundFmod.sndChannel.isPlaying(ref isPlay);
                        if (isPlay)
                        {
                            SoundFmod.StopSound();
                        }
                      
                        SoundFmod.PlaySound(songsDir + noteFileManager.noteFiles[resultSongMenu].Mp3);
                        isPlayingSong = true;
                    }

                    break;
               #endregion

               #region 튜토리얼씬

                case GameStates.TutorialScene:

                    int resultTutorialScene = tutorialScene.Update();


                    
                    if (resultTutorialScene == -1)
                    {
                        gameState = GameStates.Menu;
                       

                    }




                    break;

               #endregion


           }
           mouseStatePrevious = mouseStateCurrent;
           pastClick = finalClick;

           backJestureManager.Update(gameTime);
           base.Update(gameTime);
        }