Files
tbd-station-14/Content.Server/EntryPoint.cs
clusterfack ea05c593aa Storage Component (toolboxes, backpacks, etc) (#57)
* Fix
Finish and update submodule
Comments code, changes network messages
FIXES THE USE INTERACTION SO YOU CAN ACTUALLY ACTIVATE THINGS NOW
Need engine commits
We'll figure out what to do about this shit later eh mates? Maybe have a script in the build process that automatically moves them over to godot/scenes
Changes some prototypes and fixes stuff
Fixes some more bugs, makes storage values show up properly
Part 3
Part 2
Storage Take 1

* Doneso
2018-04-22 13:11:38 +02:00

187 lines
7.5 KiB
C#

using Content.Server.GameObjects;
using Content.Server.GameObjects.Components.Power;
using Content.Server.GameObjects.Components.Interactable.Tools;
using Content.Server.Interfaces.GameObjects;
using Content.Server.Placement;
using SS14.Server;
using SS14.Server.Interfaces;
using SS14.Server.Interfaces.Chat;
using SS14.Server.Interfaces.Maps;
using SS14.Server.Interfaces.Player;
using SS14.Server.Player;
using SS14.Shared.Console;
using SS14.Shared.ContentPack;
using SS14.Shared.Enums;
using SS14.Shared.Interfaces.GameObjects;
using SS14.Shared.Interfaces.Map;
using SS14.Shared.Interfaces.Timers;
using SS14.Shared.IoC;
using SS14.Shared.Log;
using SS14.Shared.Map;
using SS14.Shared.Timers;
using SS14.Shared.Interfaces.Timing;
using SS14.Shared.Maths;
using Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan;
using Content.Server.GameObjects.Components.Weapon.Ranged.Projectile;
using Content.Server.GameObjects.Components.Projectiles;
using Content.Server.GameObjects.Components.Weapon.Melee;
namespace Content.Server
{
public class EntryPoint : GameServer
{
private IBaseServer _server;
private IPlayerManager _players;
private bool _countdownStarted;
/// <inheritdoc />
public override void Init()
{
base.Init();
_server = IoCManager.Resolve<IBaseServer>();
_players = IoCManager.Resolve<IPlayerManager>();
_server.RunLevelChanged += HandleRunLevelChanged;
_players.PlayerStatusChanged += HandlePlayerStatusChanged;
_players.PlayerPrototypeName = "HumanMob_Content";
var factory = IoCManager.Resolve<IComponentFactory>();
factory.Register<HandsComponent>();
factory.RegisterReference<HandsComponent, IHandsComponent>();
factory.Register<InventoryComponent>();
factory.RegisterReference<InventoryComponent, IInventoryComponent>();
factory.Register<StoreableComponent>();
factory.Register<ItemComponent>();
factory.RegisterReference<ItemComponent, IItemComponent>();
factory.RegisterReference<ItemComponent, StoreableComponent>();
factory.Register<DamageableComponent>();
factory.Register<DestructibleComponent>();
factory.Register<TemperatureComponent>();
factory.Register<ServerDoorComponent>();
//Power Components
factory.Register<PowerTransferComponent>();
factory.Register<PowerProviderComponent>();
factory.Register<PowerNodeComponent>();
factory.Register<PowerStorageComponent>();
factory.Register<PowerDeviceComponent>();
factory.Register<PowerGeneratorComponent>();
//Tools
factory.Register<MultitoolComponent>();
factory.Register<WirecutterComponent>();
factory.Register<WrenchComponent>();
factory.Register<WelderComponent>();
factory.Register<ScrewdriverComponent>();
factory.Register<CrowbarComponent>();
factory.Register<HitscanWeaponComponent>();
factory.Register<ProjectileWeaponComponent>();
factory.Register<ProjectileComponent>();
factory.Register<MeleeWeaponComponent>();
factory.Register<ServerStorageComponent>();
}
/// <inheritdoc />
public override void Dispose()
{
_server.RunLevelChanged -= HandleRunLevelChanged;
_players.PlayerStatusChanged -= HandlePlayerStatusChanged;
base.Dispose();
}
private static void HandleRunLevelChanged(object sender, RunLevelChangedEventArgs args)
{
switch (args.NewLevel)
{
case ServerRunLevel.PreGame:
var timing = IoCManager.Resolve<IGameTiming>();
IoCManager.Resolve<IPlayerManager>().FallbackSpawnPoint = new LocalCoordinates(0, 0, GridId.DefaultGrid, new MapId(2));
var mapLoader = IoCManager.Resolve<IMapLoader>();
var mapMan = IoCManager.Resolve<IMapManager>();
var startTime = timing.RealTime;
{
var newMap = mapMan.CreateMap(new MapId(2));
mapLoader.LoadBlueprint(newMap, new GridId(4), "Maps/Demo/DemoGrid.yaml");
var grid = newMap.GetGrid(new GridId(4));
SpawnHelpers.SpawnLightTurret(grid, new Vector2(-15, 15));
}
var timeSpan = timing.RealTime - startTime;
Logger.Info($"Loaded map in {timeSpan.TotalMilliseconds:N2}ms.");
IoCManager.Resolve<IChatManager>().DispatchMessage(ChatChannel.Server, "Gamemode: Round loaded!");
break;
case ServerRunLevel.Game:
IoCManager.Resolve<IPlayerManager>().SendJoinGameToAll();
IoCManager.Resolve<IChatManager>().DispatchMessage(ChatChannel.Server, "Gamemode: Round started!");
break;
case ServerRunLevel.PostGame:
IoCManager.Resolve<IChatManager>().DispatchMessage(ChatChannel.Server, "Gamemode: Round over!");
break;
}
}
private void HandlePlayerStatusChanged(object sender, SessionStatusEventArgs args)
{
switch (args.NewStatus)
{
case SessionStatus.Connected:
{
// timer time must be > tick length
IoCManager.Resolve<ITimerManager>().AddTimer(new Timer(250, false, () =>
{
args.Session.JoinLobby();
}));
IoCManager.Resolve<IChatManager>().DispatchMessage(ChatChannel.Server, "Gamemode: Player joined server!", args.Session.Index);
}
break;
case SessionStatus.InLobby:
{
// auto start game when first player joins
if (_server.RunLevel == ServerRunLevel.PreGame && !_countdownStarted)
{
_countdownStarted = true;
IoCManager.Resolve<ITimerManager>().AddTimer(new Timer(2000, false, () =>
{
_server.RunLevel = ServerRunLevel.Game;
_countdownStarted = false;
}));
}
IoCManager.Resolve<IChatManager>().DispatchMessage(ChatChannel.Server, "Gamemode: Player joined Lobby!", args.Session.Index);
}
break;
case SessionStatus.InGame:
{
//TODO: Check for existing mob and re-attach
IoCManager.Resolve<IPlayerManager>().SpawnPlayerMob(args.Session);
IoCManager.Resolve<IChatManager>().DispatchMessage(ChatChannel.Server, "Gamemode: Player joined Game!", args.Session.Index);
}
break;
case SessionStatus.Disconnected:
{
IoCManager.Resolve<IChatManager>().DispatchMessage(ChatChannel.Server, "Gamemode: Player left!", args.Session.Index);
}
break;
}
}
}
}