public void FallItemToFloor(Loc fallLoc, FieldItem fieldItem) { // TODO:投げたアイテムが落ちる場所は、プレイヤーに近い位置から優先的に決める var locs = new List <Loc>(); int n = 3; for (int i = -n; i <= n; i++) { for (int j = -n; j <= n; j++) { locs.Add(new Loc(fallLoc.Row + i, fallLoc.Col + j)); } } locs.Sort((a, b) => { int s = a.SquareDistance(fallLoc); int t = b.SquareDistance(fallLoc); if (s == t) { if (a.Row == b.Row) { return(a.Col.CompareTo(b.Col)); } return(a.Row.CompareTo(b.Row)); } return(s.CompareTo(t)); }); bool put = false; foreach (var loc in locs) { if (ExistsFieldItem(loc)) { continue; } if (_floor.CanPutItem(loc)) { fieldItem.UpdateLoc(loc); AddFieldItem(fieldItem); put = true; break; } } if (!put) { Debug.Log("アイテムは配置できなかった"); fieldItem.Destroy(); } }
public void RemoveFieldItem(FieldItem fieldItem) { for (int i = 0; i < _fieldItems.Count; i++) { if (_fieldItems[i].Loc == fieldItem.Loc) { Assert.IsTrue(System.Object.ReferenceEquals(_fieldItems[i], fieldItem)); fieldItem.Destroy(); _fieldItems.RemoveAt(i); return; } } Assert.IsTrue(false); }