Exemplo n.º 1
0
        private void OnBuildingUpdate(FurnitureItem furnitureItem)
        {
            if (selectFurniture == null)
            {
                return;
            }

            //可以升级
            if (CanUpdateBuilding(furnitureItem))
            {
                //replace
                furnitureItem.TheInfo.id            = selectFurniture.TheInfo.id;
                furnitureItem.Direction             = selectFurniture.Direction;
                furnitureItem.TheInfo.furnitureType = selectFurniture.TheInfo.furnitureType;
                var posIndex = selectFurniture.PosIndex;
                SetFurnitureIndex(furnitureItem, posIndex);
                placeMgr.ReplacePlaceItem(selectFurniture, furnitureItem);
                sceneBuildings.Remove(selectFurniture);
                sceneBuildings.Add(furnitureItem);
                selectFurniture.Release();
                selectFurniture = null;
                furnitureItem.TheInfo.SetState(true, true);
            }
            else
            {
                furnitureItem.Release();
                furnitureItem = null;
            }
        }
Exemplo n.º 2
0
 private void OnBuildingLoaded(FurnitureItem furnitureItem)
 {
     buildingFurniture = furnitureItem;
     ReadyForbuild();
     InitBuildingState();
     DoBuildingCheck();
 }
Exemplo n.º 3
0
 public void RecoverSelectFurniture()
 {
     if (selectFurniture != null)
     {
         SetSelectBuildState(false, true);
         selectFurniture = null;
     }
 }
Exemplo n.º 4
0
 private void SetFurnitureIndex(FurnitureItem furniture, int index)
 {
     if (null != furniture)
     {
         furniture.PosIndex = index;
         furniture.SetPosAligned(placeMgr.GetIndexPos(index));
     }
 }
Exemplo n.º 5
0
 private bool CanDeleteBuilding(FurnitureItem furnitureItem)
 {
     if (furnitureItem.TheInfo.furnitureType == FurnitureType.ground)
     {
         //有1以上的furniture则有家具
         return(placeMgr.FurnitureCount(furnitureItem.PosIndex) <= 1);
     }
     return(true);
 }
Exemplo n.º 6
0
        public void RemovePlaceItem(FurnitureItem fi)
        {
            int posIndex = fi.PosIndex;

            if (cells.ContainsKey(posIndex))
            {
                Cell cell = cells[posIndex];
                cell.furnitures.Remove(fi);
            }
        }
Exemplo n.º 7
0
 public void SelectFurniture(FurnitureItem furnitureItem)
 {
     if (selectFurniture != null)
     {
         SetSelectBuildState(false, true);
     }
     selectFurniture = furnitureItem;
     isBuilingCreate = false;
     SetSelectBuildState(true, true);
 }
Exemplo n.º 8
0
        public int GetNearestWallIndex(FurnitureItem lastBuilding, out FurnitureDirect dir)
        {
            int x, y;

            GetIndex2D(lastBuilding.PosIndex, out x, out y);
            dir = lastBuilding.TheInfo.direction;
            switch (dir)
            {
            case FurnitureDirect.east:
                if (y == 0 || !HasFurniture(x, y - 1))
                {
                    dir = FurnitureDirect.sourth;
                }
                else
                {
                    y--;
                }
                break;

            case FurnitureDirect.sourth:
                if (x == 0 || !HasFurniture(x - 1, y))
                {
                    dir = FurnitureDirect.west;
                }
                else
                {
                    x--;
                }
                break;

            case FurnitureDirect.west:
                if (y == height - 1 || !HasFurniture(x, y + 1))
                {
                    dir = FurnitureDirect.north;
                }
                else
                {
                    y++;
                }
                break;

            case FurnitureDirect.north:
                if (x == width - 1 || !HasFurniture(x + 1, y))
                {
                    dir = FurnitureDirect.east;
                }
                else
                {
                    x++;
                }
                break;
            }

            return(y * width + x);
        }
Exemplo n.º 9
0
        private void CreateNextFurniture()
        {
            lastFurniture     = buildingFurniture;
            buildingFurniture = null;
            FurnitureInfo info = lastFurniture.TheInfo;

            if (info.furnitureType == FurnitureType.ground || info.furnitureType == FurnitureType.wall)
            {
                BuildingFurniture(lastFurniture.res, lastFurniture.Layer);
            }
        }
Exemplo n.º 10
0
        public void LoadFurnitureItem(string res, int layer, Action <FurnitureItem> onLoaded)
        {
            FurnitureItem furnitureItem = new FurnitureItem(res, layer);

            furnitureItem.Load(() =>
            {
                //sceneitems
                furnitureItem.SetParent(furnitureRoot);
                onLoaded(furnitureItem);
            });
        }
Exemplo n.º 11
0
 //放置Building,记录格子信息及场景现存列表中
 public void PlaceBuildItem(FurnitureItem furnitureItem)
 {
     placeMgr.PlaceItem(furnitureItem);
     if (furnitureItem.IsFurniture)
     {
         sceneFurnitures.Add(furnitureItem);
     }
     else
     {
         sceneBuildings.Add(furnitureItem);
     }
 }
Exemplo n.º 12
0
        public void ReplacePlaceItem(FurnitureItem orign, FurnitureItem target)
        {
            int  index = orign.PosIndex;
            Cell cell  = null;

            if (cells.ContainsKey(index))
            {
                cell = cells[index];
                cell.furnitures.Remove(orign);
                cell.furnitures.Add(target);
            }
        }
