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