public void JsonSerializationTest() { OperateButton ob = new OperateButton(ButtonID.A, ButtonState.RELEASE); string obJson = JsonConvert.SerializeObject(ob); var obFromJson = (OperateButton)JsonConvert.DeserializeObject <CommandBase>(obJson); Assert.AreEqual(ob.TargetControlID, obFromJson.TargetControlID); Assert.AreEqual(ob.TargetState, obFromJson.TargetState); }
public void OperateButtonFromStringTest() { var orignalOB = new OperateButton(ButtonID.X, ButtonState.PRESS); var cw = new CommandWrapper(orignalOB.ToString()); Assert.IsTrue(cw.Command is OperateButton); var obFromString = (OperateButton)cw.Command; Assert.AreEqual(orignalOB.ButtonID, obFromString.ButtonID); Assert.AreEqual(orignalOB.TargetState, obFromString.TargetState); }
/// <summary> /// Initializes a new instance by parsing a string, that is a return value of ICommand.ToString() method. /// If commandString is not parsable, throws ArgumentException. /// This constructor is for enabling copy / paste functionality on MacroDesigner. /// </summary> /// <param name="commandString">A return value of ICommand.ToString() method</param> public CommandWrapper(string commandString) { string CleanCommaAndParenthesis(string s) => s.Replace(",", "").Replace("(", "").Replace(")", ""); ArgumentException ae = new ArgumentException("Failed to parse parameter.", "commandToString"); CommandBase command; try { string[] elements = commandString.Split(' '); string head = elements[0]; if (head == "Wait") { command = new Wait(int.Parse(elements[1])); } else if (head == "PRESS" || head == "RELEASE") { command = new OperateButton( (ButtonID)Enum.Parse(typeof(ButtonID), elements[1]), head == "PRESS" ? ButtonState.PRESS : ButtonState.RELEASE); } else if (head == "LSTICK" || head == "RSTICK") { command = new OperateStick( head == "LSTICK" ? StickID.LSTICK : StickID.RSTICK, byte.Parse(CleanCommaAndParenthesis(elements[1])), byte.Parse(CleanCommaAndParenthesis(elements[2])) ); } else { throw ae; } } catch (Exception) { throw ae; } this.Command = command; }
TouchInputProvider( TouchOperation touch, // IDは各ボタンのZenjectBindingコンポーネントにて指定 この場合はenum使えない? [Inject(Id = "Shot")] OperateButton shotButton, [Inject(Id = "Throw")] OperateButton throwButton, [Inject(Id = "Bomb")] OperateButton bombButton, [Inject(Id = "Menu")] OperateButton menuButton, SlideArea slide) { this.touch = touch; this.shotButton = shotButton; this.throwButton = throwButton; this.bombButton = bombButton; this.menuButton = menuButton; this.slideArea = slide; // ShotはuGUIボタン操作 押しっぱなし中操作を発行 this.shotButton.OnButton .Where(info => true == info.Down) .Subscribe(push => onShotSubject.OnNext(true)); // Shotの離され操作も監視 this.shotButton.OnButton .DistinctUntilChanged(info => info.Down) .Where(info => false == info.Down) .Subscribe(_ => onShotSubject.OnNext(false)); // ThrowはuGUIボタン操作 押され→離されを検出して操作を発行 this.throwButton.OnButton .DistinctUntilChanged(info => info.Down) .Subscribe(info => { if (info.Down) // 押された初期位置を保持 { if (Vector2.zero == throwBegin) { throwBegin = info.Position; } } else // 離されたら押され位置との角度で投げ操作を発行 { if (Vector2.zero != throwBegin) { onThrowSubject.OnNext(ThrowAngle(throwBegin, info.Position)); throwBegin = Vector2.zero; // 初期化 } } }); // BombはuGUIボタン操作 離されたのがボタン上だったら操作を発行 this.bombButton.OnButton .DistinctUntilChanged(info => info.Down) .Where(info => false == info.Down) .Subscribe(info => { // 離され位置がBombボタン上かどうか if (true == CheckOnObject(info.Position, bombButton.gameObject)) { onBombSubject.OnNext(Unit.Default); } }); // MenuはuGUIボタン操作 離されたのがボタン上だったら操作を発行 this.menuButton.OnButton .DistinctUntilChanged(info => info.Down) .Where(info => false == info.Down) .Subscribe(info => { // 離され位置がMenuボタン上かどうか if (true == CheckOnObject(info.Position, menuButton.gameObject)) { onMenuSubject.OnNext(Unit.Default); } }); // Speed変更操作 Drag情報(Vector2)をボタンサイズに対する水平方向の移動割合として発行 this.slideArea.OnSlide .Subscribe(delta => { Rect area = slideArea.GetComponent <RectTransform>().rect; onSpeedEditSubject.OnNext(delta.x / area.width); }); // 移動はタッチ操作 // 初期化 moveTouch.position = Vector2.zero; moveTouch.phase = TouchPhase.Canceled; moveTouch.fingerId = -1; this.touch.OnTouch //.DistinctUntilChanged() // 情報が変わったときのみ(使えるか?) .Skip(1) .Subscribe(touchInfo => { MoveInfo moveInfo = default; if (CheckMoveTouch(touchInfo, ref moveInfo)) { onMovePlayerSubject.OnNext(moveInfo); } }); }
private void RotateButton_Click(object sender, System.Windows.RoutedEventArgs e) { OnRotate(); // TODO: Add event handler implementation here. this.OperateButton = OperateButton.Rotate; }
private void ZoomButton_Click(object sender, System.Windows.RoutedEventArgs e) { OnZoom(); this.OperateButton = OperateButton.Zoom; }
private void CloseButton_Click(object sender, System.Windows.RoutedEventArgs e) { OnClose(); this.OperateButton = OperateButton.Close; }
private void MoveButton_Click(object sender, System.Windows.RoutedEventArgs e) { OnMove(); this.OperateButton = OperateButton.Move; }
public void TryChangeSprite(OperateButton btn) { var block = target as MapBlock; if (block.MapData == null) { Debug.LogError("MapData is null!"); return; } if (btn == OperateButton.Row) { if (line < 0 || line >= block.MapData.RowCount) { Debug.LogError("input number less than zero or more/equals than row"); return; } } else if (btn == OperateButton.Column) { if (line < 0 || line >= block.MapData.ColumnCount) { Debug.LogError("input number less than zero or more/equals than column"); return; } } else if (btn == OperateButton.SetLine || btn == OperateButton.SetLine) { if (x0 < 0 || y0 < 0 || x0 >= block.MapData.ColumnCount || y0 >= block.MapData.ColumnCount || x1 < 0 || y1 < 0 || x1 >= block.MapData.ColumnCount || y1 >= block.MapData.ColumnCount) { Debug.LogError("input number less than zero or more/equals than column"); return; } if (!(x0 == x1 || y0 == y1)) { Debug.LogError("input number must be a line"); return; } } SpriteRenderer[] sprites = null; if (btn == OperateButton.Row) { var parent = block.transform.Find(MapPrefabEditor.mapParentName + line); if (parent) { sprites = parent.GetComponentsInChildren <SpriteRenderer>(true); } } else if (btn == OperateButton.Column) { var tempSprites = block.GetComponentsInChildren <SpriteRenderer>(true); string equalStr = "_" + line; sprites = tempSprites.Where(x => { var name = x.transform.name; return(name.LastIndexOf(equalStr, StringComparison.Ordinal) + equalStr.Length == name.Length); }).ToArray(); } else if (btn == OperateButton.All || btn == OperateButton.AllClear) { var tempSprites = block.GetComponentsInChildren <SpriteRenderer>(true); sprites = tempSprites .Where(x => x.transform.name.IndexOf(MapPrefabEditor.mapTileName, StringComparison.Ordinal) == 0) .ToArray(); } else if (btn == OperateButton.SetLine || btn == OperateButton.ClearLine) { var tempSprites = block.GetComponentsInChildren <SpriteRenderer>(true); List <SpriteRenderer> spriteList = new List <SpriteRenderer>(); int maxX, minX; if (x0 >= x1) { maxX = x0; minX = x1; } else { maxX = x1; minX = x0; } int maxY, minY; if (y0 >= y1) { maxY = y0; minY = y1; } else { maxY = y1; minY = y0; } foreach (var item in tempSprites) { var names = item.name.Split('_'); if (names.Length == 3) { int y = int.Parse(names[1]); int x = int.Parse(names[2]); if (minX <= x && x <= maxX && minY <= y && y <= maxY) { spriteList.Add(item); } } } sprites = spriteList.ToArray(); } Undo.RecordObjects(sprites, "ChangeSprites"); Sprite replaceSpr = null; if (btn != OperateButton.AllClear || btn != OperateButton.ClearLine) { replaceSpr = sprite; } if (sprites != null && sprites.Length > 0) { foreach (var spr in sprites) { spr.sprite = replaceSpr; } } }
public void ToStringTest() { var ob = new OperateButton(ButtonID.A, ButtonState.PRESS); Assert.AreEqual("PRESS A", ob.ToString()); }