public bool CanPutThing(LocalThing newThing) // (не помню, всё ли окей) метод, который проверяет, можно ли положить вещь вот так { bool[][] shape = newThing.Thing.Mask.Area; byte rot = newThing.Rot; int loc_x = newThing.Loc_X, loc_y = newThing.Loc_Y; if (!(shape.Length > 0 && shape[0].Length > 0)) // форма некорректна { return(false); } shape = Rotate(shape, rot); // поворот int h = shape.Length, w = shape[0].Length; // параметры формы bool fail = false; for (int i = 0; i < h; i++) // проход по форме вещи { for (int j = 0; j < w; j++) { // определение перекрытия с другими вещами if (shape[i][j] && _field[loc_y + i][loc_x + j] != null) { fail = true; break; } } if (fail) { break; } } return(!fail); }
public LocalThing TakeThing(int loc_x, int loc_y) // (надо обдумать) метод для вытаскивания вещей из сумки { LocalThing taken = TouchThing(loc_x, loc_y); if (taken == null) { return(null); } DropThing(taken); // удаление вещи из сумки return(taken); }
public void SetHand(int x, int y, LocalThing thing) // переставить руку в координаты { //if (x < 0 || y < 0) // если координаты некорректны, рука сбрасывается //{ // SetEveryHand(-1, -1); // if (_hand != null) // { // // обработать то, что в руке, куда-то (пока просто будет теряться) // _hand = null; // } // return; //} //SetEveryHand(x, y); }
private void DropThing(LocalThing thing) // удаление вещи с поля и из списка { for (int i = 0; i < _field.Count; i++) { for (int j = 0; j < _field[0].Length; j++) { if (_field[i][j].Equals(thing)) { _field[i][j] = null; } } } // my test new comment _stuff.Remove(thing); }
public LocalThing TouchThing(int loc_x, int loc_y) // отдаёт ссылку на вещь по координате { if (loc_x < 0 || loc_y < 0 || loc_x >= _w || loc_y >= _h) // отсеивание некорректных позиций { return(null); } // поиск вещи, находящейся в указанной клетке LocalThing taken = _stuff.Find(delegate(LocalThing thing) { return(thing.Equals(_field[loc_y][loc_x])); }); if (taken != null) { return(taken); } return(null); }
public static void PutOnFirstPlace(IThing thing, ref IBag bag) { int x = -1, y = -1; byte rot = 0; for (; rot < 4; rot++) { for (int i = 0; i < bag.Height; i++) { for (int j = 0; j < bag.Width; j++) { if (bag.CanPutThing(new LocalThing(thing, j, i, rot))) { x = j; y = i; break; } } if (x != -1) { break; } } if (x != -1) { break; } } LocalThing lthing = new LocalThing(thing, x, y, rot); if (x != -1) { bag.PutThing(lthing); } }
public void HighlightThis(int x, int y, LocalThing thing) { }
//public void SetAnotherBag(IBag bag) // записать ссылку на открытый сейчас контейнер //{ //_anotherBag = bag; //} public void SelectThis(int x, int y, LocalThing thing) { }
public void Take(LocalThing thing, int x, int y) { _kept = thing; _x = x; _y = y; }
public SimpleKeeper() { _x = -1; _y = -1; _kept = null; }
public bool PutThing(LocalThing newThing) // (пока не реализовано) метод, который кладёт новую вещь в определённой позиции { return(false); }