This commit is contained in:
azykov@mail.ru
2026-08-31 21:37:21 +03:00
parent af4d68e1c8
commit 2860bb837a
6 changed files with 36 additions and 12 deletions
+8 -4
View File
@@ -108,13 +108,17 @@ export const GameCanvas = function ({
nodes2d.map((node2d) => ( nodes2d.map((node2d) => (
<NodeCard <NodeCard
ref={(el) => { ref={(el) => {
if (el) nodeElsRef.current.set(node2d.id, el); if (el)
else nodeElsRef.current.delete(node2d.id); nodeElsRef.current.set(node2d.id, el);
else
nodeElsRef.current.delete(node2d.id);
}} }}
onSocketRef={(type, index, el) => { onSocketRef={(type, index, el) => {
const socketKey = `${node2d.id}.${type}.${index}`; const socketKey = `${node2d.id}.${type}.${index}`;
if (el) socketElsRef.current.set(socketKey, el); if (el)
else socketElsRef.current.delete(socketKey); socketElsRef.current.set(socketKey, el);
else
socketElsRef.current.delete(socketKey);
}} }}
game={game} game={game}
key={node2d.id} key={node2d.id}
+1 -1
View File
@@ -17,7 +17,7 @@ export const LinkLine = function ({ from, to }: Props) {
return null; return null;
return ( return (
<svg style={{zIndex: 1000}}> <svg>
<defs> <defs>
<marker <marker
id={markerId} id={markerId}
+3 -3
View File
@@ -25,7 +25,7 @@ const NodeCard = forwardRef<HTMLDivElement, Props>(function NodeCard({ node2d, s
<div <div
ref={ref} ref={ref}
className={`node node--${node.behaviour.kind}${selected ? ' is-selected' : ''}`} className={`node node--${node.behaviour.kind}${selected ? ' is-selected' : ''}`}
style={{ left: node2d.position.x, top: node2d.position.y, width: 100 }} style={{ left: node2d.position.x, top: node2d.position.y }}
onClick={handleClick} onClick={handleClick}
> >
<div className="node__sockets node__sockets--input"> <div className="node__sockets node__sockets--input">
@@ -54,7 +54,7 @@ const NodeCard = forwardRef<HTMLDivElement, Props>(function NodeCard({ node2d, s
)) ))
} }
</div> </div>
<div className="node__id">{node.id}</div> <div className="node__id">#{node.id}</div>
<div className="node__title">{node.name}</div> <div className="node__title">{node.name}</div>
<div className="node__kind">{node.behaviour.kind}</div> <div className="node__kind">{node.behaviour.kind}</div>
{ {
@@ -70,7 +70,7 @@ const NodeCard = forwardRef<HTMLDivElement, Props>(function NodeCard({ node2d, s
} }
<div className="node__links"> <div className="node__links">
{ {
info.links.map((link) => <div key={`${link.target}/${link.resource}`}>{link.target}/{link.resource}</div>) info.links.map((link) => <div key={`${link.target}/${link.resource}`}>→{link.target}/{link.resource}</div>)
} }
</div> </div>
</div> </div>
+1 -1
View File
@@ -65,7 +65,7 @@ export abstract class Behaviour {
export type ResourceUsageRule = { export type ResourceUsageRule = {
resource: Resource; resource: Resource;
speed: number; // per tick speed: number; // per second
} }
export class Converter extends Behaviour { export class Converter extends Behaviour {
+20
View File
@@ -202,6 +202,16 @@ select {
.node--converter { border-left-color: var(--accent-converter); } .node--converter { border-left-color: var(--accent-converter); }
.node--consumer { border-left-color: var(--accent-consumer); } .node--consumer { border-left-color: var(--accent-consumer); }
.node__id {
font-family: var(--display);
font-weight: 200;
font-size: 10px;
color: var(--ink);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.node__title { .node__title {
font-family: var(--display); font-family: var(--display);
font-weight: 600; font-weight: 600;
@@ -230,6 +240,16 @@ select {
white-space: nowrap; white-space: nowrap;
} }
.node__links {
font-size: 11px;
background: #171613;
border: 1px solid var(--line);
border-radius: 3px;
padding: 4px 6px;
letter-spacing: 0.02em;
white-space: nowrap;
}
.node__sockets { .node__sockets {
position: absolute; position: absolute;
top: 0; top: 0;
+3 -3
View File
@@ -5,7 +5,7 @@ export const defaultGame: () => SerializedGame = () => ({
nodes: [ nodes: [
{ {
id: 'forest', id: 'forest',
name: 'Forest', name: 'Лес',
behaviour: { behaviour: {
id: 'forest.1', id: 'forest.1',
kind: 'converter', kind: 'converter',
@@ -28,7 +28,7 @@ export const defaultGame: () => SerializedGame = () => ({
}, },
{ {
id: 'sawmill', id: 'sawmill',
name: 'Sawmill', name: 'Лесопилка',
behaviour: { behaviour: {
id: 'sawmill.1', id: 'sawmill.1',
kind: 'converter', kind: 'converter',
@@ -53,7 +53,7 @@ export const defaultGame: () => SerializedGame = () => ({
}, },
{ {
id: 'burner', id: 'burner',
name: 'Burner', name: 'Магазин досок',
behaviour: { behaviour: {
id: 'burner.1', id: 'burner.1',
kind: 'converter', kind: 'converter',