protected override IEnumerator Run(MainSystem sys) { Item item = _fieldItem.Item; sys.RemoveFieldItem(_fieldItem); yield return(item.Use(Actor, sys)); }
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)); } }
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(); }
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); }