/// <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); } } }
//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); } }
/// <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); }
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); } }
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); } }
/// <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); }
/// <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); }
public void ReduceSale(MoneyView sum) { howMuchWantsToSell.Subtract(sum, false); if (howMuchWantsToSell.isBiggerThan(howMuchOwns)) { howMuchWantsToSell.Set(howMuchOwns); } }
public void RecordIncomeFromNowhere(Account account, MoneyView sum) { if (enabled) { account.GetIncomeAccount(this).Add(sum); //this.incomeList.AddAndSum(account, sum); this.income.Add(sum); } }
/// <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); } } }
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); } }
public void SetToSell(MoneyView sum) { if (howMuchOwns.Get() - howMuchWantsToSell.Get() - sum.Get() < 0m) { howMuchWantsToSell.Set(howMuchOwns); } else { howMuchWantsToSell.Add(sum); } }
/// <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); }
/// <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); } } } } }
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); } }
// 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)); } }
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(); }
/// <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())); } }
/// <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())); } }
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); }
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); }
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); } }
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); } } }
/// <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); }
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); } }
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); } } } } }
//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); } } } }
/// <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); }
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(); } }
/// <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; }