public NetServer(PacketManager packetManager, ServerKnightsManager serverKnightsManager) { _packetManager = packetManager; _serverKnightsManager = serverKnightsManager; _clients = new Dictionary <ushort, NetServerClient>(); }
public GameManager(ModSettings modSettings) { ThreadUtil.Instantiate(); FontManager.LoadFonts(); TextureManager.LoadTextures(); var packetManager = new PacketManager(); var serverKnightsManager = new ServerKnightsManager(); var networkManager = new NetworkManager(packetManager, serverKnightsManager); serverKnightsManager._networkManager = networkManager; var clientGameSettings = new Settings.GameSettings(); var serverGameSettings = modSettings.GameSettings ?? new Settings.GameSettings(); var playerManager = new PlayerManager(networkManager, clientGameSettings, modSettings, serverKnightsManager); var animationManager = new AnimationManager(networkManager, playerManager, packetManager, clientGameSettings, serverKnightsManager); var mapManager = new MapManager(networkManager, clientGameSettings); var clientManager = new ClientManager( networkManager, playerManager, animationManager, mapManager, clientGameSettings, packetManager, serverKnightsManager ); var serverManager = new ServerManager(networkManager, serverGameSettings, packetManager, serverKnightsManager); new UI.UIManager( serverManager, clientManager, clientGameSettings, serverGameSettings, modSettings ); }
public PlayerManager(NetworkManager networkManager, Settings.GameSettings gameSettings, ModSettings settings, ServerKnightsManager serverKnightsManager) { _gameSettings = gameSettings; _playerData = new Dictionary <ushort, ClientPlayerData>(); _serverKnightsManager = serverKnightsManager; // Create the player prefab, used to instantiate player objects _playerPrefab = new GameObject( "PlayerPrefab", typeof(BoxCollider2D), typeof(DamageHero), typeof(EnemyHitEffectsUninfected), typeof(MeshFilter), typeof(MeshRenderer), typeof(NonBouncer), typeof(SpriteFlash), typeof(tk2dSprite), typeof(tk2dSpriteAnimator), typeof(CoroutineCancelComponent) ) { layer = 9 }; // Add some extra gameObject related to animation effects new GameObject("Attacks") { layer = 9 }.transform.SetParent(_playerPrefab.transform); new GameObject("Effects") { layer = 9 }.transform.SetParent(_playerPrefab.transform); new GameObject("Spells") { layer = 9 }.transform.SetParent(_playerPrefab.transform); _playerPrefab.SetActive(false); Object.DontDestroyOnLoad(_playerPrefab); }
public ServerManager(NetworkManager networkManager, Settings.GameSettings gameSettings, PacketManager packetManager, ServerKnightsManager serverKnightsManager) { _netServer = networkManager.GetNetServer(); _gameSettings = gameSettings; _serverKnightsSession = serverKnightsManager.loadSession(); _playerData = new ConcurrentDictionary <ushort, ServerPlayerData>(); // Register packet handlers packetManager.RegisterServerPacketHandler <HelloServer>(ServerPacketId.HelloServer, OnHelloServer); packetManager.RegisterServerPacketHandler <ServerPlayerEnterScene>(ServerPacketId.PlayerEnterScene, OnClientEnterScene); packetManager.RegisterServerPacketHandler(ServerPacketId.PlayerLeaveScene, OnClientLeaveScene); packetManager.RegisterServerPacketHandler <PlayerUpdate>(ServerPacketId.PlayerUpdate, OnPlayerUpdate); packetManager.RegisterServerPacketHandler <EntityUpdate>(ServerPacketId.EntityUpdate, OnEntityUpdate); packetManager.RegisterServerPacketHandler(ServerPacketId.PlayerDisconnect, OnPlayerDisconnect); packetManager.RegisterServerPacketHandler(ServerPacketId.PlayerDeath, OnPlayerDeath); packetManager.RegisterServerPacketHandler <ServerPlayerTeamUpdate>(ServerPacketId.PlayerTeamUpdate, OnPlayerTeamUpdate); packetManager.RegisterServerPacketHandler <ServerServerKnightUpdate>(ServerPacketId.ServerKnightUpdate, OnServerKnightUpdate); // Register a heartbeat handler _netServer.RegisterOnClientHeartBeat(OnClientHeartBeat); // Register server shutdown handler _netServer.RegisterOnShutdown(OnServerShutdown); // Register application quit handler ModHooks.Instance.ApplicationQuitHook += OnApplicationQuit; }
//private event Action ServerKnightChangeEvent; public ClientManager(NetworkManager networkManager, PlayerManager playerManager, AnimationManager animationManager, MapManager mapManager, Settings.GameSettings gameSettings, PacketManager packetManager, ServerKnightsManager serverKnightsManager) { _netClient = networkManager.GetNetClient(); _serverKnightsManager = serverKnightsManager; _playerManager = playerManager; _animationManager = animationManager; _mapManager = mapManager; _gameSettings = gameSettings; _entityManager = new EntityManager(_netClient); _heartBeatReceiveStopwatch = new Stopwatch(); // Register packet handlers packetManager.RegisterClientPacketHandler(ClientPacketId.ServerShutdown, OnServerShutdown); packetManager.RegisterClientPacketHandler <PlayerConnect>(ClientPacketId.PlayerConnect, OnPlayerConnect); packetManager.RegisterClientPacketHandler <ClientPlayerDisconnect>(ClientPacketId.PlayerDisconnect, OnPlayerDisconnect); packetManager.RegisterClientPacketHandler <ClientPlayerEnterScene>(ClientPacketId.PlayerEnterScene, OnPlayerEnterScene); packetManager.RegisterClientPacketHandler <ClientPlayerAlreadyInScene>(ClientPacketId.PlayerAlreadyInScene, OnPlayerAlreadyInScene); packetManager.RegisterClientPacketHandler <GenericClientData>(ClientPacketId.PlayerLeaveScene, OnPlayerLeaveScene); packetManager.RegisterClientPacketHandler <PlayerUpdate>(ClientPacketId.PlayerUpdate, OnPlayerUpdate); packetManager.RegisterClientPacketHandler <EntityUpdate>(ClientPacketId.EntityUpdate, OnEntityUpdate); packetManager.RegisterClientPacketHandler <ClientPlayerTeamUpdate>(ClientPacketId.PlayerTeamUpdate, OnPlayerTeamUpdate); packetManager.RegisterClientPacketHandler <ClientServerKnightUpdate>(ClientPacketId.ServerKnightUpdate, OnServerKnightUpdate); packetManager.RegisterClientPacketHandler <GameSettingsUpdate>(ClientPacketId.GameSettingsUpdated, OnGameSettingsUpdated); packetManager.RegisterClientPacketHandler <ServerKnightSession>(ClientPacketId.ServerKnightSession, OnServerKnightSession); // Register the Hero Controller Start, which is when the local player spawns On.HeroController.Start += (orig, self) => { // Execute the original method orig(self); // If we are connect to a server, add a username to the player object if (networkManager.GetNetClient().IsConnected) { _playerManager.AddNameToPlayer(HeroController.instance.gameObject, _username, _playerManager.LocalPlayerTeam); } }; networkManager.GetNetClient().RegisterOnConnect(() => { // We should only be able to connect during a gameplay scene, // which is when the player is spawned already, so we can add the username _playerManager.AddNameToPlayer(HeroController.instance.gameObject, _username, _playerManager.LocalPlayerTeam); }); // Register handlers for scene change and player update UnityEngine.SceneManagement.SceneManager.activeSceneChanged += OnSceneChange; On.HeroController.Update += OnPlayerUpdate; // Register client connect handler _netClient.RegisterOnConnect(OnClientConnect); _netClient.RegisterOnHeartBeat(OnHeartBeat); // Register application quit handler ModHooks.Instance.ApplicationQuitHook += OnApplicationQuit; // Prevent changing the timescale if the client is connected to ensure synchronisation between clients On.GameManager.SetTimeScale_float += (orig, self, scale) => { if (!_netClient.IsConnected) { orig(self, scale); } else { // Always put the time scale to 1.0, thus never allowing the game to change speed // This is to prevent desyncs in multiplayer orig(self, 1.0f); } }; // Register pause callback to make sure the player doesn't keep dashing or moving On.HeroController.Pause += (orig, self) => { if (!_netClient.IsConnected) { orig(self); return; } // We simply call the private ResetInput method to prevent the knight from continuing movement // while the game is paused typeof(HeroController).InvokeMember( "ResetInput", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, HeroController.instance, null ); }; // To make sure that if we are paused, and we enter a screen transition, // we still go through it. So we unpause first, then execute the original method On.TransitionPoint.OnTriggerEnter2D += (orig, self, obj) => { // Unpause if paused if (UIManager.instance != null) { if (UIManager.instance.uiState.Equals(UIState.PAUSED)) { UIManager.instance.TogglePauseGame(); } } // Execute original method orig(self, obj); }; }
public NetworkManager(PacketManager packetManager, ServerKnightsManager serverKnightsManager) { _netClient = new NetClient(packetManager); _netServer = new NetServer(packetManager, serverKnightsManager); }