Exemplo n.º 13
0
        private bool CanUpdateBuilding(FurnitureItem furnitureItem)
        {
            if (null == selectFurniture)
            {
                return(false);
            }
            if (onBuildingUpdate != null)
            {
                return(onBuildingUpdate(furnitureItem));
            }

            return(false);
        }
Exemplo n.º 14
0
        public void RefreshSceneFurnitures(bool isBuilding)
        {
            isSelectBuilding = isBuilding;
            selectFurniture  = null;
            foreach (var furniture in sceneFurnitures)
            {
                furniture.TheInfo.SetState(true, !isBuilding);
            }

            foreach (var building in sceneBuildings)
            {
                building.TheInfo.SetState(true, isBuilding);
            }
        }
Exemplo n.º 15
0
        public void PlaceItem(FurnitureItem fi)
        {
            int  index = fi.PosIndex;
            Cell cell  = null;

            if (cells.ContainsKey(index))
            {
                cell = cells[index];
            }
            else
            {
                cell = new Cell(index);
                cells.Add(index, cell);
            }
            cell.furnitures.Add(fi);
        }
Exemplo n.º 16
0
        public void CancelBuilding()
        {
            colliderFurnitures.Clear();
            if (buildingFurniture == null)
            {
                return;
            }
            if (isBuilingCreate)
            {
                buildingFurniture.Release();
            }

            isBuilingCreate   = false;
            buildingFurniture = null;
            lastFurniture     = null;
        }
Exemplo n.º 17
0
        public void DeleteSelectBuilding()
        {
            colliderFurnitures.Clear();
            if (selectFurniture == null || isBuilingCreate)
            {
                return;
            }

            isBuilingCreate = false;
            if (onBuildingDelete != null)
            {
                onBuildingDelete(selectFurniture.TheInfo.id);
            }
            placeMgr.RemovePlaceItem(selectFurniture);
            selectFurniture.Release();
            selectFurniture = null;
        }
Exemplo n.º 18
0
 public void CompleteFurniture()
 {
     if (CanPlaceFurniture(buildingFurniture))
     {
         colliderFurnitures.Clear();
         buildingFurniture.IsBuilding = false;
         SetBuildingState(true);
         buildingFurniture.PosIndex = placeMgr.GetPosIndex(buildingFurniture.GetPos());
         PlaceBuildItem(buildingFurniture);
         bool canCreateNext = CompletePlaced();
         if (isBuilingCreate && canCreateNext)
         {
             CreateNextFurniture();
         }
         else
         {
             isBuilingCreate   = false;
             buildingFurniture = null;
             lastFurniture     = null;
         }
     }
 }
Exemplo n.º 19
0
 /// <summary>
 /// LoadfurnitureItem数据,填入到placeItem中
 /// </summary>
 /// <param name="furnitureItem"></param>
 public static void AddPlaceItem(FurnitureItem furnitureItem)
 {
     BuilderHelper.Instance.PlaceBuildItem(furnitureItem);
 }
Exemplo n.º 20
0
 public static void SelectFurniture(FurnitureItem furnitureItem)
 {
     BuilderHelper.Instance.SelectFurniture(furnitureItem);
 }
Exemplo n.º 21
0
 public static void LocFurnitureItem(FurnitureItem furnitureItem, int dir, int index)
 {
     BuilderHelper.Instance.LocFurniture(furnitureItem, dir, index);
 }
Exemplo n.º 22
0
        private bool CanPlaceFurniture(FurnitureItem furniture)
        {
            if (null == furniture || ObstacleCollider > 0)
            {
                return(false);
            }
            FurnitureInfo fi           = furniture.TheInfo;
            bool          canPlaceItem = false;

            switch (fi.furnitureType)
            {
            case FurnitureType.wall:
                foreach (var temp in colliderFurnitures)
                {
                    if (temp.furnitureType == FurnitureType.wall)
                    {
                        int tempNum = temp.direction - fi.direction;
                        if (tempNum % 2 == 0)
                        {
                            return(false);
                        }
                    }

                    if (temp.furnitureType == FurnitureType.ground)
                    {
                        canPlaceItem = fi.layer >= temp.layer;
                    }
                }
                break;

            case FurnitureType.ground:
                foreach (var temp in colliderFurnitures)
                {
                    if (temp.furnitureType == FurnitureType.ground || temp.furnitureType == FurnitureType.furniture)
                    {
                        return(false);
                    }
                }

                canPlaceItem = true;
                break;

            case FurnitureType.furniture:
                int floorCount = 0;
                foreach (var temp in colliderFurnitures)
                {
                    if (temp.furnitureType == FurnitureType.furniture || temp.furnitureType == FurnitureType.wall)
                    {
                        return(false);
                    }

                    if (temp.furnitureType == FurnitureType.ground)
                    {
                        if (fi.layer > temp.layer)
                        {
                            return(false);
                        }
                        floorCount++;
                    }
                }
                canPlaceItem = (fi.furnitureSpace <= floorCount);
                break;
            }
            return(canPlaceItem);
        }
Exemplo n.º 23
0
 //lua端设置位置
 public void LocFurniture(FurnitureItem fi, int dir, int index)
 {
     fi.Direction = dir;
     SetFurnitureIndex(fi, index);
 }