예제 #1
0
        public Task <bool> SaveChangesAsync()
        {
            return(Task.Run(() =>
            {
                if (FilmsToAdd.Count() <= 0 && ActorsToAdd.Count() <= 0 &&
                    DirectorsToAdd.Count() <= 0 && FilmsToDelete.Count() <= 0 &&
                    ActorsToDelete.Count() <= 0 && DirectorsToDelete.Count() <= 0)
                {
                    return false;
                }

                foreach (var film in FilmsToAdd)
                {
                    film.Id = Films.Count() + 1;
                    Films.Add(film);
                }
                foreach (var actor in ActorsToAdd)
                {
                    actor.Id = Actors.Count() + 1;
                    Actors.Add(actor);
                }
                foreach (var director in DirectorsToAdd)
                {
                    director.Id = Directors.Count() + 1;
                    Directors.Add(director);
                }

                foreach (var film in FilmsToDelete)
                {
                    var filmInList = Films.Where(f => f.Id == film.Id).FirstOrDefault();
                    Films.Remove(filmInList);
                }
                foreach (var actor in ActorsToDelete)
                {
                    var actorInList = Actors.Where(f => f.Id == actor.Id).FirstOrDefault();
                    Actors.Remove(actorInList);
                }
                foreach (var director in DirectorsToDelete)
                {
                    var directorInList = Directors.Where(f => f.Id == director.Id).FirstOrDefault();
                    Directors.Remove(directorInList);
                }

                Initialize();
                return true;
            }));
        }
예제 #2
0
        public GameState GoNextState()
        {
            //end of state
            if (CurrentState == GameState.FixCosts)
            {
                //nothing
            }
            else if (CurrentState == GameState.UpdateMarket)
            {
                //nothing
            }
            else if (CurrentState == GameState.MatRequest)
            {
                RequestsOfMat = Bank.RequestOfMat(RequestsOfMat);
                foreach (Demand demand in RequestsOfMat)
                {
                    GetDirector(demand.Priority).MakeRequestOfMat(demand.Price, demand.UMat);
                }
                RequestsOfMat.Clear();
            }
            else if (CurrentState == GameState.Production)
            {
                foreach (Director director in Directors)
                {
                    director.NextState(this);
                }
            }
            else if (CurrentState == GameState.ProdRequest)
            {
                RequestsOfProd = Bank.RequestOfProd(RequestsOfProd);
                foreach (Offer offer in RequestsOfProd)
                {
                    GetDirector(offer.Priority).MakeRequestOfProd(offer.Price, offer.UProd);
                }
                RequestsOfProd.Clear();
            }
            else if (CurrentState == GameState.BuildUpgrade)
            {
                foreach (Director director in Directors)
                {
                    director.UpdateFabCosts();
                }
            }

            CurrentState = GetNextState;

            // start of new state
            if (CurrentState == GameState.FixCosts)
            {
                CurrentMonth += 1;
                Director currentMain = GetDirector(0);
                foreach (Director director in Directors.ToList())
                {
                    director.NextState(this);
                    if (director.IsBankrupt)
                    {
                        if (currentMain != null)
                        {
                            CurrentMainDirector--;
                        }
                        Directors.Remove(director);
                    }
                    if (currentMain == director)
                    {
                        currentMain = null;
                    }
                }
                CurrentMainDirector = (CurrentMainDirector + 1) % Directors.Count;
            }
            else if (CurrentState == GameState.UpdateMarket)
            {
                Bank.NextState(this);
            }
            else if (CurrentState == GameState.MatRequest)
            {
                //wait for requests
            }
            else if (CurrentState == GameState.Production)
            {
                //wait for production
            }
            else if (CurrentState == GameState.ProdRequest)
            {
                //wait for requests
            }
            else if (CurrentState == GameState.BuildUpgrade)
            {
                foreach (Fabric fabric in Fabrics.ToList())
                {
                    fabric.NextState(this);
                }
            }

            return(CurrentState);
        }