コード例 #1
0
        protected override void OnUpdate()
        {
            if (gameStateModel == null)
            {
                return;
            }

            var time = Time.DeltaTime;

            Entities.WithStructuralChanges().ForEach(
                (Entity entity,
                 int entityInQueryIndex,
                 ref Translation translation,
                 ref BoardPositionComponent boardPositionComponent,
                 in SwappingComponent swapComponent) =>
            {
                var startPosition  = BoardCalculator.ConvertBoardPositionToTransformPosition(swapComponent.OriginBoardPosition);
                var targetPosition = BoardCalculator.ConvertBoardPositionToTransformPosition(swapComponent.TargetBoardPosition);

                var direction = targetPosition - translation.Value;

                if (math.distancesq(translation.Value, targetPosition) < 0.01f)
                {
                    boardPositionComponent = new BoardPositionComponent {
                        Position = swapComponent.TargetBoardPosition
                    };
                    boardModel.SetEntityAt(swapComponent.TargetBoardPosition.x, swapComponent.TargetBoardPosition.y, entity);
                    translation = new Translation {
                        Value = targetPosition
                    };
                    EntityManager.RemoveComponent <SwappingComponent>(entity);
                }
                else
                {
                    var velocity       = math.normalize(direction) * 7 * time;
                    translation.Value += velocity;
                }
            }).Run();
        }
コード例 #2
0
        protected override void OnUpdate()
        {
            if (gameStateModel == null || gameStateModel.State != Match3State.MatchesFall)
            {
                return;
            }

            var time = Time.DeltaTime;

            Entities.WithAll <IsFallingComponent>().WithNone <DestroyedComponent>().WithStructuralChanges().ForEach(
                (Entity entity, int entityInQueryIndex, ref BoardPositionComponent boardPositionComponent) =>
            {
                var positionUnder = new int2(boardPositionComponent.Position.x, boardPositionComponent.Position.y - 1);
                if (boardModel.IsPositionInBorders(positionUnder) && !boardModel.HasEntityAt(positionUnder))
                {
                    boardModel.ClearAt(boardPositionComponent.Position);

                    if (EntityManager.HasComponent <MoveToBoardPositionComponent>(entity) == false)
                    {
                        EntityManager.AddComponentData(entity, new MoveToBoardPositionComponent {
                            TargetPosition = positionUnder
                        });
                    }
                    else
                    {
                        EntityManager.SetComponentData(entity, new MoveToBoardPositionComponent {
                            TargetPosition = positionUnder
                        });
                    }

                    boardPositionComponent = new BoardPositionComponent {
                        Position = positionUnder
                    };
                    boardModel.SetEntityAt(positionUnder.x, positionUnder.y, entity);
                }
                else
                {
                    if (boardModel.IsPositionInBorders(positionUnder) == false)
                    {
                        EntityManager.RemoveComponent <IsFallingComponent>(entity);
                    }
                    else
                    {
                        var entityUnder = boardModel.GetEntityAt(positionUnder.x, positionUnder.y);
                        if (EntityManager.HasComponent <IsFallingComponent>(entityUnder) == false)
                        {
                            EntityManager.RemoveComponent <IsFallingComponent>(entity);
                        }
                    }
                }
            }).Run();


            Entities.WithNone <DestroyedComponent>().WithStructuralChanges().ForEach(
                (Entity entity,
                 int entityInQueryIndex,
                 ref Translation translation,
                 in BoardPositionComponent boardPositionComponent,
                 in MoveToBoardPositionComponent moveComponent) =>
            {
                var targetPosition = BoardCalculator.ConvertBoardPositionToTransformPosition(boardPositionComponent.Position);

                var direction = targetPosition - translation.Value;
                if (math.distancesq(translation.Value, targetPosition) < 0.01f || translation.Value.y < targetPosition.y)
                {
                    translation = new Translation {
                        Value = targetPosition
                    };
                    EntityManager.RemoveComponent <MoveToBoardPositionComponent>(entity);
                }
                else
                {
                    var velocity       = math.normalize(direction) * 10 * time;
                    translation.Value += velocity;
                }
            }).Run();