WBAN6KIPMKEXHGGQGE3TB6G7YXHGOPT3HRCEUYZKLNJCJBMR7JHAC GJGKS2YPL6XOT4CLQ2NVHUU2W7MDHYE2XC77WWRGPBCPSTWZ5GIAC JUW5PLQUDZE4A45Y4HJUKQUILMFKFAGAY2XZG4ALTQWLWPX4H4DQC ZHOSSPNKGFIKSFPDXCGLMSYMMX2J433VU2BUUWBKUH7TOLQUBSPQC HUH4SI4HXIP72KQSJP2I4ELHX5KUQZM7FFGKZZGJ33DF7E3JHMYQC PEQNQJYNX7QOEM67QH2UF7VZ43AXHUBO76DN77L43MEFRHVDBO5QC FLGWAOMMMGBO5ICWD3SXBOGJQA6LL2ZHTIQIMGY5VNFAETKDPPYAC HXHNGFB2VCXB6YXDND35HJI22GBJC3QTSUR2TK3M3LXGJHVNXVHAC L72HFM6IYLNHEFEIFOQQQUAGMY2RN4POCV3Q3SMQERSQBMEZ5J3QC WTINQMZSNRT5MSAXLMMZVM6OU6TMD4AP4OEUYAXZUFNY5IWFLZSQC SJGRJWVRMIYRCSQUR4LMS2APZNSJ64JAW7647NYTB52REONXVD2QC Z5I5KK7NX6RS23QAB7ISLQCM5Z6TMVZK532NPSE7CO4MNXNKVKMAC DPJCZOPIKAKQIS4YRXETBSJA5ZTL2KQESSJE2TEZFLRQARXUVFXQC EMED7UWAGESRTWJJWVXRL27O4XMBGZDDAU4LNVF3MQAYKFKRDNXQC GZRMSSTEWT3T2JERC7WCVT727X237UA6MXWVT6OSV5D5BRD4UOGQC Z3E7XJOW6NSBDYRDKSGTOAEJSPATAUX4JUFCL4DIL3372GL4K52QC 6EXHALB3E5HP3IQVC47M4RVZE2JERJHX37GOOHPYIVAFBWSWUX7QC N2M7CWXHD722QWM6IIIEOD66YMR3SSZEJZLDCGEIPXRCVNF6YBSQC 3UFL673QX2JG7KHTAM7DFH4BBYVHDNMXBS2RW45G3JBNFZFLSRRQC WPC667PRTGRE7BNP6E7ZCQIKXYMIHJT3LUTTQT7VX2HQVRBXNIKAC DHO4JCJIELKX4R42XXAMAHVQTTE6OWULLP2QF4BXO3UWC5UTMSMAC }, [gameState.playerSave.allocatedPointNodeSet, gameState.playerSave.availableSp]);
}, [gameState.playerSave.allocatedPointNodeSet, gameState.playerSave.availableSp]);tabViews[2] = useMemo(() => {return (<DebugTabselectedPointNode={gameState.playerUI.selectedPointNode}allocatedPointNodeSet={gameState.playerSave.allocatedPointNodeSet}worldGen={gameState.worldGen}availableSp={gameState.playerSave.availableSp}/>);}, [gameState.playerUI.selectedPointNode,gameState.playerSave.allocatedPointNodeSet,gameState.worldGen,gameState.playerSave.availableSp]);
import React, { useEffect, useState } from "react";import { PointNodeRef, ResourceType, WorldGenState } from "../data/GameState";import { HashSet } from "../lib/util/data_structures/hash";import { canAllocate } from "../data/lib/Neighbors";type Props = {selectedPointNode?: PointNodeRefallocatedPointNodeSet: HashSet<PointNodeRef>,worldGen: WorldGenState,availableSp: number,}export function DebugTab({selectedPointNode,allocatedPointNodeSet,worldGen,availableSp,}: Props) {const [history, setHistory] = useState<PointNodeRef[]>([]);useEffect(() => {if (!selectedPointNode) return;setHistory((history) => [...history, selectedPointNode]);}, [selectedPointNode]);if (!selectedPointNode) {return (<> </>)}const pointNodeGen = worldGen.zLevels[selectedPointNode.z]!.chunks.get(selectedPointNode.chunkCoord)!.pointNodes.get(selectedPointNode.pointNodeCoord)!const isAllocated = (allocatedPointNodeSet.contains(selectedPointNode));const canBeAllocated: string = canAllocate(selectedPointNode, worldGen, allocatedPointNodeSet, availableSp);let nodeDescription: string = "Nothing (empty node)";if (pointNodeGen.resourceType !== ResourceType.Nothing) {nodeDescription = `${pointNodeGen.resourceAmount} ${pointNodeGen.resourceModifier} ${pointNodeGen.resourceType}`}return (<><h1>Current</h1><div>Z={selectedPointNode.z}</div><div>Chunk={selectedPointNode.chunkCoord.x},{selectedPointNode.chunkCoord.y}</div><div>Node={selectedPointNode.pointNodeCoord.x},{selectedPointNode.pointNodeCoord.y}</div><br></br><div>Allocated? {isAllocated ? "yes" : "no"} </div><br></br><div>Can be allocated? {canBeAllocated} </div><br></br><div> Stats: </div><div> {nodeDescription} </div><h3>Previous</h3>{history.slice(0, -1).map((pointNodeRef: PointNodeRef, i) => {return (<div key={i}><div>Z={pointNodeRef.z} { }Chunk={pointNodeRef.chunkCoord.x},{pointNodeRef.chunkCoord.y} { }Node={pointNodeRef.pointNodeCoord.x},{pointNodeRef.pointNodeCoord.y}</div></div>);}).reverse()}</>);}
<h1>Current</h1><div>Z: {selectedPointNode.z} . Chunk: {selectedPointNode.chunkCoord.x}, {selectedPointNode.chunkCoord.y} . Node: {selectedPointNode.pointNodeCoord.x}, {selectedPointNode.pointNodeCoord.y} .</div><br></br><div>Allocated? {isAllocated ? "yes" : "no"} </div><div>Can be allocated? {canBeAllocated} </div><br></br><div> Stats: </div>
<h1>Stats</h1>
<h2>Previous</h2>{history.slice(0, -1).map((pointNodeRef: PointNodeRef, i) => {return (<div key={i}>Chunk ({pointNodeRef.chunkCoord.x},{pointNodeRef.chunkCoord.y}) at ({pointNodeRef.pointNodeCoord.x},{pointNodeRef.pointNodeCoord.y})</div>);}).reverse()}
<h3>Allocated?</h3>{isAllocated ? "yes" : "no"}<h3>Can be allocated?</h3>{canBeAllocated}
</>)}
<br></br><div>(Hint: You won't run out of skill points, but they come in batches - try to use the fewest you can!)</div></>)}<br></br><h3> Available SP: </h3><div>{remainingPoints}</div>{(remainingPoints === 0) ? (<div><br></br>(Start a quest first!)</div>) : (<></>) }