Skip to content

Commit

Permalink
feat(core, backend): 生产速度函数增加参数
Browse files Browse the repository at this point in the history
  • Loading branch information
lovezhangchuangxin committed Dec 3, 2024
1 parent 9c17ecb commit fdb3dc4
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 16 deletions.
1 change: 1 addition & 0 deletions packages/backend/scripts/migrate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const migrate = async () => {
;(structureMap[newStructureId] as ProducerData).produceSpeed =
StructureConfigs[newStructureId].getProduceSpeed?.(
oldStructureData.level,
data.userDataMap,
) || {}
;(structureMap[newStructureId] as ProducerData).consumeSpeed =
StructureConfigs[newStructureId].getConsumeSpeed?.(
Expand Down
14 changes: 11 additions & 3 deletions packages/core/src/processor/loop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,31 @@ export const loop = (userDataMap: UserDataMap) => {
Object.values(userDataMap).forEach((user) => {
Object.values(user.planets).forEach((planet) => {
// 建筑生产
produce(planet)
produce(planet, userDataMap)
})
})
}

/**
* 建筑生产
*/
const produce = (planet: PlanetData) => {
const produce = (planet: PlanetData, userDataMap: UserDataMap) => {
// 每 Tick 开始先把电能置为 0,后续再加上建筑的电能产出
planet.resources.electricity = {
amount: 0,
capacity: 0,
}

// 按优先级处理建筑
const structureIds = Object.keys(planet.structures)
const allStructureIdSet = new Set(Object.keys(StructureConfigs))
const structureIds = Object.keys(planet.structures).filter((id) =>
allStructureIdSet.has(id),
)

structureIds.sort((a, b) => {
if (!StructureConfigs[a] || !StructureConfigs[b]) {
console.log(Object.keys(StructureConfigs))
}
return (
(StructureConfigs[a].priority ?? 1000) -
(StructureConfigs[b].priority ?? 1000)
Expand All @@ -51,6 +58,7 @@ const produce = (planet: PlanetData) => {
structure,
StructureConfigs,
planet,
userDataMap,
)
if (result && (structure as ProducerData).consumeSpeed?.electricity) {
changeResourcesList.push(params.changeResources as any)
Expand Down
8 changes: 7 additions & 1 deletion packages/core/src/processor/processor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,11 @@ export const processor = (
const planetData = userDataMap[userId].planets[planetId]
const data = planetData.structures[structureId]

return operationHanlder?.(params, data, StructureConfigs, planetData)
return operationHanlder?.(
params,
data,
StructureConfigs,
planetData,
userDataMap,
)
}
34 changes: 27 additions & 7 deletions packages/core/src/structure/producer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,16 @@ export const ProducerOperation: StructureOperationObject = {
/**
* 初始化
*/
_init(_, data, structureConfigs, planetData) {
if (!StructureBaseOperation._init(_, data, structureConfigs, planetData)) {
_init(_, data, structureConfigs, planetData, userDataMap) {
if (
!StructureBaseOperation._init(
_,
data,
structureConfigs,
planetData,
userDataMap,
)
) {
return false
}
return true
Expand All @@ -21,23 +29,35 @@ export const ProducerOperation: StructureOperationObject = {
/**
* 更新
*/
_update(_, data, structureConfigs, planetData) {
return ProducerOperation._produce(_, data, structureConfigs, planetData)
_update(_, data, structureConfigs, planetData, userDataMap) {
return ProducerOperation._produce(
_,
data,
structureConfigs,
planetData,
userDataMap,
)
},

/**
* 升级
*/
upgrade(_, data, structureConfigs, planetData) {
upgrade(_, data, structureConfigs, planetData, userDataMap) {
if (
!StructureBaseOperation.upgrade(_, data, structureConfigs, planetData)
!StructureBaseOperation.upgrade(
_,
data,
structureConfigs,
planetData,
userDataMap,
)
) {
return false
}

// 升级成功,更新资源产量和消耗
const config = structureConfigs[data.id] as ProducerConfig
const produceSpeed = config.getProduceSpeed?.(data.level) ?? {}
const produceSpeed = config.getProduceSpeed?.(data.level, userDataMap) ?? {}
const consumeSpeed = config.getConsumeSpeed?.(data.level) ?? {}
const structureData = data as ProducerData
structureData.produceSpeed = produceSpeed
Expand Down
20 changes: 16 additions & 4 deletions packages/core/src/structure/storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ export const StorageOperation: StructureOperationObject = {
/**
* 初始化
*/
_init(params, data, structureConfigs, planetData) {
_init(params, data, structureConfigs, planetData, userDataMap) {
if (
!StructureBaseOperation._init(params, data, structureConfigs, planetData)
!StructureBaseOperation._init(
params,
data,
structureConfigs,
planetData,
userDataMap,
)
) {
return false
}
Expand All @@ -29,9 +35,15 @@ export const StorageOperation: StructureOperationObject = {
/**
* 升级
*/
upgrade(_, data, structureConfigs, planetData) {
upgrade(_, data, structureConfigs, planetData, userDataMap) {
if (
!StructureBaseOperation.upgrade(_, data, structureConfigs, planetData)
!StructureBaseOperation.upgrade(
_,
data,
structureConfigs,
planetData,
userDataMap,
)
) {
return false
}
Expand Down
6 changes: 5 additions & 1 deletion packages/core/src/structure/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ResourceType } from '../config/resource'
import { UserDataMap } from '../utils'

/**
* 建筑 id
Expand Down Expand Up @@ -75,7 +76,10 @@ export interface ProducerConfig extends StructureBaseConfig {
/**
* 获取产出资源速度
*/
getProduceSpeed?: (level: number) => Partial<Record<ResourceType, number>>
getProduceSpeed?: (
level: number,
userDataMap: UserDataMap,
) => Partial<Record<ResourceType, number>>
/**
* 获取消耗资源速度
*/
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/utils/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ export type StructureOperationFunc = (
data: AllStructureData,
structureConfigs: StructureConfig,
planetData: PlanetData,
userDataMap: UserDataMap,
) => boolean

/**
Expand Down

0 comments on commit fdb3dc4

Please sign in to comment.