Exemple #1
0
        private Frame ResolveAction(Message message, Frame frame = null)
        {
            if (frame == null)
            {
                frame = new Frame();
            }

            if (frame.IsValid && message != null)
            {
                switch (message.Type)
                {
                case (GameConstants.MOVEMENT):
                {
                    var target              = Mobiles.WithName(message.Name);
                    var targetLocation      = message.To.ToPoint();
                    var mobileCollisionInfo = Mobiles.CollisionDetection(target, targetLocation);
                    var staticCollisionInfo = Statics.CollisionDetection(target, targetLocation);

                    frame.IsValid = target.IsActive && !(mobileCollisionInfo.Collision || staticCollisionInfo.Collision);
                    if (!frame.IsValid)
                    {
                        return(frame);
                    }

                    foreach (var ciMessage in mobileCollisionInfo.Messages)
                    {
                        ResolveAction(ciMessage, frame);
                    }
                }
                break;
                }

                frame.FrameData.Add(message);
                frame.FrameData.AddRange(_gameMessageReactor.Select(r => r(message)).Where(m => m != null));
                return(frame);
            }
            return(frame);
        }