Ejemplo n.º 1
0
        public override bool CheckRule(ElementGridEntity entity, PipelineEngine engine)
        {
            if (entity == null)
            {
                return(true);
            }

            var moveElementCoordsList = new List <MoveElementCoordsModel>();

            foreach (var moveElement in FindDropElements(entity.Grid))
            {
                moveElementCoordsList.Add(moveElement);
            }

            if (moveElementCoordsList.Count == 0)
            {
                return(false);
            }

            var moveElementEntity = new MoveElementEntity(entity, moveElementCoordsList);

            new LambdaPipelineStage <MoveElementEntity>(engine, t => t, moveElementEntity, this, "Add MoveElementEntity to sate");
            return(true);
        }
Ejemplo n.º 2
0
        public override bool CheckRule(ElementGridEntity entity, PipelineEngine engine)
        {
            if (entity == null)
            {
                return(true);
            }

            if (engine.InputFacade.MouseDown == engine.InputFacade.MouseUp)
            {
                return(false);
            }

            if (engine.InputFacade.MouseDown.X >= entity.Grid.GetLength(0))
            {
                return(false);
            }

            if (engine.InputFacade.MouseDown.X < 0)
            {
                return(false);
            }

            if (engine.InputFacade.MouseDown.Y >= entity.Grid.GetLength(1))
            {
                return(false);
            }

            if (engine.InputFacade.MouseDown.Y < 0)
            {
                return(false);
            }

            var moveDirection = MouseMoveCoordsToDirecting(engine.InputFacade.MouseDown, engine.InputFacade.MouseUp);
            var endCoords     = engine.InputFacade.MouseDown + moveDirection;

            if (endCoords.X < 0)
            {
                return(false);
            }

            if (endCoords.Y < 0)
            {
                return(false);
            }

            if (endCoords.Y >= entity.Grid.GetLength(1))
            {
                return(false);
            }

            if (endCoords.X >= entity.Grid.GetLength(0))
            {
                return(false);
            }

            var startMoveElement = entity.Grid[engine.InputFacade.MouseDown.X, engine.InputFacade.MouseDown.Y];

            if (startMoveElement.Name == GameElementType.Empty)
            {
                return(false);
            }

            var endMoveElement = entity.Grid[endCoords.X, endCoords.Y];

            if (moveDirection == FieldCoords.top)
            {
                if (endMoveElement.Name == GameElementType.Empty)
                {
                    return(false);
                }
            }

            var moveElementCoordsList = new List <MoveElementCoordsModel>
            {
                new MoveElementCoordsModel(engine.InputFacade.MouseDown, endCoords)
            };
            var moveElementEntity = new MoveElementEntity(entity, moveElementCoordsList);

            new LambdaPipelineStage <MoveElementEntity>(engine, t => t, moveElementEntity, this, "Add MoveElementEntity to sate");

            return(true);
        }