growth determined by manpower reserves

This commit is contained in:
Evan
2024-10-27 11:55:46 -07:00
parent 2afecf0f39
commit 7068758ae3
5 changed files with 26 additions and 19 deletions
+4 -4
View File
@@ -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
-1
View File
@@ -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()
+1 -1
View File
@@ -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))
+4 -3
View File
@@ -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
View File
@@ -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()}}]`;