Example #1
0
        protected override SceneBase CreateIntroSceneFromNetwork(CutsceneStartProtocol netData)
        {
            var set = IntroMovieSet.Create(
                ref this._ShipExterior,
                ref this._ShipInterior,
                out Rectangle chunkRange,
                out string result
                );

            if (set != null)
            {
                return(new Intro00_SettingScene(set));
            }

            if (result != "Found null tile.")                   //result == "Success."
            {
                set = IntroMovieSet.Create((IntroCutsceneStartProtocol)netData);
                return(new Intro00_SettingScene(set));
            }

            // Request and await tile chunks from server
            if (this._MovieSetChunksRequestRetryTimer-- <= 0)
            {
                this._MovieSetChunksRequestRetryTimer = 60 * 2;                 // Retry every 2s until timeout

                LogHelpers.Log("Requesting chunks from range " + chunkRange);
                TileWorldHelpers.RequestChunksFromServer(chunkRange);
            }

            return(null);
        }
Example #2
0
        ////

        public void TryBeginCutsceneFromNetwork(
            CutsceneID cutsceneId,
            SceneID sceneId,
            Player playsFor,
            CutsceneStartProtocol data,
            Action <string> onSuccess,
            Action <string> onFail)
        {
            if (!this.CanBeginCutscene(false, cutsceneId, playsFor, out Cutscene cutscene, out string result))
            {
                onFail("Cannot play cutscene " + cutsceneId + ": " + result);
                return;
            }

            if (this.CutsceneInWaitingPerClient.ContainsKey(playsFor.whoAmI))
            {
                cutscene = this.CutsceneInWaitingPerClient[playsFor.whoAmI];
            }
            this.CutsceneInWaitingPerClient[playsFor.whoAmI] = cutscene;

            //

            void onMySuccess(string myResult)
            {
                this._CutscenePerPlayer[playsFor.whoAmI] = cutscene;
                this.CutsceneInWaitingPerClient.Remove(playsFor.whoAmI);                        // just in case

                var myplayer = playsFor.GetModPlayer <CutsceneLibPlayer>();

                myplayer.TriggeredCutsceneIDs_Player.Add(cutsceneId);

                var myworld = ModContent.GetInstance <CutsceneLibWorld>();

                myworld.TriggeredCutsceneIDs_World.Add(cutsceneId);

                onSuccess(myResult);
            }

            void onMyFail(string myResult)
            {
                this.EndCutscene(cutscene, playsFor.whoAmI, false);

                onFail(myResult);
            }

            //

            cutscene.BeginCutsceneFromNetwork_Internal(sceneId, data, onMySuccess, onMyFail);
        }
Example #3
0
        /*public bool TryBeginCutscene(
         *                      CutsceneID cutsceneId,
         *                      SceneID sceneId,
         *                      Player playsFor,
         *                      bool sync,
         *                      out string result ) {
         *      if( !this.CanBeginCutscene(cutsceneId, playsFor, out Cutscene cutscene, out result) ) {
         *              result = "Cannot play cutscene " + cutsceneId + ": " + result;
         *              return false;
         *      }
         *      return this.TryBeginCutscene( cutscene, sceneId, sync, out result );
         * }*/

        ////

        private bool TryBeginCutscene(
            Cutscene cutscene,
            bool sync,
            out string result)
        {
            int    playsForWhom = cutscene.PlaysForWhom;
            Player playsFor     = Main.player[playsForWhom];

            if (this.GetCurrentCutscene_Player(playsFor) != null)
            {
                result = playsFor.name + " (" + playsForWhom + ") already playing cutscene " + cutscene.UniqueId;
                return(false);
            }

            cutscene.BeginCutscene_Internal();

            this._CutscenePerPlayer[playsForWhom] = cutscene;

            var myplayer = playsFor.GetModPlayer <CutsceneLibPlayer>();

            myplayer.TriggeredCutsceneIDs_Player.Add(cutscene.UniqueId);

            var myworld = ModContent.GetInstance <CutsceneLibWorld>();

            myworld.TriggeredCutsceneIDs_World.Add(cutscene.UniqueId);

            if (sync)
            {
                if (Main.netMode == NetmodeID.Server)
                {
                    CutsceneStartProtocol.SendToClients(cutscene: cutscene, ignoreWho: -1);
                }
                else if (Main.netMode == NetmodeID.MultiplayerClient)
                {
                    CutsceneStartProtocol.Broadcast(cutscene: cutscene);
                }
            }

            result = "Success.";
            return(true);
        }
Example #4
0
        internal void BeginCutsceneFromNetwork_Internal(
            SceneID sceneId,
            CutsceneStartProtocol netData,
            Action <string> onSuccess,
            Action <string> onFail)
        {
            this.CurrentScene = this.CreateIntroSceneFromNetwork(netData);

            if (this.CurrentScene != null)
            {
                this.CurrentScene.BeginScene_Internal(this);
                onSuccess("Success.");
                return;
            }

            int retries = 0;

            Timers.SetTimer(2, true, () => {
                this.CurrentScene = this.CreateIntroSceneFromNetwork(netData);

                if (this.CurrentScene == null)
                {
                    if (retries++ < 1000)
                    {
                        return(true);
                    }
                    else
                    {
                        onFail("Timed out.");
                        return(false);
                    }
                }

                this.CurrentScene.BeginScene_Internal(this);

                onSuccess("Success.");
                return(false);
            });
        }
Example #5
0
 protected abstract SceneBase CreateIntroSceneFromNetwork(CutsceneStartProtocol data);