Ejemplo n.º 1
0
        /// <summary>
        /// Gives money to bank (as deposit or loan payment). Checks inside.
        /// Just wouldn't take money if giver hasn't enough money.
        /// Don't provide variables like Cash as argument!! It would default to zero!
        /// </summary>
        public void ReceiveMoney(Agent giver, MoneyView sum)
        {
            if (giver.PayWithoutRecord(this, sum, Register.Account.BankOperation))
            {
                if (giver.loans.isNotZero())              //has debt (meaning has no deposits)
                {
                    if (sum.isBiggerOrEqual(giver.loans)) // cover debt
                    {
                        MoneyView extraMoney = sum.Copy().Subtract(giver.loans);
                        givenCredits.Subtract(giver.loans);

                        giver.loans.SetZero(); //put extra money on deposit
                        giver.deposits.Set(extraMoney);
                    }
                    else// not cover debt, just decrease loan
                    {
                        giver.loans.Subtract(sum);
                        givenCredits.Subtract(sum);
                    }
                }
                else
                {
                    giver.deposits.Add(sum);
                }
            }
        }
Ejemplo n.º 2
0
        //public float getCash()
        //{
        //    return cash.get();
        //}

        /// <summary>
        /// Checks inside. Wouldn't pay if can't. Takes back deposits from bank, if needed
        /// Doesn't pay tax
        /// </summary>
        public bool PayWithoutRecord(Agent whom, MoneyView howMuch, Register.Account account, bool showMessageAboutNegativeValue = true)
        {
            if (CanPay(howMuch))// It does has enough cash or deposit
            {
                if (!CanPayCashOnly(howMuch))
                {
                    Bank.ReturnDeposit(this, HowMuchLacksMoneyCashOnly(howMuch));
                }
                Register.RecordPayment(whom, account, howMuch);
                whom.cash.Add(howMuch);
                cash.Subtract(howMuch);
                return(true);
            }
            else
            {
                FailedPayments.RecordIncomeFromNowhere(account, howMuch);
                if (showMessageAboutNegativeValue)
                {
                    Debug.Log(this + " doesn't have " + howMuch + " to pay in Agent.payWithoutRecord2 " + whom
                              + " has " + getMoneyAvailable());
                }
                //PayAllAvailableMoneyWithoutRecord(whom);
                return(false);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Starts a new game.
        /// </summary>
        /// <param name="content">The content manager to load from.</param>
        private void StartGame(ContentManager content)
        {
            // create the game objects
            _scene = new Scene();
            _scene.LoadContent(content);

            _fishing = new FishingState(this, _scene);
            _fishing.LoadContent(content);

            _ocean = new Ocean(_fishing);
            _ocean.LoadContent(content);

            _money = new Money(_fishing);

            _timer = new Timer(_fishing);

            _store = new Store(_money, _fishing);
            _store.LoadContent(content);
            _store.Hit += OnStoreHit;

            BadgeContext badgeContext = new BadgeContext();

            badgeContext.Fishing = _fishing;
            badgeContext.Money   = _money;
            badgeContext.Store   = _store;
            badgeContext.Timer   = _timer;
            _badges.Context      = badgeContext;

            // create the views
            _sceneView = new SceneView(_scene, _camera);
            _sceneView.LoadContent(content);

            _oceanView = new OceanView(_ocean);

            _fishCaughtView = new FishCaughtView(_fishing);
            _fishEatenView  = new FishEatenView(_fishing);
            _fishingView    = new FishingView(_fishing, _context);
            _fishingView.LoadContent(content);

            _distanceView = new DistanceView(_scene, _fishing);
            _distanceView.LoadContent(content);

            _moneyView = new MoneyView(_money);
            _moneyView.LoadContent(content);

            _timerView = new TimerView(_timer);
            _timerView.LoadContent(content);

            _lureView = new LureView(_fishing, _store);
            _lureView.LoadContent(content);

            _storeView = new StoreView(_store);
            _storeView.LoadContent(content);

            _guideView = new GameGuideView();
            _guideView.LoadContent(content);
            _guide = new GameGuide(_guideView, _fishing, _store, _money);

            _cameraController = new CameraController(_camera, _scene, _fishing);
        }
Ejemplo n.º 4
0
    protected override void OnAwake()
    {
        heroName       = transform.Find("Name").GetComponent <UILabel>();
        heroLevel      = transform.Find("Level").GetComponent <UILabel>();
        heroVIP        = transform.Find("VIPLevel").GetComponent <UILabel>();
        heroFightValue = transform.Find("FightValue").GetComponent <UILabel>();
        heroExpBar     = transform.Find("ExpBar").GetComponent <UISlider>();
        heroExpNum     = transform.Find("ExpBar/Num").GetComponent <UILabel>();

        labActionNum1  = transform.Find("Actions/1/Num").GetComponent <UILabel>();
        labActionName1 = transform.Find("Actions/1/ActionName").GetComponent <UILabel>();
        labAllTimer1   = transform.Find("Actions/1/AllTimer").GetComponent <UILabel>();
        labOneTimer1   = transform.Find("Actions/1/OneTimer").GetComponent <UILabel>();
        labActionNum2  = transform.Find("Actions/2/Num").GetComponent <UILabel>();
        labActionName2 = transform.Find("Actions/2/ActionName").GetComponent <UILabel>();
        labAllTimer2   = transform.Find("Actions/2/AllTimer").GetComponent <UILabel>();
        labOneTimer2   = transform.Find("Actions/2/OneTimer").GetComponent <UILabel>();

        btnClose      = transform.Find("Btn_Close").gameObject;
        btnChangeName = transform.Find("Btn_ChangeName").gameObject;

        Transform moneysTrans = transform.Find("Moneys");

        for (int i = 1; i <= 12; i++)
        {
            MoneyView mv    = new MoneyView();
            Transform money = moneysTrans.Find(i.ToString());
            mv.texture = money.Find("Texture").GetComponent <UITexture>();
            mv.labNum  = money.Find("Num").GetComponent <UILabel>();
            mMoneyViewList.Add(mv);
        }
    }
Ejemplo n.º 5
0
    protected override void OnAwake()
    {
        Transform pivot = transform.Find("Pivot");

        heroName       = pivot.Find("HeroName").GetComponent <UILabel>();
        heroLevel      = pivot.Find("HeroLevel").GetComponent <UILabel>();
        heroVIP        = pivot.Find("HeroVIPLevel").GetComponent <UILabel>();
        heroFightValue = pivot.Find("HeroFightValue").GetComponent <UILabel>();
        heroExpBar     = pivot.Find("HeroExpBar").GetComponent <UISlider>();
        heroExpNum     = pivot.Find("HeroExpBar/Num").GetComponent <UILabel>();

        Transform heroActionTrans = pivot.Find("HeroActions");

        labActionNum1 = heroActionTrans.Find("1/Num").GetComponent <UILabel>();
        labAllTimer1  = heroActionTrans.Find("1/AllTimer").GetComponent <UILabel>();
        labOneTimer1  = heroActionTrans.Find("1/OneTimer").GetComponent <UILabel>();
        labActionNum2 = heroActionTrans.Find("2/Num").GetComponent <UILabel>();
        labAllTimer2  = heroActionTrans.Find("2/AllTimer").GetComponent <UILabel>();
        labOneTimer2  = heroActionTrans.Find("2/OneTimer").GetComponent <UILabel>();

        btnClose = pivot.Find("BtnClose").gameObject;
        Transform moneysTrans = pivot.Find("HeroMoneys");

        for (int i = 1; i <= 12; i++)
        {
            MoneyView mv    = new MoneyView();
            Transform money = moneysTrans.Find(i.ToString());
            mv.moneyTexture = money.Find("Texture").GetComponent <UITexture>();
            mv.moneyNumText = money.Find("Num").GetComponent <UILabel>();
            moneyViewList.Add(mv);
        }
    }
Ejemplo n.º 6
0
        /// <summary>
        /// For artisans. Not including salary
        /// </summary>
        public MoneyView getPossibleProfit(Market market)
        {
            if (market
                .
                getDemandSupplyBalance(
                    basicProduction
                    .
                    Product, false) == Options.MarketZeroDSB)
            {
                return(new MoneyView(0)); // no demand for result product
            }
            MoneyView income = market.getCost(basicProduction);

            if (hasInput())
            {
                // change to minimal hire limits
                foreach (Storage inputProduct in resourceInput)
                {
                    if (!market.isAvailable(inputProduct.Product))
                    {
                        return(new MoneyView(0));// inputs are unavailable
                    }
                }
                return(income.Copy().Subtract(market.getCost(resourceInput), false));
            }
            return(income);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Result is how much deposit was really returned. Checks inside. Just wouldn't give money if can't
        /// Can return less than was prompted
        /// </summary>
        public MoneyView ReturnDeposit(Agent toWhom, MoneyView howMuchWants)
        {
            if (toWhom.Country.Science.IsInvented(Invention.Banking))// find money in bank? //todo remove checks, make bank==null if uninvented
            {
                var maxReturnLimit = HowMuchDepositCanReturn(toWhom);
                if (maxReturnLimit.isBiggerOrEqual(howMuchWants))
                {
                    MoneyView returnMoney;
                    if (howMuchWants.isBiggerThan(maxReturnLimit))
                    {
                        returnMoney = maxReturnLimit;
                    }
                    else
                    {
                        returnMoney = howMuchWants;
                    }

                    if (returnMoney.isNotZero())// return deposit
                    {
                        //giveMoney(toWhom, moneyToReturn);
                        toWhom.deposits.Subtract(returnMoney);
                        PayWithoutRecord(toWhom, returnMoney, Register.Account.BankOperation);
                    }
                    return(returnMoney);
                }
            }
            return(MoneyView.Zero);
        }
Ejemplo n.º 8
0
 public void ReduceSale(MoneyView sum)
 {
     howMuchWantsToSell.Subtract(sum, false);
     if (howMuchWantsToSell.isBiggerThan(howMuchOwns))
     {
         howMuchWantsToSell.Set(howMuchOwns);
     }
 }
Ejemplo n.º 9
0
 public void RecordIncomeFromNowhere(Account account, MoneyView sum)
 {
     if (enabled)
     {
         account.GetIncomeAccount(this).Add(sum);
         //this.incomeList.AddAndSum(account, sum);
         this.income.Add(sum);
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Gives money in credit or returns deposit, if possible.
        /// Gives whole sum or gives nothing.
        /// Checks inside. Return false if didn't give credit.
        /// </summary>
        public bool GiveCredit(Agent taker, MoneyView desiredCredit) // todo check
        {
            if (taker.deposits.isNotZero())                          // has deposit (meaning, has no loans)
            {
                if (desiredCredit.isBiggerThan(taker.deposits))      // loan is bigger than this deposit
                {
                    MoneyView returnedDeposit = ReturnDeposit(taker, taker.deposits);
                    if (returnedDeposit.isSmallerThan(taker.deposits))
                    {
                        return(false);// if can't return deposit than can't give credit for sure
                    }
                    //returnedMoney = new ReadOnlyValue(0f);

                    MoneyView restOfTheSum = desiredCredit.Copy().Subtract(returnedDeposit);
                    if (CanGiveCredit(taker, restOfTheSum))
                    {
                        taker.loans.Set(restOfTheSum);//important
                        givenCredits.Add(restOfTheSum);
                        PayWithoutRecord(taker, restOfTheSum, Register.Account.BankOperation);
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else // no need for credit, just return deposit
                {
                    // if can't return deposit than can't give credit for sure
                    if (CanReturnDeposit(taker, desiredCredit))
                    {
                        ReturnDeposit(taker, desiredCredit);
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            else
            {
                if (CanGiveCredit(taker, desiredCredit))
                {
                    taker.loans.Add(desiredCredit);
                    givenCredits.Add(desiredCredit);
                    PayWithoutRecord(taker, desiredCredit, Register.Account.BankOperation);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Ejemplo n.º 11
0
        private void Ssssel(Consumer buyer, MoneyView cost, Storage sale)
        {
            buyer.Pay(World.market, cost);
            buyer.consumeFromMarket(sale);
            var isSP = buyer as SimpleProduction;

            if (isSP != null)
            {
                isSP.getInputProductsReserve().Add(sale);
            }
        }
Ejemplo n.º 12
0
 public void SetToSell(MoneyView sum)
 {
     if (howMuchOwns.Get() - howMuchWantsToSell.Get() - sum.Get() < 0m)
     {
         howMuchWantsToSell.Set(howMuchOwns);
     }
     else
     {
         howMuchWantsToSell.Add(sum);
     }
 }
Ejemplo n.º 13
0
        /// <summary>
        /// How much can
        /// Checks reserve limits.
        /// new value
        /// </summary>
        public MoneyView HowBigCreditCanGive(Agent whom)
        {
            MoneyView maxSum = Cash.Copy().Subtract(GetMinimalReservs(), false); // don't take in account banks deposits

            //if (whom.deposits.isBiggerThan(maxSum))
            //{
            //    maxSum = whom.deposits.Copy(); // sets maxSum to deposits size
            //    if (maxSum.isBiggerThan(Cash)) //decrease maxSum to Cash size
            //        maxSum.Set(Cash);
            //}
            return(maxSum);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Brings money for sold product
        /// </summary>
        public static void GiveMoneyForSoldProduct(ISeller seller)
        {
            foreach (var deal in seller.AllSellDeals())
            {
                // Key is a market, Value is a Storage
                var market       = deal.Key;
                var sentToMarket = deal.Value;
                if (sentToMarket.get() > 0f)
                {
                    Value DSB = new Value(market.getDemandSupplyBalance(sentToMarket.Product, false));
                    if (DSB.get() == Options.MarketInfiniteDSB)
                    {
                        DSB.SetZero(); // real DSB is unknown
                    }
                    else if (DSB.get() > Options.MarketEqualityDSB)
                    {
                        DSB.Set(Options.MarketEqualityDSB);
                    }

                    decimal realSold = (decimal)sentToMarket.get();
                    realSold *= (decimal)DSB.get();

                    if (realSold > 0m)
                    {
                        MoneyView cost = market.getCost(sentToMarket.Product).Copy().Multiply(realSold);

                        // adding unsold product
                        // assuming gainGoodsThisTurn & realSold have same product
                        //if (storage.isExactlySameProduct(gainGoodsThisTurn))
                        //    storage.add(gainGoodsThisTurn);
                        //else
                        //    storage = new Storage(gainGoodsThisTurn);
                        //storage.Subtract((float)realSold);


                        if (market.CanPay(cost)) //&& Country.market.tmpMarketStorage.has(realSold))
                        {
                            market.Pay(seller as Agent, cost, Register.Account.MarketOperations);
                        }
                        else
                        {
                            if (Game.devMode)// && Country.market.HowMuchLacksMoneyIncludingDeposits(cost).Get() > 10m)
                            {
                                Debug.Log("Failed market - lacks " + market.HowMuchLacksMoneyIncludingDeposits(cost)
                                          + " for " + realSold + " " + sentToMarket.Product + " " + seller + " trade: " + cost); // money in market ended... Only first lucky get money
                            }
                            market.PayAllAvailableMoney(seller as Agent, Register.Account.MarketOperations);
                        }
                    }
                }
            }
        }
Ejemplo n.º 15
0
 internal MoneyView GetUBISize(Market market)
 {
     if (this == None)
     {
         return(MoneyView.Zero);
     }
     else if (this == Scanty)
     {
         MoneyView result = market.getCost(PopType.Workers.getLifeNeedsPer1000Men());
         //result.multipleInside(0.5f);
         return(result);
     }
     else if (this == Minimal)
     {
         Money result       = market.getCost(PopType.Workers.getLifeNeedsPer1000Men()).Copy();
         Money everyDayCost = market.getCost(PopType.Workers.getEveryDayNeedsPer1000Men()).Copy();
         everyDayCost.Multiply(0.02m);
         result.Add(everyDayCost);
         return(result);
     }
     else if (this == Trinket)
     {
         Money result       = market.getCost(PopType.Workers.getLifeNeedsPer1000Men()).Copy();
         Money everyDayCost = market.getCost(PopType.Workers.getEveryDayNeedsPer1000Men()).Copy();
         everyDayCost.Multiply(0.04m);
         result.Add(everyDayCost);
         return(result);
     }
     else if (this == Middle)
     {
         Money result       = market.getCost(PopType.Workers.getLifeNeedsPer1000Men()).Copy();
         Money everyDayCost = market.getCost(PopType.Workers.getEveryDayNeedsPer1000Men()).Copy();
         everyDayCost.Multiply(0.06m);
         result.Add(everyDayCost);
         return(result);
     }
     else if (this == Big)
     {
         Money result       = market.getCost(PopType.Workers.getLifeNeedsPer1000Men()).Copy();
         Money everyDayCost = market.getCost(PopType.Workers.getEveryDayNeedsPer1000Men()).Copy();
         everyDayCost.Multiply(0.08m);
         //Value luxuryCost = Country.market.getCost(PopType.workers.luxuryNeedsPer1000);
         result.Add(everyDayCost);
         //result.add(luxuryCost);
         return(result);
     }
     else
     {
         Debug.Log("Unknown reform");
         return(MoneyView.Zero);
     }
 }
Ejemplo n.º 16
0
        // Do I use where need to? Yes, I do. It called from this.Buy()
        protected virtual void Buy_utility(Market market, MoneyView cost, Storage what)
        {
            this.Pay(market, cost);
            consumed.Add(what);
            consumedInMarket.Add(new KeyValuePair <Market, Storage>(market, what));
            market.SendGoods(what);


            if (Game.logMarket)
            {
                Debug.Log(this + " consumed from " + market + " " + what + " costing " + Country.market.getCost(what));
            }
        }
Ejemplo n.º 17
0
        public override void SetByView(MoneyView view)
        {
            var current = this.repo.Get();

            current.Heller       = view.Heller;
            current.Kupfer       = view.Kupfer;
            current.Silber       = view.Silber;
            current.Dublonen     = view.Dublonen;
            current.BankDublonen = view.BankDublonen;

            this.repo.Update(current);
            repo.Submit();
        }
Ejemplo n.º 18
0
        /// <summary> Including deposits </summary>
        internal Storage HowMuchCanAfford(Storage need)
        {
            MoneyView cost = World.market.getCost(need);

            if (CanPay(cost))
            {
                return(new Storage(need));
            }
            else
            {
                return(new Storage(need.Product, (float)(getMoneyAvailable().Copy()).Divide(World.market.getCost(need.Product).Get()).Get()));
            }
        }
Ejemplo n.º 19
0
        /// <summary> Including deposits </summary>
        public Storage HowMuchCanAfford(Storage need)
        {
            MoneyView cost = Country.market.getCost(need);

            if (CanPay(cost))
            {
                return(new Storage(need));
            }
            else
            {
                return(new Storage(need.Product, (float)getMoneyAvailable().Copy().Divide(Country.market.getCost(need.Product).Get()).Get()));
            }
        }
Ejemplo n.º 20
0
    public override System.Windows.UIElement[] CreateLabels(Microsoft.Research.DynamicDataDisplay.Charts.ITicksInfo <int> ticksInfo)
    {
        var customElements = new UIElement[ticksInfo.Ticks.Length];

        for (int i = 0; i < customElements.Length; i++)
        {
            var mv    = new MoneyView();                     // View provides the money style format
            var money = new Money(0, 0, ticksInfo.Ticks[i]); // Data class provides the calculation
            mv.DataContext    = money;                       // Bind the data to the view
            customElements[i] = mv;
        }
        return(customElements);
    }
Ejemplo n.º 21
0
        internal void GiveMoneyFromGoldPit(Storage gold)
        {
            var newMoney = new MoneyView(gold);

            cash.Add(newMoney);
            gold.SetZero();
            moneyIncomeThisTurn.Add(newMoney);
            MoneyView sentToGovernment = MoneyView.CovertFromGold(gold.Copy().Multiply(Options.GovernmentTakesShareOfGoldOutput));

            //send 50% to government
            Pay(country, sentToGovernment);
            country.goldMinesIncomeAdd(sentToGovernment);
        }
Ejemplo n.º 22
0
 public Factory BuildFactory(IShareOwner investor, ProductionType type, MoneyView cost, bool instantBuild = false)
 {
     //if (getAllFactories().Any(x => x.Type == type)) //todo temporally
     //{
     //    throw new Exception("Can't have 2 same factory types");
     //}
     //else
     {
         var res = new Factory(this, investor, type, cost, instantBuild);
         allFactories.Add(res);
         return(res);
     }
 }
Ejemplo n.º 23
0
        public void RecordPayment(Agent receiver, Account account, MoneyView sum)
        {
            if (enabled)
            {
                account.GetIncomeAccount(receiver.Register).Add(sum);
                //receiver.Register.incomeList.AddAndSum(account, sum);
                receiver.Register.income.Add(sum);

                account.GetExpenseAccount(this).Add(sum);
                //this.expensesList.AddAndSum(account, sum);//giver is this
                if (account != Account.Dividends)
                {
                    this.expenses.Add(sum);
                }
            }
        }
Ejemplo n.º 24
0
 /// <summary>
 /// Gives credit. Checks inside. Just wouldn't give money if can't
 /// </summary>
 public bool GiveLackingMoneyInCredit(Agent taker, MoneyView desirableSum)
 {
     if (taker.Country.Science.IsInvented(Invention.Banking))// find money in bank?
     {
         MoneyView lackOfSum = desirableSum.Copy().Subtract(taker.getMoneyAvailable(), false);
         if (lackOfSum.isNotZero())
         {
             return(GiveCredit(taker, lackOfSum));
         }
         else
         {
             return(false);
         }
     }
     return(false);
 }
Ejemplo n.º 25
0
 public void Add(IShareOwner owner, MoneyView value)
 {
     //if (IsCorrectData(value.))
     {
         Share record;
         if (ownership.TryGetValue(owner, out record))
         {
             record.Increase(value);
         }
         else
         {
             ownership.Add(owner, new Share(value));
         }
         totallyInvested.Add(value);
         //owner.GetOwnership().Add(parent, value);
     }
 }
Ejemplo n.º 26
0
        public void getMoneyForSoldProduct()
        {
            foreach (var sent in sentToMarket)
            {
                if (sent.isNotZero())
                {
                    Value DSB = new Value(World.market.getDemandSupplyBalance(sent.Product, false));
                    if (DSB.get() == Options.MarketInfiniteDSB)
                    {
                        DSB.SetZero();// real DSB is unknown
                    }
                    else
                    if (DSB.get() > Options.MarketEqualityDSB)
                    {
                        DSB.Set(Options.MarketEqualityDSB);
                    }
                    decimal realSold = (decimal)sent.get();
                    realSold *= (decimal)DSB.get();
                    if (realSold > 0m)
                    {
                        MoneyView cost = World.market.getCost(sent.Product).Copy().Multiply(realSold); //World.market.getCost(realSold);
                        //soldByGovernment.addMy(realSold.Product, realSold);
                        soldByGovernment[sent.Product].Set((float)realSold);
                        //returning back unsold product
                        //if (sent.isBiggerThan(realSold))
                        //{
                        //    var unSold = sent.subtractOutside(realSold);
                        //    countryStorageSet.add(unSold);
                        //}

                        if (World.market.CanPay(cost)) //&& World.market.tmpMarketStorage.has(realSold))
                        {
                            World.market.Pay(this, cost);
                            //World.market.sentToMarket.subtract(realSold);
                        }
                        else
                        {
                            //if (Game.devMode)// && World.market.HowMuchLacksMoneyIncludingDeposits(cost).Get() > 10m)
                            Debug.Log("Failed market (country) - lacks " + World.market.HowMuchLacksMoneyIncludingDeposits(cost)
                                      + " for " + realSold + " " + sent.Product + " " + this + " trade: " + cost); // money in market ended... Only first lucky get money
                            World.market.PayAllAvailableMoney(this);
                        }
                    }
                }
            }
        }
Ejemplo n.º 27
0
        //todo put it and duplicate in market?
        public void getMoneyForSoldProduct()
        {
            if (sentToMarket.get() > 0f)
            {
                Value DSB = new Value(World.market.getDemandSupplyBalance(sentToMarket.Product, false));
                if (DSB.get() == Options.MarketInfiniteDSB)
                {
                    DSB.SetZero(); // real DSB is unknown
                }
                else if (DSB.get() > Options.MarketEqualityDSB)
                {
                    DSB.Set(Options.MarketEqualityDSB);
                }
                decimal realSold = (decimal)sentToMarket.get();
                realSold *= (decimal)DSB.get();
                if (realSold > 0m)
                {
                    MoneyView cost = World.market.getCost(sentToMarket.Product).Copy().Multiply(realSold);

                    // adding unsold product
                    // assuming gainGoodsThisTurn & realSold have same product
                    if (storage.isExactlySameProduct(gainGoodsThisTurn))
                    {
                        storage.add(gainGoodsThisTurn);
                    }
                    else
                    {
                        storage = new Storage(gainGoodsThisTurn);
                    }
                    storage.Subtract((float)realSold);

                    if (World.market.CanPay(cost)) //&& World.market.tmpMarketStorage.has(realSold))
                    {
                        World.market.Pay(this, cost);
                    }
                    else
                    {
                        //if (Game.devMode)// && World.market.HowMuchLacksMoneyIncludingDeposits(cost).Get() > 10m)
                        Debug.Log("Failed market - lacks " + World.market.HowMuchLacksMoneyIncludingDeposits(cost)
                                  + " for " + realSold + " " + sentToMarket.Product + " " + this + " trade: " + cost);   // money in market ended... Only first lucky get money
                        World.market.PayAllAvailableMoney(this);
                    }
                }
            }
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Checks inside. Wouldn't pay if can't. Takes back deposit from bank if needed
        /// Registers moneyIncomeThisTurn, pays tax. Returns true if was able to pay
        /// </summary>
        public bool Pay(Agent incomeReceiver, MoneyView howMuch, Register.Account account, bool showMessageAboutNegativeValue = true)
        {
            if (howMuch.isNotZero())
            {
                if (PayWithoutRecord(incomeReceiver, howMuch, account, showMessageAboutNegativeValue)) // pays here
                {
                    Money howMuchPayReally = howMuch.Copy();

                    if (incomeReceiver is Market) // Market wouldn't pay taxes cause it's abstract entity
                    {
                        return(true);
                    }

                    Agent payer = this;

                    // foreigners income tax calculation
                    if (payer is Market == false && //&& incomeReceiver is Market == false
                        payer.Country != incomeReceiver.Country &&
                        payer is Factory)    // pay taxes in enterprise jurisdiction only if it's factory
                    {
                        var payed = payer.Country.TakeIncomeTaxFrom(incomeReceiver, howMuchPayReally, false);
                        howMuchPayReally.Subtract(payed);//and reduce taxable base
                    }

                    // in rest cases only pops pay taxes
                    var popReceiver = incomeReceiver as PopUnit;
                    if (popReceiver != null)
                    {
                        incomeReceiver.Country.TakeIncomeTaxFrom(popReceiver, howMuchPayReally, popReceiver.Type.isPoorStrata());
                    }
                    //else // if it's not Pop than it should by dividends from enterprise..
                    //{
                    //    //var countryPayer = incomeReceiver as Country;
                    //    //if (countryPayer != null)
                    //        incomeReceiver.Country.TakeIncomeTaxFrom(incomeReceiver, howMuchPayReally, false);
                    //}
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 29
0
        public void onBuildClick()
        {
            bool    buildSomething = false;
            Factory factory;

            if (Economy.isMarket.checkIfTrue(Game.Player))
            {
                MoneyView cost = selectedFactoryType.GetBuildCost();
                if (Game.Player.CanPay(cost))
                {
                    factory = Game.selectedProvince.BuildFactory(Game.Player, selectedFactoryType, cost);
                    Game.Player.PayWithoutRecord(factory, cost);
                    buildSomething = true;
                    MainCamera.factoryPanel.show(factory);
                    if (Game.Player != factory.Country)
                    {
                        factory.Country.changeRelation(Game.Player, Options.RelationImpactOnGovernmentInvestment.get());
                    }
                }
            }
            else // non market
            {
                //todo remove grain connection
                var     resourceToBuild = selectedFactoryType.GetBuildNeeds();
                Storage needFood        = resourceToBuild.GetFirstSubstituteStorage(Product.Grain);
                if (Game.Player.countryStorageSet.has(needFood))
                {
                    factory = Game.selectedProvince.BuildFactory(Game.Player, selectedFactoryType, World.market.getCost(resourceToBuild));
                    Game.Player.countryStorageSet.Subtract(needFood);
                    buildSomething = true;
                    MainCamera.factoryPanel.show(factory);
                    if (Game.Player != factory.Country)
                    {
                        factory.Country.changeRelation(Game.Player, Options.RelationImpactOnGovernmentInvestment.get());
                    }
                }
            }

            if (buildSomething)
            {
                selectedFactoryType = null;
                MainCamera.refreshAllActive();
            }
        }
Ejemplo n.º 30
0
        /// <summary>
        /// amount is Market value share, while data stored in assets value
        /// </summary>
        public bool Transfer(IShareOwner oldOwner, IShareOwner newOwner, MoneyView amount)
        {
            var share      = new Procent(amount, GetMarketValue());
            var toTransfer = GetAssetsValue().Copy().Multiply(share); // ownership is stored in money

            Share oldOwnerAsset;

            if (ownership.TryGetValue(oldOwner, out oldOwnerAsset))
            {
                if (oldOwnerAsset.GetShare().isBiggerOrEqual(toTransfer)) // has enough to transfer
                {
                    Share newOwnerAsset;
                    if (ownership.TryGetValue(newOwner, out newOwnerAsset))
                    {
                        newOwnerAsset.Increase(toTransfer);
                    }
                    else
                    {
                        ownership.Add(newOwner, new Share(toTransfer));
                    }

                    Remove(oldOwner, toTransfer);
                    return(true);
                }
                else
                {
                    TransferAll(oldOwner, newOwner);
                    if (Game.logInvestments)
                    {
                        Debug.Log("Not enough property to transfer"); // reduce payment in that case, transfer data in non-market value
                    }
                    return(false);
                }
            }
            else
            {
                Debug.Log("No such owner");
                return(false);
            }
            //}
            //else return false;
        }