mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-07-16 02:29:38 +00:00
thread_split: convert all tile to tileref
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Difficulty, GameType, Gold, Player, PlayerID, PlayerInfo, TerraNullius, Tick, Tile, Unit, UnitInfo, UnitType } from "../game/Game";
|
||||
import { Difficulty, GameType, Gold, Player, PlayerID, PlayerInfo, TerraNullius, Tick, UnitInfo, UnitType } from "../game/Game";
|
||||
import { Colord, colord } from "colord";
|
||||
import { preprodConfig } from "./PreprodConfig";
|
||||
import { prodConfig } from "./ProdConfig";
|
||||
@@ -6,6 +6,7 @@ import { consolex } from "../Consolex";
|
||||
import { GameConfig } from "../Schemas";
|
||||
import { DefaultConfig } from "./DefaultConfig";
|
||||
import { DevConfig, DevServerConfig } from "./DevConfig";
|
||||
import { GameMap, TileRef } from "../game/GameMap";
|
||||
|
||||
export enum GameEnv {
|
||||
Dev,
|
||||
@@ -61,7 +62,7 @@ export interface Config {
|
||||
goldAdditionRate(player: Player): number
|
||||
troopAdjustmentRate(player: Player): number
|
||||
attackTilesPerTick(attckTroops: number, attacker: Player, defender: Player | TerraNullius, numAdjacentTilesWithEnemy: number): number
|
||||
attackLogic(attackTroops: number, attacker: Player, defender: Player | TerraNullius, tileToConquer: Tile): {
|
||||
attackLogic(gm: GameMap, attackTroops: number, attacker: Player, defender: Player | TerraNullius, tileToConquer: TileRef): {
|
||||
attackerTroopLoss: number,
|
||||
defenderTroopLoss: number,
|
||||
tilesPerTickUsed: number
|
||||
@@ -81,7 +82,7 @@ export interface Config {
|
||||
donateCooldown(): Tick
|
||||
defaultDonationAmount(sender: Player): number
|
||||
unitInfo(type: UnitType): UnitInfo
|
||||
tradeShipGold(src: Unit, dst: Unit): Gold
|
||||
tradeShipGold(dist: number): Gold
|
||||
tradeShipSpawnRate(): number
|
||||
defensePostRange(): number
|
||||
defensePostDefenseBonus(): number
|
||||
@@ -94,7 +95,7 @@ export interface Theme {
|
||||
territoryColor(playerInfo: PlayerInfo): Colord;
|
||||
borderColor(playerInfo: PlayerInfo): Colord;
|
||||
defendedBorderColor(playerInfo: PlayerInfo): Colord;
|
||||
terrainColor(tile: Tile): Colord;
|
||||
terrainColor(gm: GameMap, tile: TileRef): Colord;
|
||||
backgroundColor(): Colord;
|
||||
falloutColor(): Colord
|
||||
font(): string;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Difficulty, GameType, Gold, MutableTile, Player, PlayerInfo, PlayerType, TerrainType, TerraNullius, Tick, Tile, Unit, UnitInfo, UnitType } from "../game/Game";
|
||||
import { Difficulty, GameType, Gold, Player, PlayerInfo, PlayerType, TerrainType, TerraNullius, Tick, UnitInfo, UnitType } from "../game/Game";
|
||||
import { GameMap, TileRef } from "../game/GameMap";
|
||||
import { GameConfig } from "../Schemas";
|
||||
import { assertNever, distSort, manhattanDist, simpleHash, within } from "../Util";
|
||||
import { assertNever, within } from "../Util";
|
||||
import { Config, ServerConfig, Theme } from "./Config";
|
||||
import { pastelTheme } from "./PastelTheme";
|
||||
|
||||
@@ -62,8 +63,7 @@ export class DefaultConfig implements Config {
|
||||
spawnNPCs(): boolean {
|
||||
return true
|
||||
}
|
||||
tradeShipGold(src: Unit, dst: Unit): Gold {
|
||||
const dist = manhattanDist(src.tile().cell(), dst.tile().cell())
|
||||
tradeShipGold(dist: number): Gold {
|
||||
return 10000 + 100 * Math.pow(dist, 1.1)
|
||||
}
|
||||
tradeShipSpawnRate(): number {
|
||||
@@ -186,10 +186,10 @@ export class DefaultConfig implements Config {
|
||||
}
|
||||
theme(): Theme { return pastelTheme; }
|
||||
|
||||
attackLogic(attackTroops: number, attacker: Player, defender: Player | TerraNullius, tileToConquer: MutableTile): { attackerTroopLoss: number; defenderTroopLoss: number; tilesPerTickUsed: number } {
|
||||
attackLogic(gm: GameMap, attackTroops: number, attacker: Player, defender: Player | TerraNullius, tileToConquer: TileRef): { attackerTroopLoss: number; defenderTroopLoss: number; tilesPerTickUsed: number } {
|
||||
let mag = 0
|
||||
let speed = 0
|
||||
const type = tileToConquer.terrain().type()
|
||||
const type = gm.terrainType(tileToConquer)
|
||||
switch (type) {
|
||||
case TerrainType.Plains:
|
||||
mag = 80
|
||||
@@ -209,7 +209,7 @@ export class DefaultConfig implements Config {
|
||||
// TODO
|
||||
// mag *= tileToConquer.defenseBonus(attacker)
|
||||
// speed *= tileToConquer.defenseBonus(attacker)
|
||||
if (tileToConquer.hasFallout()) {
|
||||
if (gm.hasFallout(tileToConquer)) {
|
||||
mag *= this.falloutDefenseModifier()
|
||||
speed *= this.falloutDefenseModifier()
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { Colord, colord, random } from "colord";
|
||||
import { PlayerID, PlayerInfo, TerrainType, Tile } from "../game/Game";
|
||||
import { Game, PlayerID, PlayerInfo, TerrainType } from "../game/Game";
|
||||
import { Theme } from "./Config";
|
||||
import { time } from "console";
|
||||
import { PseudoRandom } from "../PseudoRandom";
|
||||
import { simpleHash } from "../Util";
|
||||
import { GameMap, TileRef } from "../game/GameMap";
|
||||
|
||||
export const pastelTheme = new class implements Theme {
|
||||
|
||||
@@ -154,19 +155,19 @@ export const pastelTheme = new class implements Theme {
|
||||
})
|
||||
}
|
||||
|
||||
terrainColor(tile: Tile): Colord {
|
||||
let mag = tile.terrain().magnitude()
|
||||
if (tile.terrain().isShore()) {
|
||||
terrainColor(gm: GameMap, tile: TileRef): Colord {
|
||||
let mag = gm.magnitude(tile)
|
||||
if (gm.isShore(tile)) {
|
||||
return this.shore
|
||||
}
|
||||
switch (tile.terrain().type()) {
|
||||
switch (gm.terrainType(tile)) {
|
||||
case TerrainType.Ocean:
|
||||
case TerrainType.Lake:
|
||||
const w = this.water.rgba
|
||||
if (tile.terrain().isShorelineWater()) {
|
||||
if (gm.isShoreline(tile) && gm.isWater(tile)) {
|
||||
return this.shorelineWater
|
||||
}
|
||||
if (tile.terrain().magnitude() < 7) {
|
||||
if (gm.magnitude(tile) < 7) {
|
||||
return colord({
|
||||
r: Math.max(w.r - 7 + mag, 0),
|
||||
g: Math.max(w.g - 7 + mag, 0),
|
||||
|
||||
Reference in New Issue
Block a user