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.SmoothWalling; 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.GameObjects.Components.Weapons.Ranged; using Content.Shared.Interfaces; using SS14.Client; using SS14.Client.Interfaces; using SS14.Client.Interfaces.Graphics.Overlays; using SS14.Client.Interfaces.Input; using SS14.Client.Player; using SS14.Client.Utility; using SS14.Shared.ContentPack; using SS14.Shared.Interfaces.GameObjects; using SS14.Shared.IoC; using SS14.Shared.Prototypes; using System; using Content.Client.UserInterface; using Content.Shared.GameObjects.Components.Markers; using SS14.Client.Interfaces.UserInterface; using SS14.Shared.Log; namespace Content.Client { public class EntryPoint : GameClient { public override void Init() { #if DEBUG GodotResourceCopy.DoDirCopy("../../Resources", "Content"); #endif 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("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("Material"); factory.RegisterIgnore("Stack"); factory.Register(); factory.RegisterReference(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); factory.Register(); 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"); prototypes.RegisterIgnore("material"); factory.RegisterIgnore("PowerCell"); factory.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.BuildGraph(); IoCManager.Resolve().LoadParallax(); IoCManager.Resolve().PlayerJoinedServer += SubscribePlayerAttachmentEvents; var stylesheet = new NanoStyle(); IoCManager.Resolve().Stylesheet = stylesheet.Stylesheet; } /// /// Subscribe events to the player manager after the player manager is set up /// /// /// public void SubscribePlayerAttachmentEvents(object sender, EventArgs args) { IoCManager.Resolve().LocalPlayer.EntityAttached += AttachPlayerToEntity; IoCManager.Resolve().LocalPlayer.EntityDetached += DetachPlayerFromEntity; AttachPlayerToEntity(IoCManager.Resolve().LocalPlayer, EventArgs.Empty); } /// /// Add the character interface master which combines all character interfaces into one window /// /// /// public void AttachPlayerToEntity(object sender, EventArgs args) { var localplayer = (LocalPlayer)sender; localplayer.ControlledEntity?.AddComponent(); } /// /// Remove the character interface master from this entity now that we have detached ourselves from it /// /// /// public void DetachPlayerFromEntity(object sender, EventArgs args) { var localplayer = (LocalPlayer)sender; //Wont work atm, controlled entity gets nulled before this event fires localplayer.ControlledEntity?.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().AddOverlay(new ParallaxOverlay()); } public override void Update(AssemblyLoader.UpdateLevel level, float frameTime) { base.Update(level, frameTime); switch (level) { case AssemblyLoader.UpdateLevel.FramePreEngine: var renderFrameEventArgs = new RenderFrameEventArgs(frameTime); IoCManager.Resolve().FrameUpdate(renderFrameEventArgs); IoCManager.Resolve().FrameUpdate(renderFrameEventArgs); break; } } } }