mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 08:20:50 +00:00
growth determined by manpower reserves
This commit is contained in:
@@ -142,9 +142,9 @@ export class DefaultConfig implements Config {
|
||||
manpowerAdditionRate(player: Player): number {
|
||||
let max = this.maxManpower(player)
|
||||
|
||||
let toAdd = 10 + (player.troops() + Math.sqrt(player.troops() * player.numTilesOwned())) / 100
|
||||
let toAdd = 10 + (player.manpowerReserve() + Math.sqrt(player.manpowerReserve() * player.numTilesOwned())) / 100
|
||||
|
||||
const ratio = 1 - (player.troops() / max)
|
||||
const ratio = 1 - (player.manpowerReserve() / max)
|
||||
toAdd *= ratio
|
||||
toAdd *= .5
|
||||
// console.log(`to add ${toAdd}`)
|
||||
@@ -161,8 +161,8 @@ export class DefaultConfig implements Config {
|
||||
return player.numTilesOwned() / 100
|
||||
}
|
||||
troopAdjustmentRate(player: Player): number {
|
||||
const maxDiff = player.manpower() / 250 + this.manpowerAdditionRate(player)
|
||||
const target = player.manpower() * player.targetTroopRatio()
|
||||
const maxDiff = player.totalManpower() / 250 + this.manpowerAdditionRate(player)
|
||||
const target = player.totalManpower() * player.targetTroopRatio()
|
||||
const diff = target - player.troops()
|
||||
if (Math.abs(diff) < maxDiff) {
|
||||
return diff
|
||||
|
||||
@@ -159,7 +159,6 @@ export class AttackExecution implements Execution {
|
||||
this.troops -= attackerTroopLoss
|
||||
if (this.target.isPlayer()) {
|
||||
this.target.removeTroops(defenderTroopLoss)
|
||||
this.target.removeManpower(defenderTroopLoss)
|
||||
}
|
||||
this._owner.conquer(tileToConquer)
|
||||
this.checkDefenderDead()
|
||||
|
||||
@@ -30,7 +30,7 @@ export class PlayerExecution implements Execution {
|
||||
if (ticks < this.config.numSpawnPhaseTurns()) {
|
||||
return
|
||||
}
|
||||
this.player.addManpower(this.config.manpowerAdditionRate(this.player))
|
||||
this.player.addManpowerReserve(this.config.manpowerAdditionRate(this.player))
|
||||
this.player.addGold(this.config.goldAdditionRate(this.player))
|
||||
this.player.addTroops(this.config.troopAdjustmentRate(this.player))
|
||||
|
||||
|
||||
@@ -196,7 +196,8 @@ export interface Player {
|
||||
outgoingEmojis(): EmojiMessage[]
|
||||
canDonate(recipient: Player): boolean
|
||||
gold(): Gold
|
||||
manpower(): number
|
||||
totalManpower(): number
|
||||
manpowerReserve(): number
|
||||
// Number between 0, 1
|
||||
targetTroopRatio(): number
|
||||
}
|
||||
@@ -224,8 +225,8 @@ export interface MutablePlayer extends Player {
|
||||
donate(recipient: MutablePlayer, troops: number): void
|
||||
addGold(toAdd: Gold): void
|
||||
removeGold(toRemove: Gold): void
|
||||
addManpower(toAdd: number): void
|
||||
removeManpower(toRemove: number): void
|
||||
addManpowerReserve(toAdd: number): void
|
||||
removeManpowerReserve(toRemove: number): void
|
||||
setTargetTroopRatio(target: number): void
|
||||
}
|
||||
|
||||
|
||||
+17
-10
@@ -22,7 +22,8 @@ export class PlayerImpl implements MutablePlayer {
|
||||
|
||||
private _gold: Gold
|
||||
private _troops: number
|
||||
private _targetTroopRatio = .5
|
||||
private _reserves: number
|
||||
private _targetTroopRatio: number
|
||||
|
||||
isTraitor_ = false
|
||||
|
||||
@@ -42,9 +43,12 @@ export class PlayerImpl implements MutablePlayer {
|
||||
|
||||
private sentDonations: Donation[] = []
|
||||
|
||||
constructor(private gs: GameImpl, private readonly playerInfo: PlayerInfo, private _manpower: number) {
|
||||
constructor(private gs: GameImpl, private readonly playerInfo: PlayerInfo, manpower: number) {
|
||||
this._name = playerInfo.name;
|
||||
this._displayerName = processName(this._name)
|
||||
this._targetTroopRatio = .5
|
||||
this._troops = manpower * this._targetTroopRatio;
|
||||
this._reserves = manpower * (1 - this._targetTroopRatio)
|
||||
this._gold = manpower
|
||||
}
|
||||
|
||||
name(): string {
|
||||
@@ -294,14 +298,17 @@ export class PlayerImpl implements MutablePlayer {
|
||||
this._gold -= toRemove
|
||||
}
|
||||
|
||||
manpower(): number {
|
||||
return this._manpower
|
||||
totalManpower(): number {
|
||||
return this._troops + this._reserves
|
||||
}
|
||||
addManpower(toAdd: number): void {
|
||||
this._manpower += toAdd
|
||||
manpowerReserve(): number {
|
||||
return Math.max(1, this._reserves)
|
||||
}
|
||||
removeManpower(toRemove: number): void {
|
||||
this._manpower = Math.max(1, this._manpower - toRemove)
|
||||
addManpowerReserve(toAdd: number): void {
|
||||
this._reserves += toAdd
|
||||
}
|
||||
removeManpowerReserve(toRemove: number): void {
|
||||
this._reserves = Math.max(1, this._reserves - toRemove)
|
||||
}
|
||||
|
||||
targetTroopRatio(): number {
|
||||
@@ -316,7 +323,7 @@ export class PlayerImpl implements MutablePlayer {
|
||||
}
|
||||
|
||||
hash(): number {
|
||||
return simpleHash(this.id()) * (this.manpower() + this.numTilesOwned());
|
||||
return simpleHash(this.id()) * (this.totalManpower() + this.numTilesOwned());
|
||||
}
|
||||
toString(): string {
|
||||
return `Player:{name:${this.info().name},clientID:${this.info().clientID},isAlive:${this.isAlive()},troops:${this._troops},numTileOwned:${this.numTilesOwned()}}]`;
|
||||
|
||||
Reference in New Issue
Block a user