using System; using Content.Client.Chat; using Content.Client.GameObjects.Components.Actor; using Content.Client.GameTicking; using Content.Client.Input; using Content.Client.Interfaces; using Content.Client.Interfaces.Chat; using Content.Client.Interfaces.Parallax; using Content.Client.Parallax; using Content.Client.UserInterface; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Chemistry; using Content.Shared.GameObjects.Components.Markers; using Content.Shared.GameObjects.Components.Research; using Content.Shared.GameObjects.Components.VendingMachines; using Content.Shared.Interfaces; using Robust.Client.Interfaces; using Robust.Client.Interfaces.Graphics.Overlays; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.UserInterface; using Robust.Client.Player; using Robust.Shared.ContentPack; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Client { public class EntryPoint : GameClient { #pragma warning disable 649 [Dependency] private readonly IPlayerManager _playerManager; [Dependency] private readonly IEscapeMenuOwner _escapeMenuOwner; #pragma warning restore 649 public override void Init() { var factory = IoCManager.Resolve(); var prototypes = IoCManager.Resolve(); factory.DoAutoRegistrations(); var registerIgnore = new[] { "AmmoBox", "Breakable", "Pickaxe", "Interactable", "Destructible", "Temperature", "PowerTransfer", "PowerNode", "PowerProvider", "PowerDevice", "PowerStorage", "PowerGenerator", "Explosive", "OnUseTimerTrigger", "ToolboxElectricalFill", "ToolLockerFill", "EmitSoundOnUse", "FootstepModifier", "HeatResistance", "CombatMode", "Teleportable", "ItemTeleporter", "Portal", "EntityStorage", "PlaceableSurface", "Wirecutter", "Screwdriver", "Multitool", "Welder", "Wrench", "Crowbar", "HitscanWeapon", "ProjectileWeapon", "Projectile", "MeleeWeapon", "Storeable", "Stack", "Dice", "Construction", "Apc", "Door", "PoweredLight", "Smes", "Powercell", "HandheldLight", "LightBulb", "Healing", "Catwalk", "BallisticMagazine", "BallisticMagazineWeapon", "BallisticBullet", "HitscanWeaponCapacitor", "PowerCell", "AiController", "PlayerInputMover", "Computer", "AsteroidRock", "ResearchServer", "ResearchPointSource", "ResearchClient", "IdCard", "Access", "AccessReader", }; foreach (var ignoreName in registerIgnore) { factory.RegisterIgnore(ignoreName); } factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); prototypes.RegisterIgnore("material"); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); if (TestingCallbacks != null) { var cast = (ClientModuleTestingCallbacks) TestingCallbacks; cast.ClientBeforeIoC?.Invoke(); } IoCManager.BuildGraph(); IoCManager.Resolve().LoadParallax(); IoCManager.Resolve().PlayerJoinedServer += SubscribePlayerAttachmentEvents; var stylesheet = new NanoStyle(); IoCManager.Resolve().Stylesheet = stylesheet.Stylesheet; IoCManager.Resolve().Stylesheet = stylesheet.Stylesheet; IoCManager.InjectDependencies(this); _escapeMenuOwner.Initialize(); } /// /// Subscribe events to the player manager after the player manager is set up /// /// /// public void SubscribePlayerAttachmentEvents(object sender, EventArgs args) { _playerManager.LocalPlayer.EntityAttached += AttachPlayerToEntity; _playerManager.LocalPlayer.EntityDetached += DetachPlayerFromEntity; } /// /// Add the character interface master which combines all character interfaces into one window /// public static void AttachPlayerToEntity(EntityAttachedEventArgs eventArgs) { eventArgs.NewEntity.AddComponent(); } /// /// Remove the character interface master from this entity now that we have detached ourselves from it /// public static void DetachPlayerFromEntity(EntityDetachedEventArgs eventArgs) { eventArgs.OldEntity.RemoveComponent(); } public override void PostInit() { base.PostInit(); // Setup key contexts var inputMan = IoCManager.Resolve(); ContentContexts.SetupContexts(inputMan.Contexts); IoCManager.Resolve().Initialize(); IoCManager.Resolve().Initialize(); IoCManager.Resolve().Initialize(); IoCManager.Resolve().AddOverlay(new ParallaxOverlay()); IoCManager.Resolve().Initialize(); } public override void Update(ModUpdateLevel level, FrameEventArgs frameEventArgs) { base.Update(level, frameEventArgs); switch (level) { case ModUpdateLevel.FramePreEngine: IoCManager.Resolve().FrameUpdate(frameEventArgs); IoCManager.Resolve().FrameUpdate(frameEventArgs); IoCManager.Resolve().FrameUpdate(frameEventArgs); break; } } } }