예제 #1
0
    protected override IEnumerator Run(MainSystem sys)
    {
        Item item = _fieldItem.Item;

        sys.RemoveFieldItem(_fieldItem);
        yield return(item.Use(Actor, sys));
    }
예제 #2
0
    protected override IEnumerator Run(MainSystem sys)
    {
        // FieldItem を削除して作り直す。
        Item item = _fieldItem.Item;

        sys.RemoveFieldItem(_fieldItem);

        var fitem = FieldItemFactory.CreateFromItem(item, _player.Loc);

        fitem.BringToFront();

        Vector3 src      = _player.Loc.ToPosition();
        Vector3 dst      = _targetLoc.ToPosition();
        float   speed    = _player.Dir.IsDiagonal() ? Config.ItemThrowDiagonalSpeed : Config.ItemThrowSpeed;
        float   duration = Vector3.Distance(src, dst) / speed;

        yield return(CAction.Lerp(duration, src, dst, pos => {
            fitem.Position = pos;
        }));

        fitem.ResetZOrder();

        if (_target == null)   // 床に落とす
        {
            sys.FallItemToFloor(_fallLoc, fitem);
        }
        else   // ターゲットにヒット
               // TODO:ヒット判定
        {
            fitem.Destroy();
            yield return(fitem.Item.Hit(_player, _target, sys));
        }
    }
예제 #3
0
    public override void OnFinished(MainSystem sys)
    {
        Loc prevLoc = _player.Loc;

        Actor.UpdateLoc(_nextLoc);

        Room prev = sys.FindRoom(prevLoc);
        Room next = sys.FindRoom(_nextLoc);

        Debug.LogFormat("--> {0} -> {1}", prevLoc, _nextLoc);

        if (prev != null && next != null)   // 部屋内の移動
        {
            sys.OnRoomMoved(next, _nextLoc);
        }
        if (prev == null && next != null)   // 部屋に入った
        {
            sys.OnRoomEntered(next, _nextLoc);
        }
        else if (prev != null && next == null)   // 部屋から通路に出た
        {
            sys.OnRoomExited(prev, _nextLoc);
        }
        else
        {
            sys.OnPassageMoved(_nextLoc); // 通路を移動した
        }

        if (_fieldItem != null)
        {
            Item item = _fieldItem.Item;
            sys.Msg_TakeItem(item);
            if (item.Type == ItemType.Gold)
            {
                sys.IncGold(100);
            }
            else
            {
                // TODO:持ち物がいっぱいなら拾えない
                _player.AddItem(item);
            }
            sys.RemoveFieldItem(_fieldItem);
        }

        sys.UpdateMinimap();
    }
예제 #4
0
    public override void OnFinished(MainSystem sys)
    {
        Debug.LogFormat("アイテムを拾いました:{0}", _fieldItem);

        // TODO:ActPlayerMoveのアイテムを拾う処理と重複
        Item item = _fieldItem.Item;

        if (item.Type == ItemType.Gold)
        {
            Debug.LogFormat("{0} G 手に入れた", 100);
            sys.IncGold(100);
        }
        else
        {
            // TODO:持ち物がいっぱいなら拾えない
            ((Player)Actor).AddItem(item);
        }
        sys.RemoveFieldItem(_fieldItem);
    }