public LotThumbContent() { GameThread.SetInterval(Update, 1000); Client = new ApiClient(ApiClient.CDNUrl ?? GlobalSettings.Default.GameEntryUrl); DefaultThumb = TextureUtils.TextureFromFile(GameFacade.GraphicsDevice, GameFacade.GameFilePath("userdata/houses/defaulthouse.bmp")); TextureUtils.ManualTextureMask(ref DefaultThumb, new uint[] { 0xFF000000 }); }
public LoadingScreen() : base() { Background = new UISetupBackground(); //TODO: Letter spacing is a bit wrong on this label var lbl = new UILabel { Caption = GameFacade.Strings.GetString("154", "5"), X = 0, Size = new Vector2(800, 100), Y = 508 }; var style = lbl.CaptionStyle.Clone(); style.Size = 17; lbl.CaptionStyle = style; Background.BackgroundCtnr.Add(lbl); Add(Background); ProgressLabel1 = new UILabel { X = 0, Y = 550, Size = new Vector2(800, 100), CaptionStyle = style }; ProgressLabel2 = new UILabel { X = 0, Y = 550, Size = new Vector2(800, 100), CaptionStyle = style }; Background.BackgroundCtnr.Add(ProgressLabel1); Background.BackgroundCtnr.Add(ProgressLabel2); PreloadLabels = new string[] { GameFacade.Strings.GetString("155", "6"), GameFacade.Strings.GetString("155", "7"), GameFacade.Strings.GetString("155", "8"), GameFacade.Strings.GetString("155", "9") }; CurrentPreloadLabel = 0; AnimateLabel("", PreloadLabels[0]); CheckProgressTimer = GameThread.SetInterval(CheckProgressTimer_Elapsed, 5); //GameFacade.Screens.Tween.To(rect, 10.0f, new Dictionary<string, float>() { // {"X", 500.0f} //}, TweenQuad.EaseInOut); }
public override void Speak(string text, bool gender, int ipitch) { var Synth = new System.Speech.Synthesis.SpeechSynthesizer(); Synth.SelectVoiceByHints((gender) ? System.Speech.Synthesis.VoiceGender.Female : System.Speech.Synthesis.VoiceGender.Male); if (text == "") { return; } var voci = Synth.GetInstalledVoices(); var stream = new System.IO.MemoryStream(); var pitch = Math.Max(0.1f, ipitch / 100f + 1f); //below 0.1 is just stupid, so just clamp there. if (pitch < 1f) { Synth.Rate = 10 - (int)(pitch * 10); } else { Synth.Rate = (int)(10 / pitch) - 10; } Synth.SetOutputToWaveStream(stream); Synth.SpeakAsync(text); EventHandler <System.Speech.Synthesis.SpeakCompletedEventArgs> OnComplete = null; OnComplete = (obj, evt) => { GameThread.NextUpdate((u) => { stream.Seek(0, System.IO.SeekOrigin.Begin); var sfx = SoundEffect.FromStream(stream); var inst = sfx.CreateInstance(); inst.Pitch = pitch - 1f; inst.Play(); GameThreadInterval interval = null; interval = GameThread.SetInterval(() => { if (inst.State == SoundState.Stopped) { sfx.Dispose(); //just catch and dispose these when appropriate interval.Clear(); } }, 1000); Synth.Dispose(); }); Synth.SpeakCompleted -= OnComplete; }; Synth.SpeakCompleted += OnComplete; }
public LotThumbContent() { GameThread.SetInterval(Update, 1000); Client = new ApiClient(ApiClient.CDNUrl ?? GlobalSettings.Default.GameEntryUrl); DefaultThumb = TextureUtils.TextureFromFile(GameFacade.GraphicsDevice, GameFacade.GameFilePath("userdata/houses/defaulthouse.bmp")); using (var strm = File.Open("Content/3D/defaulthouse.fsof", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { DefaultFSOF = new FSOF(); DefaultFSOF.Read(strm); DefaultFSOF.LoadGPU(GameFacade.GraphicsDevice); } TextureUtils.ManualTextureMask(ref DefaultThumb, new uint[] { 0xFF000000 }); }
public ClientDataService(IModelSerializer serializer, FSO.Content.Content content, IKernel kernel) : base(serializer, content) { AddProvider(kernel.Get <ClientAvatarProvider>()); AddProvider(kernel.Get <ClientLotProvider>()); AddProvider(kernel.Get <ClientCityProvider>()); CityClient = kernel.Get <AriesClient>("City"); CityClient.AddSubscriber(this); //When a new object is made, this data will be requested automatically SetDefaultDataStruct(typeof(Avatar), MaskedStruct.SimPage_Main); PollInterval = GameThread.SetInterval(PollTopics, 5000); }
public CityConnectionRegulator(CityClient cityApi, [Named("City")] AriesClient cityClient, IDatabaseService db, IClientDataService ds, IKernel kernel, IShardsDomain shards) { this.CityApi = cityApi; this.Client = cityClient; this.Client.AddSubscriber(this); this.DB = db; this.DataService = ds; this.Shards = shards; AddState("Disconnected") .Default() .Transition() .OnData(typeof(ShardSelectorServletRequest)) .TransitionTo("SelectCity"); AddState("SelectCity") .OnlyTransitionFrom("Disconnected", "Reconnecting"); AddState("ConnectToCitySelector") .OnData(typeof(ShardSelectorServletResponse)) .TransitionTo("CitySelected") .OnlyTransitionFrom("SelectCity"); AddState("CitySelected") .OnData(typeof(ShardSelectorServletResponse)) .TransitionTo("OpenSocket") .OnlyTransitionFrom("ConnectToCitySelector"); AddState("OpenSocket") .OnData(typeof(AriesConnected)).TransitionTo("SocketOpen") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("CitySelected"); AddState("SocketOpen") .OnData(typeof(RequestClientSession)).TransitionTo("RequestClientSession") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("OpenSocket"); AddState("RequestClientSession") .OnData(typeof(HostOnlinePDU)).TransitionTo("HostOnline") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("SocketOpen"); AddState("HostOnline").OnlyTransitionFrom("RequestClientSession"); AddState("PartiallyConnected") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnData(typeof(ShardSelectorServletRequest)).TransitionTo("CompletePartialConnection") .OnlyTransitionFrom("HostOnline"); AddState("CompletePartialConnection").OnlyTransitionFrom("PartiallyConnected"); AddState("AskForAvatarData") .OnData(typeof(LoadAvatarByIDResponse)).TransitionTo("ReceivedAvatarData") .OnlyTransitionFrom("PartiallyConnected", "CompletePartialConnection"); AddState("ReceivedAvatarData").OnlyTransitionFrom("AskForAvatarData"); AddState("AskForCharacterData").OnlyTransitionFrom("ReceivedAvatarData"); AddState("ReceivedCharacterData").OnlyTransitionFrom("AskForCharacterData"); AddState("Connected") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("ReceivedCharacterData"); AddState("UnexpectedDisconnect"); AddState("Disconnect") .OnData(typeof(AriesDisconnected)) .TransitionTo("Disconnected"); AddState("Reconnect") .OnData(typeof(AriesDisconnected)) .TransitionTo("Reconnecting"); AddState("Reconnecting") .OnData(typeof(ShardSelectorServletRequest)) .TransitionTo("SelectCity") .OnlyTransitionFrom("Reconnect"); GameThread.SetInterval(() => { if (Client.IsConnected) { Client.Write(new Server.Protocol.Electron.Packets.KeepAlive()); } }, 10000); //keep alive every 10 seconds. prevents disconnection by aggressive NAT. }
public void SubmitCommand(string msg) { var state = LastState; if (state == null) { return; } var spaceIndex = msg.IndexOf(' '); if (spaceIndex == -1) { spaceIndex = msg.Length; } var cmd = msg.Substring(1, spaceIndex - 1); var args = msg.Substring(Math.Min(msg.Length, spaceIndex + 1), Math.Max(0, msg.Length - (spaceIndex + 1))); string response = "(" + msg + ") "; var tilePos = vm.Context.World.EstTileAtPosWithScroll(Control.GetScaledPoint(state.MouseState.Position).ToVector2()); try { switch (cmd.ToLowerInvariant()) { case "roomat": //!roomat LotTilePos targetrPos = new LotTilePos((short)(tilePos.X * 16), (short)(tilePos.Y * 16), vm.Context.World.State.Level); var room = vm.Context.GetRoomAt(targetrPos); response += "Room at (" + targetrPos.TileX + ", " + targetrPos.TileY + ", " + targetrPos.Level + ") is " + room + "\r\n"; var roomInfo = vm.Context.RoomInfo[room]; foreach (var obj in roomInfo.Room.AdjRooms) { var info = vm.Context.RoomInfo[obj]; response += "adjacent room: " + obj; response += "\r\n"; } break; case "objat": //!objat (objects at mouse position) LotTilePos targetPos = LotTilePos.FromBigTile((short)tilePos.X, (short)tilePos.Y, vm.Context.World.State.Level); if (args == "oow") { targetPos = LotTilePos.OUT_OF_WORLD; } var objs = vm.Context.ObjectQueries.GetObjectsAt(targetPos); response += "Objects at (" + targetPos.TileX + ", " + targetPos.TileY + ", " + targetPos.Level + ")\r\n"; foreach (var obj in objs) { response += ObjectSummary(obj); response += "\r\n"; } break; case "del": //!del objectID vm.SendCommand(new VMNetDeleteObjectCmd() { ObjectID = short.Parse(args), CleanupAll = true }); response += "Sent deletion command."; break; case "debugroutes": var on = args.ToLowerInvariant() == "true" || args == "1"; SimAntics.Engine.VMRoutingFrame.DEBUG_DRAW = on; response += "Debug Routes Set: " + on; break; case "vc": case "validcollision": if (CollisionTestInterval != null) { CollisionTestInterval.Clear(); CollisionTestInterval = null; response += "Collision validator is now disabled."; } else { var collisionValidator = new CollisionTestUtils(); CollisionTestInterval = GameThread.SetInterval(() => { collisionValidator.VerifyAllCollision(vm); }, 1000); response += "Collision validator is now running every second. An exception will be thrown if collision state is inconsistent."; } break; default: response += "Unknown command."; break; } } catch (Exception e) { response += "Bad command."; } vm.SignalChatEvent(new VMChatEvent(null, VMChatEventType.Generic, response)); }