public override GameState?StateUpdate() { /* * 0. ** обновляем UI голосования ** * 1. обновляем таймер голосования * если таймер (голосование) закончился * распределяем деньги (Context.Company.ActiveContract.Earnings) за контракт: * в зависимости от результатов голосования * c_Investors vs c_Company (percent) * Company.Balance += c_Company * Earnings * * for each user in active users: * user balance increase by c_Investors * Earnings * ** не делим на количество человек ** ** смотрим счетчик контрактов (кол-во до события) ** если счетчик достиг Х ** переходим в EventState ** иначе ** переходим в ContractStart */ if (_votingState == null) { return(GameState.Idle); } _votingState.Update(); if (_votingState.CanBeFinished()) { _votingState.Finish(Context); var earnings = _reward; var companyVotes = _votingState.Results[CompanyOption]; var investorsVotes = _votingState.Results[InvestorsOption]; var total = companyVotes + investorsVotes; var toCompany = 0.5f; if (total > 0) { toCompany = (float)companyVotes / total; } var toUsers = Mathf.Clamp01(1f - toCompany); SoundManager.Instance.Play(SoundBank.Instance.MoneyEarned); Context.Company.Balance += earnings * toCompany; // TODO: выплаты только тем, кто участвовал в контракте foreach (var activeUser in Context.Db.GetActiveUsers()) { activeUser.Balance += earnings * toUsers; } if (Context.ContractsTillNextEvent <= 0) { Context.ContractsTillNextEvent = Common.ContractsTillNextEvent; return(GameState.Event); } Context.ContractsTillNextEvent -= 1; // New contract return(GameState.ChooseContractStart); } return(null); }