using Content.Client.GameObjects; using Content.Client.GameObjects.Components.Actor; using Content.Client.GameObjects.Components.Clothing; using Content.Client.GameObjects.Components.Construction; using Content.Client.GameObjects.Components.Power; using Content.Client.GameObjects.Components.IconSmoothing; using Content.Client.GameObjects.Components.Storage; using Content.Client.GameObjects.Components.Weapons.Ranged; using Content.Client.GameTicking; using Content.Client.Input; using Content.Client.Interfaces; using Content.Client.Interfaces.GameObjects; using Content.Client.Interfaces.Parallax; using Content.Client.Parallax; using Content.Shared.Interfaces; using Robust.Client; using Robust.Client.Interfaces; using Robust.Client.Interfaces.Graphics.Overlays; using Robust.Client.Interfaces.Input; using Robust.Client.Player; using Robust.Shared.ContentPack; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using System; using Content.Client.Chat; using Content.Client.GameObjects.Components; using Content.Client.GameObjects.Components.Mobs; using Content.Client.GameObjects.Components.Movement; using Content.Client.GameObjects.Components.Research; using Content.Client.GameObjects.Components.Sound; using Content.Client.Interfaces.Chat; using Content.Client.UserInterface; using Content.Shared.GameObjects.Components.Markers; using Content.Shared.GameObjects.Components.Materials; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Research; using Robust.Client.Interfaces.State; using Robust.Client.Interfaces.UserInterface; using Robust.Client.State.States; 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.RegisterIgnore("Interactable"); factory.RegisterIgnore("Destructible"); factory.RegisterIgnore("Temperature"); factory.RegisterIgnore("PowerTransfer"); factory.RegisterIgnore("PowerNode"); factory.RegisterIgnore("PowerProvider"); factory.RegisterIgnore("PowerDevice"); factory.RegisterIgnore("PowerStorage"); factory.RegisterIgnore("PowerGenerator"); factory.RegisterIgnore("Explosive"); factory.RegisterIgnore("OnUseTimerTrigger"); factory.RegisterIgnore("ToolboxElectricalFill"); factory.RegisterIgnore("ToolLockerFill"); factory.RegisterIgnore("EmitSoundOnUse"); factory.RegisterIgnore("FootstepModifier"); factory.RegisterIgnore("HeatResistance"); factory.RegisterIgnore("CombatMode"); factory.RegisterIgnore("Teleportable"); factory.RegisterIgnore("ItemTeleporter"); factory.RegisterIgnore("Portal"); factory.RegisterIgnore("EntityStorage"); factory.RegisterIgnore("PlaceableSurface"); factory.RegisterIgnore("Wirecutter"); factory.RegisterIgnore("Screwdriver"); factory.RegisterIgnore("Multitool"); factory.RegisterIgnore("Welder"); factory.RegisterIgnore("Wrench"); factory.RegisterIgnore("Crowbar"); factory.Register(); factory.RegisterIgnore("HitscanWeapon"); factory.RegisterIgnore("ProjectileWeapon"); factory.RegisterIgnore("Projectile"); factory.RegisterIgnore("MeleeWeapon"); factory.RegisterIgnore("Storeable"); factory.RegisterIgnore("Stack"); factory.RegisterIgnore("Dice"); factory.Register(); factory.RegisterReference(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.RegisterReference(); factory.RegisterReference(); factory.Register(); factory.Register(); factory.RegisterIgnore("Construction"); factory.RegisterIgnore("Apc"); factory.RegisterIgnore("Door"); factory.RegisterIgnore("PoweredLight"); factory.RegisterIgnore("Smes"); factory.RegisterIgnore("Powercell"); factory.RegisterIgnore("HandheldLight"); factory.RegisterIgnore("LightBulb"); factory.RegisterIgnore("Healing"); factory.RegisterIgnore("Catwalk"); factory.RegisterIgnore("BallisticMagazine"); factory.RegisterIgnore("BallisticMagazineWeapon"); factory.RegisterIgnore("BallisticBullet"); factory.RegisterIgnore("HitscanWeaponCapacitor"); prototypes.RegisterIgnore("material"); factory.RegisterIgnore("PowerCell"); factory.Register(); factory.Register(); factory.Register(); factory.RegisterReference(); factory.Register(); factory.RegisterReference(); factory.Register(); factory.RegisterIgnore("AiController"); factory.RegisterIgnore("PlayerInputMover"); factory.Register(); factory.Register(); 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, float frameTime) { base.Update(level, frameTime); switch (level) { case ModUpdateLevel.FramePreEngine: var renderFrameEventArgs = new RenderFrameEventArgs(frameTime); IoCManager.Resolve().FrameUpdate(renderFrameEventArgs); IoCManager.Resolve().FrameUpdate(renderFrameEventArgs); break; } } } }