Exemple #1
0
    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();
        }
    }
Exemple #2
0
 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);
 }