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); }
//// 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); }
/*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); }
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); }); }
protected abstract SceneBase CreateIntroSceneFromNetwork(CutsceneStartProtocol data);