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); }
private void PrintHash(NetworkGameMaster p) { HashProjection proj = new HashProjection(p.ES); p.ES.ApplyProjection(proj, EventStream.AllExistingEvents); Debug.Log(proj.GenerateHashCode()); }
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]); } }
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); } }
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); }
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); }