private void AttackPlayer(int peerId, ISceneObject sceneObject, CollisionInfo collisionInfo) { isAttacking = true; var positionTransform = sceneObject.Components.GetComponent <IPositionTransform>().AssertNotNull(); var orientation = (positionTransform.Position - collisionInfo.Position).Normalize(); direction = orientation.X < 0 ? -MOVE_DIRECTION : MOVE_DIRECTION; RaisePlayerAttacked(); void RaisePlayerAttacked() { var parameters = new PlayerAttackedEventParameters(collisionInfo.Position.X, collisionInfo.Position.Y); InterestAreaNotifier.NotifySubscriberOnly(peerId, (byte)GameEvents.PlayerAttacked, parameters, MessageSendOptions.DefaultUnreliable()); } }
private void OnPositionChanged(Vector2 position) { var body = GetBody().AssertNotNull(); body.SetXForm(position.FromVector2(), body.GetAngle()); if (Vector2.Distance(position, lastPosition) > 0.1f) { UpdatePositionForAll(); lastPosition = position; } void UpdatePositionForAll() { var direction = directionTransform.Direction.GetDirectionsFromDirection(); var parameters = new SceneObjectPositionChangedEventParameters(Id, position.X, position.Y, direction); InterestAreaNotifier.NotifySubscribers((byte)GameEvents.PositionChanged, parameters, MessageSendOptions.DefaultUnreliable((byte)GameDataChannels.Position)); } }