css
This commit is contained in:
@@ -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}
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user