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)); }