コード例 #1
0
        public NetServer(PacketManager packetManager, ServerKnightsManager serverKnightsManager)
        {
            _packetManager        = packetManager;
            _serverKnightsManager = serverKnightsManager;

            _clients = new Dictionary <ushort, NetServerClient>();
        }
コード例 #2
0
        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
                );
        }
コード例 #3
0
ファイル: PlayerManager.cs プロジェクト: Benjoby057/HKMPte
        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);
        }
コード例 #4
0
ファイル: ServerManager.cs プロジェクト: Benjoby057/HKMPte
        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;
        }
コード例 #5
0
ファイル: ClientManager.cs プロジェクト: Benjoby057/HKMPte
        //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);
            };
        }
コード例 #6
0
ファイル: NetworkManager.cs プロジェクト: Benjoby057/HKMPte
 public NetworkManager(PacketManager packetManager, ServerKnightsManager serverKnightsManager)
 {
     _netClient = new NetClient(packetManager);
     _netServer = new NetServer(packetManager, serverKnightsManager);
 }