public async Task <CurrentBuilding> InsertCurrentBuilding(CurrentBuilding currentBuilding, City city)
        {
            _dbContext.CurrentBuildings.Add(currentBuilding);
            city.CurrentBuilding = currentBuilding;
            await _dbContext.SaveChangesAsync();

            return(currentBuilding);
        }
        public async Task <CurrentBuilding> UpdateCurrentBuilding(CurrentBuilding currentBuilding)
        {
            var oldBuilding = await GetCurrentBuildingAsync(currentBuilding.Id);

            _dbContext.Entry(oldBuilding).CurrentValues.SetValues(currentBuilding);
            await _dbContext.SaveChangesAsync();

            return(currentBuilding);
        }
Esempio n. 3
0
        /// <summary>
        /// Draw subprogram for <see cref="World"/> object
        /// </summary>
        /// <param name="spriteBatch">SpriteBatch to draw sprites</param>
        public void Draw(SpriteBatch spriteBatch)
        {
            // Drawing appropriate data, depending whether the player is inside or outside
            if (!IsInside)
            {
                // Drawing the various loaded chunks of the world
                for (int y = 0; y < CHUNK_COUNT; ++y)
                {
                    for (byte x = 0; x < CHUNK_COUNT; ++x)
                    {
                        loadedChunks[x, y].Draw(spriteBatch);
                    }
                }

                // Drawing the outsides of various buildings
                for (int i = 0; i < buildings.Count; ++i)
                {
                    buildings[i].DrawOutside(spriteBatch);
                }
            }
            else
            {
                // Drawing the current building the player is in
                CurrentBuilding.DrawInside(spriteBatch);
            }

            // Drawing projectiles
            for (byte i = 0; i < projectiles.Count; ++i)
            {
                projectiles[i].Draw(spriteBatch);
            }

            // Drawing live items
            for (short i = 0; i < liveItems.Count; ++i)
            {
                liveItems[i].Draw(spriteBatch);
            }

            // Drawing enemies
            if (!IsInside)
            {
                for (short i = 0; i < enemies.Count; ++i)
                {
                    enemies[i].Draw(spriteBatch);
                }
            }
            else if (CurrentBuilding is Dungeon)
            {
                for (int i = 0; i < DungeonEnemies.Count; i++)
                {
                    DungeonEnemies[i].Draw(spriteBatch);
                }
            }
        }
        private void AddFloor()
        {
            if (CurrentBuilding == null)
            {
                return;
            }
            var floor = new Floor(CurrentBuilding);

            CurrentBuilding.AddFloor(floor);
            CurrentBuilding.CurrentFloor = floor;
            SelectedEntity = floor;
        }
        public async Task BuyBuilding(int userId, BuildingTypes buildingType)
        {
            var player = await _dbContext.Players
                         .Include(p => p.Stock)
                         .Include(p => p.City)
                         .ThenInclude(c => c.CurrentBuilding)
                         .Include(p => p.City)
                         .ThenInclude(c => c.CityBuildings)
                         .ThenInclude(cb => cb.Building)
                         .Where(p => p.UserId == userId)
                         .SingleOrDefaultAsync();

            var cost = player.City.CityBuildings
                       .Where(cb => cb.Building.Type == buildingType)
                       .Select(cb => new { cb.Building.PearlCost, cb.Building.StoneCost })
                       .FirstOrDefault();

            if (player.City.CurrentBuilding != null)
            {
                throw new GeneralGameException($"Nem építhetsz, több mint egy épületet egyszerre!");
            }

            if (player.Stock.PearlAmount < cost.PearlCost)
            {
                throw new GeneralGameException("Nincs elég gyöngyöd, hogy megépítsd ezt az épületet!");
            }
            if (player.Stock.StoneAmount < cost.StoneCost)
            {
                throw new GeneralGameException("Nincs elég köved ennek az épületnek a megépítéséhez!");
            }
            else
            {
                await _stockService.ReducePearl(player.Stock, cost.PearlCost);

                await _stockService.ReduceStone(player.Stock, cost.StoneCost);
            }

            var currentBuilding = new CurrentBuilding
            {
                BuildingType = buildingType,
                CityId       = player.City.Id,
                TurnNeed     = TIME_TO_BUILD_BUILDING
            };

            await InsertCurrentBuilding(currentBuilding, player.City);
        }
