/// <summary> /// Do work on the paper stacks of this desk. /// Returns true if there is still more work to be done. /// </summary> public bool DoWork(float PapersPerTick) { if (mAssignedPaperStacks.Count == 0) { return(false); } CContractStack stack = mAssignedPaperStacks[0]; if (stack.DoWork(PapersPerTick)) { if (_item != null) { ((CItemDesk)_item).mCompletedStacks.Add(new CCompletedContractStack(stack.mDoneWork)); //.mCompletedPapers += (int)stack.mDoneWork; } mAssignedPaperStacks.Remove(stack); mPaperStackUpdateTick = mWorld.mGameTick; } if (mAssignedPaperStacks.Count == 0) { return(false); } return(true); }
/// <summary> /// Fill out properties for a new contract. /// </summary> public void InitContract(CClientCompany Company, int Tier, int Player) { mTier = Tier; mCompany = Company; mOwner = Player; //CContractDefinition def = CGame.Datastore.mContract; mOwner = -1; mName = "Audit Report"; float stackLow = 5; float stackHigh = 10; float deadlineLow = 18; float deadlineHigh = 36; float penaltyRate = 10; float acceptExpiryTime = 90; CContractTier tier = mWorld.mContractTiers[Tier]; float rngMod = mWorld.SimRnd.GetNextFloat(); int totalPapers = (int)((int)((float)(tier.mMulHigh - tier.mMulLow) * rngMod) + tier.mMulLow) * 100; totalPapers += (int)(totalPapers * Company.mPaperMul * Tier); mStackCount = (int)((int)((float)(stackHigh - stackLow) * rngMod) + stackLow); mStackCount += (int)(mStackCount * Company.mStackMul * Tier); mTotalStartPapers = 0; int papersPerStack = totalPapers / mStackCount; mStacks = new CContractStack[mStackCount]; for (int i = 0; i < mStackCount; ++i) { mStacks[i] = new CContractStack(); mStacks[i].mContract = this; mStacks[i].mTotalWork = papersPerStack; mTotalStartPapers += papersPerStack; } mPenalty = Tier / 10 * totalPapers; int deadline = (int)(mWorld.SimRnd.GetNextFloat() * (float)(deadlineHigh - deadlineLow) * 10.0f); deadline += (int)(deadline * Company.mDeadlineMul * Tier); mDeadlineTime = deadline * CWorld.TICKS_PER_SECOND; mAvailableFor = (int)acceptExpiryTime * CWorld.TICKS_PER_SECOND; mAvailableUntil = mWorld.mGameTick + mAvailableFor; //Debug.Log("Contract generated - Papers: " + mStartPapers + " Deadline: " + deadlineSecsRounded + "secs"); }
/// <summary> /// Assign contract units to this desk. /// </summary> public void AssignContractUnits(CContractStack Paper) { if (Paper == null) { Debug.LogError("Can't assign null to desk"); return; } if (GetFreePaperStackSlots() == 0) { Debug.LogError("Put too many contract papers on desk."); return; } Paper.mDistributed = true; mAssignedPaperStacks.Add(Paper); mPaperStackUpdateTick = mWorld.mGameTick; }