示例#1
0
    public static MoveCubeCommand BuildFromString(string command)
    {
        MoveCubeCommand temp = null;

        string[] vars = command.Split(Delimter);
        if (vars.Length == 3)
        {
            var trigger = TriggerManager.StringToTrigger.ContainsKey(vars[0]) ?
                          TriggerManager.StringToTrigger[vars[0]] :
                          TriggerManager.GetEmptyTrigger();
            var shuffling = vars[1].Equals("1");
            var direction = _stringToDirection.ContainsKey(vars[2]) ? _stringToDirection[vars[2]] : Vector3.zero;
            temp = new MoveCubeCommand(trigger, direction, shuffling);
        }
        return(temp);
    }
    private void ShuffleCube()
    {
        var random    = Random.Range(Consts.RIGHT_OF_CUBE_LAYER, Consts.BACK_OF_CUBE_LAYER);
        var clockwise = (random % 2) == 0;
        var xAxis     = (Random.Range(1, 2) % 2) == 1;
        SelectionTriggerController trigger = TriggerManager.GetEmptyTrigger();
        Vector3 direction = Vector3.zero;

        if (xAxis)
        {
            if (random != Consts.TOP_OF_CUBE_LAYER && random != Consts.BOTTOM_OF_CUBE_LAYER)
            {
                trigger   = TriggerManager.GetRandomTrigger(Consts.X_TRIGGER_AXIS);
                direction = Vector3.up;
            }
            else
            {
                if ((Random.Range(1, 2) % 2) == 1)
                {
                    trigger   = TriggerManager.GetRandomTrigger(Consts.Y_TRIGGER_AXIS);
                    direction = Vector3.right;
                }
                else
                {
                    trigger   = TriggerManager.GetRandomTrigger(Consts.Z_TRIGGER_AXIS);
                    direction = Vector3.forward;
                }
            }
        }
        else
        {
            switch (random)
            {
            case Consts.FRONT_OF_CUBE_LAYER:
                trigger   = TriggerManager.GetRandomTrigger(Consts.Y_TRIGGER_AXIS);
                direction = Vector3.right;
                break;

            case Consts.RIGHT_OF_CUBE_LAYER:
                trigger   = TriggerManager.GetRandomTrigger(Consts.Z_TRIGGER_AXIS);
                direction = Vector3.back;
                break;

            case Consts.TOP_OF_CUBE_LAYER:
            case Consts.BOTTOM_OF_CUBE_LAYER:
                var angle = Random.Range(1, 3);
                // Rotating from the front
                if (angle == 1)
                {
                    trigger   = TriggerManager.GetRandomTrigger(Consts.Y_TRIGGER_AXIS);
                    direction = Vector3.right;
                }
                // Rotating from the side
                else if (angle == 2)
                {
                    trigger   = TriggerManager.GetRandomTrigger(Consts.Z_TRIGGER_AXIS);
                    direction = (Random.Range(1, 2) % 2) == 0 ? Vector3.forward : Vector3.back;
                }
                // Rotating from the back
                else
                {
                    trigger   = TriggerManager.GetRandomTrigger(Consts.Y_TRIGGER_AXIS);
                    direction = Vector3.left;
                }
                break;

            case Consts.LEFT_OF_CUBE_LAYER:
                trigger   = TriggerManager.GetRandomTrigger(Consts.Z_TRIGGER_AXIS);
                direction = Vector3.forward;
                break;

            case Consts.BACK_OF_CUBE_LAYER:
                trigger   = TriggerManager.GetRandomTrigger(Consts.Y_TRIGGER_AXIS);
                direction = Vector3.left;
                break;

            default:
                break;
            }
        }
        if (clockwise)
        {
            direction *= -1;
        }
        _commandManager.Move(new MoveCubeCommand(trigger, direction, true));
    }