|
|
|
|
@ -1,5 +1,6 @@ |
|
|
|
|
import { Node } from 'cc'; |
|
|
|
|
import { TableNames } from '../../game/ConfigTableData'; |
|
|
|
|
import { ConstNumType } from '../../game/GameDataEnums'; |
|
|
|
|
|
|
|
|
|
/** ui_textList 格子状态 */ |
|
|
|
|
export enum TextListCellState { |
|
|
|
|
@ -25,10 +26,20 @@ const TEMP_NODE = 'temp'; |
|
|
|
|
/** 空装饰格下标(grid17):预制体底图保持关闭,逻辑不处理 */ |
|
|
|
|
const BLANK_INDEX = 17; |
|
|
|
|
|
|
|
|
|
/** 一次待开启推进:新生待解锁格,以及本次要累加到这些格子数字上的等级 */ |
|
|
|
|
export interface TextListPromoteResult { |
|
|
|
|
/** 新变成待开启、需要出字的格子 */ |
|
|
|
|
readonly born: readonly number[]; |
|
|
|
|
/** 本次解锁对应的显示等级加值(Const 39);无加值为 0 */ |
|
|
|
|
readonly levelAdd: number; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 按关卡 normalland / tolockland 管理 ui_textList 格子状态与拖入解锁。 |
|
|
|
|
* normalland 为开启且开局不放字;tolockland 为待开启(有字、不能拖、靠同类型同等级合成打开)。 |
|
|
|
|
* 待开启被合成后自身变为开启,上下左右的未解锁格变为待开启。其余为未解锁。 |
|
|
|
|
* 每局记录解锁次数,bind 时清零。第 1 次读 Const 39 的 index 0,依次类推;超出则用最后一项。 |
|
|
|
|
* 该加值累加到本次上下左右新待解锁格的数字等级上。 |
|
|
|
|
* grid17 是空装饰格,不刷底、不出字、不可拖放。名为 temp 的节点跳过。 |
|
|
|
|
* 格子上的字块是背包槽位数据(BattleBagSession),由视图按槽位记录生成标准 TextGrid; |
|
|
|
|
* 拖拽预览、合成解锁走既有背包管线,本类只负责格子底图状态与解锁规则。 |
|
|
|
|
@ -44,6 +55,10 @@ export class TextListLandHost { |
|
|
|
|
private readonly _open: number[] = []; |
|
|
|
|
/** 待解锁下标(开启但不能拖) */ |
|
|
|
|
private readonly _gate: number[] = []; |
|
|
|
|
/** 本局已解锁次数;bind / clear 清零。下次解锁用这个下标读 Const 39 */ |
|
|
|
|
private _unlockCount = 0; |
|
|
|
|
/** 最近一次解锁的邻格等级加值,供本条解锁日志使用 */ |
|
|
|
|
private _lastLevelAdd = 0; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 读取关卡并刷新格子底图。 |
|
|
|
|
@ -111,6 +126,8 @@ export class TextListLandHost { |
|
|
|
|
this._headless = false; |
|
|
|
|
this._open.length = 0; |
|
|
|
|
this._gate.length = 0; |
|
|
|
|
this._unlockCount = 0; |
|
|
|
|
this._lastLevelAdd = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -164,13 +181,13 @@ export class TextListLandHost { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 待开启格被同类型同等级合成:自身改为开启,上下左右的未解锁格改为待开启。 |
|
|
|
|
* 成功解锁计一次,并按本局次数取 Const 39 等级加值。 |
|
|
|
|
* @param gateIndex 待开启格下标 |
|
|
|
|
* @returns 新变成待开启、需要生成文字的格子 |
|
|
|
|
*/ |
|
|
|
|
promoteAround(gateIndex: number): number[] { |
|
|
|
|
promoteAround(gateIndex: number): TextListPromoteResult { |
|
|
|
|
if (this.isBlank(gateIndex) || this.stateOf(gateIndex) !== TextListCellState.OpenNoDrag) { |
|
|
|
|
console.log('[TextListLand] 非待开启格', gateIndex); |
|
|
|
|
return []; |
|
|
|
|
return { born: [], levelAdd: 0 }; |
|
|
|
|
} |
|
|
|
|
const gateAt = this._gate.indexOf(gateIndex); |
|
|
|
|
if (gateAt >= 0) this._gate.splice(gateAt, 1); |
|
|
|
|
@ -192,7 +209,39 @@ export class TextListLandHost { |
|
|
|
|
} |
|
|
|
|
born.push(index); |
|
|
|
|
} |
|
|
|
|
return born; |
|
|
|
|
const levelAdd = this._unlockLevelAdd(this._unlockCount); |
|
|
|
|
this._lastLevelAdd = levelAdd; |
|
|
|
|
this._unlockCount++; |
|
|
|
|
return { born, levelAdd }; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 玩家本次解锁只打一条:解锁次数、上下左右累加等级、各新生格随机等级。AI 不打印。 |
|
|
|
|
* @param rolls 各格随机等级,形如「槽:等级」;没有新生格传空数组 |
|
|
|
|
*/ |
|
|
|
|
printUnlock(rolls: readonly string[]): void { |
|
|
|
|
if (this._headless) return; |
|
|
|
|
const randomText = rolls.length > 0 ? rolls.join(',') : '无'; |
|
|
|
|
console.log('[TextListLand] 玩家 解锁次数', this._unlockCount, '上下左右累加等级', this._lastLevelAdd, '随机等级', randomText); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Const 39:第 1 次解锁读 index 0,依次类推;下标超出数组则读最后一项。 |
|
|
|
|
* @param unlockIndex 本次解锁前已解锁次数 |
|
|
|
|
*/ |
|
|
|
|
private _unlockLevelAdd(unlockIndex: number): number { |
|
|
|
|
const list = gg.data.table.getConstArray(ConstNumType.UnlockLandLevelAdd); |
|
|
|
|
if (!list.length) { |
|
|
|
|
console.log('[TextListLand] Const 解锁格子等级加值为空', ConstNumType.UnlockLandLevelAdd); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
const index = unlockIndex >= 0 && unlockIndex < list.length ? unlockIndex : list.length - 1; |
|
|
|
|
const value = Math.floor(Number(list[index])); |
|
|
|
|
if (!Number.isFinite(value) || value < 0) { |
|
|
|
|
console.log('[TextListLand] 解锁格子等级加值非法', unlockIndex, list[index]); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
return value; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|