public bool Process(IEvent e)
        {
            if (e is PlayerInputEvent)
            {
                PlayerInputEvent inputEvent = e as PlayerInputEvent;
                Vector2          pos;

                if (!PlayerPositionsByUID.TryGetValue(inputEvent.PlayerUID, out pos))
                {
                    throw new Exception("Player moved that was not yet created: " + inputEvent.PlayerUID);
                }

                PlayerPositionsByUID[inputEvent.PlayerUID] = pos + NetworkGameMaster.DirectionToMovement(inputEvent.Direction);
            }
            else if (e is PlayerCreatedEvent)
            {
                PlayerCreatedEvent createdEvent = e as PlayerCreatedEvent;

                if (PlayerPositionsByUID.ContainsKey(createdEvent.PlayerUID))
                {
                    throw new Exception("Player was created for a second time: " + createdEvent.PlayerUID);
                }

                PlayerPositionsByUID[createdEvent.PlayerUID] = Vector2.zero;
            }

            return(true);
        }
Ejemplo n.º 2
0
        private void PrintHash(NetworkGameMaster p)
        {
            HashProjection proj = new HashProjection(p.ES);

            p.ES.ApplyProjection(proj, EventStream.AllExistingEvents);

            Debug.Log(proj.GenerateHashCode());
        }
Ejemplo n.º 3
0
        private void PrintEventQueue(NetworkGameMaster p)
        {
            PositionCheckProjection proj           = new PositionCheckProjection();
            PlayerRegistry          PlayerRegistry = p.EM.GetRegistry <PlayerRegistry>();

            proj.PlayerCount = PlayerRegistry.EntityCount;
            p.ES.ApplyProjection(proj, EventStream.AllExistingEvents);

            PlayerPositionQuery q = new PlayerPositionQuery();

            foreach (PlayerEntity player in PlayerRegistry.Entities)
            {
                p.EM.Query(player, q);
                Debug.Log("Player " + player.UID + " position: real " + q.Position + " projected " + proj.PlayerPositionsByUID[player.UID]);
            }
        }
Ejemplo n.º 4
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            if (Application.isPlaying && GUILayout.Button("Check final positions"))
            {
                NetworkGameMaster PlayerTester = (NetworkGameMaster)target;
                PrintEventQueue(PlayerTester);
            }

            if (Application.isPlaying && GUILayout.Button("Print hashcode"))
            {
                NetworkGameMaster PlayerTester = (NetworkGameMaster)target;
                PrintHash(PlayerTester);
            }
        }
Ejemplo n.º 5
0
        public IEvent ApplyMod(DoPlayerInputMod c)
        {
            // Record old value
            PlayerInputEvent e = new PlayerInputEvent {
                Direction   = c.direction,
                PlayerUID   = uid,
                OldPosition = position
            };

            // Apply command
            position += NetworkGameMaster.DirectionToMovement(c.direction);
            position  = new Vector2(Mathf.Clamp(position.x, -1, 1), Mathf.Clamp(position.y, -1, 1));

            // Record new value
            e.NewPosition = position;

            return(e);
        }
Ejemplo n.º 6
0
        public static IEvent ApplyMod(EntityManager EM, CreatePlayerMod c)
        {
            NetworkGameMaster  NetworkTester = GameObject.FindObjectOfType <NetworkGameMaster>();
            PlayerEntity       player;
            PlayerCreatedEvent e = new PlayerCreatedEvent();

            // Apply command
            player = EM.GetRegistry <PlayerRegistry>().NewEntity();
            player.PlayerComponent     = GameObject.Instantiate(NetworkTester.PlayerTemplate.gameObject).GetComponent <PlayerComponent>();
            player.PlayerComponent.UID = player.UID;
            e.PlayerUID      = player.uid;
            e.PlayerPhotonID = c.PlayerPhotonID;

            if (NetworkTester.CurrentPlayer == null && PhotonNetwork.player.ID == c.PlayerPhotonID)
            {
                NetworkTester.CurrentPlayer = player;
            }

            return(e);
        }