Esempio n. 6
0
        private void UpdateBuilding()
        {
            IBuilding b = town.IsHumanInBuilding(this);

            if ((CurrentBuilding == null) && (b != null))
            {
                b.AddHuman(this);
                CurrentBuilding = b;
                return;
            }

            if ((CurrentBuilding != null) && (b == null))
            {
                CurrentBuilding.RemoveHuman(this);
                CurrentBuilding = null;
                return;
            }
        }
        public MainWindowViewModel()
        {
            ExitCommand                 = new RelayCommand(param => App.Current.Shutdown());
            AddBuildingCommand          = new RelayCommand(param => this.AddBuilding());
            AddFloorCommand             = new RelayCommand(param => this.AddFloor(), param => CurrentBuilding != null);
            RemoveSelectedEntityCommand = new RelayCommand(param => this.RemoveSelectedEntity(), param => CanRemoveSelectedEntity());
            CalculateBlockageEvacuationRoutesCommand = new RelayCommand(param => CurrentBuilding.CalculateBlockageEvacuationRoutes(), param => CurrentBuilding != null);
            CalculateFireRiskCommand          = new RelayCommand(param => CurrentBuilding.CalculateFireRisk(), param => CurrentBuilding != null);
            ComposeReportCommand              = new RelayCommand(param => CurrentBuilding.ComposeReport(), param => CurrentBuilding != null);
            SaveBuldingCommand                = new RelayCommand(param => SaveBuilding(), param => CurrentBuilding != null);
            LoadBuildingCommand               = new RelayCommand(param => LoadBuilding());
            AddFloorsConnectionSectionCommand = new RelayCommand(p => AddFloorsConnectionSection(), p => CanAddFloorsConnectionSection());

            Buildings = new ObservableCollection <Building>();

            Mode = ActionMode.Move;
            AddBuilding();
        }
        public async Task UpdateCurrentBuilding(City city, CurrentBuilding currentBuilding)
        {
            currentBuilding.TurnNeed--;
            if (currentBuilding.TurnNeed > 0)
            {
                await UpdateCurrentBuilding(currentBuilding);
            }
            else
            {
                var cityBuilding = city.CityBuildings
                                   .Where(cb => cb.Building.Type == currentBuilding.BuildingType)
                                   .SingleOrDefault();

                cityBuilding.NumberOfBuildings++;
                await _dbContext.SaveChangesAsync();
                await DeleteCurrentBuilding(currentBuilding.Id, city);
            }
        }
        private void RemoveSelectedEntity()
        {
            Mode = ActionMode.Remove;
            if (SelectedEntity == null)
            {
                return;
            }

            if (SelectedEntity is Building)
            {
                var index = Buildings.IndexOf(SelectedEntity as Building);
                Buildings.Remove(SelectedEntity as Building);

                if (index >= Buildings.Count - 1)
                {
                    CurrentBuilding = Buildings.LastOrDefault();
                }
                else
                {
                    CurrentBuilding = Buildings[index];
                }

                SelectedEntity = CurrentBuilding;
                return;
            }

            if (SelectedEntity is Floor)
            {
                CurrentBuilding.RemoveFloor(SelectedEntity as Floor);
                CurrentFloor   = CurrentBuilding.CurrentFloor;
                SelectedEntity = CurrentFloor;
                return;
            }

            CurrentFloor.RemoveObject(SelectedEntity);
            SelectedEntity = CurrentFloor.Objects.FirstOrDefault();
            if (SelectedEntity == null)
            {
                SelectedEntity = CurrentFloor;
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Update subprogram for <see cref="World"/>
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values</param>
        public void Update(GameTime gameTime)
        {
            // Shifting chunk and loading chunks if needed, if current chunk is not centered
            if (Player.Instance.CurrentChunk != loadedChunks[CHUNK_COUNT / 2, CHUNK_COUNT / 2].Position)
            {
                AdjustLoadedChunks(Player.Instance.CurrentChunk);
            }

            // Updating current building if inside a building
            if (IsInside)
            {
                CurrentBuilding.Update(gameTime);
            }

            // Generating enemies every 3s
            enemyGenerationTimer += gameTime.ElapsedGameTime.Milliseconds / 1000.0f;
            if (enemyGenerationTimer > ENEMY_GENERATE_TIME)
            {
                chunkBounaryID = SharedData.RNG.Next(chunkBoundaries.Length);

                if (!GetTileAt(chunkBoundaries[chunkBounaryID] + Player.Instance.CurrentChunk).OutsideObstructState)
                {
                    enemies.Add(Enemy.RandomEnemy(chunkBoundaries[chunkBounaryID] + Player.Instance.CurrentTile, false));
                }
                enemyGenerationTimer = 0;
            }

            // Updating enemies
            if (!IsInside)
            {
                for (int i = enemies.Count - 1; i >= 0; --i)
                {
                    enemies[i].Update(gameTime);

                    // Removing enemies if they die and giving player corresponding loot
                    if (!enemies[i].Alive)
                    {
                        Player.Instance.Experience += enemies[i].Experience;
                        Player.Instance.Gold       += enemies[i].Gold;
                        AddItems(enemies[i].HitBox, enemies[i].LootTable);
                        enemies.RemoveAt(i);
                    }
                }
            }
            else
            {
                // Updating dungeon enemies
                for (int i = DungeonEnemies.Count - 1; i >= 0; --i)
                {
                    DungeonEnemies[i].Update(gameTime);

                    // Removing enemies if they die and giving player corresponding loot
                    if (!DungeonEnemies[i].Alive)
                    {
                        Player.Instance.Experience += DungeonEnemies[i].Experience;
                        Player.Instance.Gold       += DungeonEnemies[i].Gold;
                        AddItems(DungeonEnemies[i].HitBox, DungeonEnemies[i].LootTable);
                        DungeonEnemies.RemoveAt(i);
                    }
                }
            }

            // Updating the projectiles and collision info in the world
            for (int i = projectiles.Count - 1; i >= 0; --i)
            {
                projectiles[i].Update(gameTime);

                // Removing projectiles if they are not active
                if (!projectiles[i].Active)
                {
                    projectiles.RemoveAt(i);
                    continue;
                }

                // Inflicting damage and removing projectile if it hits a enemy
                if (IsInside)
                {
                    hitEnemies.AddRange(collisionTree.GetCollisions(projectiles[i].HitBox, DungeonEnemies));
                }
                else
                {
                    hitEnemies = collisionTree.GetCollisions(projectiles[i].HitBox, enemies);
                }

                // Inflicting damage on enemies that are hit by the projectile and removing the projectile
                for (int j = 0; j < hitEnemies.Count; ++j)
                {
                    hitEnemies[j].Health -= projectiles[i].DamageAmount;
                }
                if (hitEnemies.Count > 0)
                {
                    projectiles.RemoveAt(i);
                }
            }

            // Updating live items
            for (int i = liveItems.Count - 1; i >= 0; --i)
            {
                liveItems[i].Update(gameTime);

                // Removing item if it despawns
                if (!liveItems[i].Live)
                {
                    liveItems.RemoveAt(i);
                }
            }

            // Removing enemies outside of the loaded world
            for (int i = enemies.Count - 1; i >= 0; --i)
            {
                if (!worldBoundsRect.Contains(enemies[i].HitBox))
                {
                    enemies.RemoveAt(i);
                }
            }
        }
 private bool CanAddFloorsConnectionSection()
 {
     return((ContextMenuPosition != null) &&
            !(CurrentBuilding == null || CurrentFloor == null || CurrentBuilding.GetFloorBelow(CurrentFloor) == null));
 }