예제 #1
0
파일: Bag.cs 프로젝트: IrizGem/Inventory
        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);
        }
예제 #2
0
파일: Bag.cs 프로젝트: IrizGem/Inventory
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
파일: Bag.cs 프로젝트: IrizGem/Inventory
        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);
        }
예제 #5
0
파일: Bag.cs 프로젝트: IrizGem/Inventory
        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);
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
 public void HighlightThis(int x, int y, LocalThing thing)
 {
 }
예제 #8
0
        //public void SetAnotherBag(IBag bag) // записать ссылку на открытый сейчас контейнер
        //{
        //_anotherBag = bag;
        //}

        public void SelectThis(int x, int y, LocalThing thing)
        {
        }
예제 #9
0
 public void Take(LocalThing thing, int x, int y)
 {
     _kept = thing;
     _x    = x;
     _y    = y;
 }
예제 #10
0
 public SimpleKeeper()
 {
     _x    = -1;
     _y    = -1;
     _kept = null;
 }
예제 #11
0
파일: Bag.cs 프로젝트: IrizGem/Inventory
 public bool PutThing(LocalThing newThing) // (пока не реализовано) метод, который кладёт новую вещь в определённой позиции
 {
     return(false);
 }