Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        /// <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;
 }
Exemple #9
0
    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;
            }
        }
    }
Exemple #10
0
        public void ToStringTest()
        {
            var ob = new OperateButton(ButtonID.A, ButtonState.PRESS);

            Assert.AreEqual("PRESS A", ob.ToString());
        }