This circuit system...
Posted: Sat Oct 06, 2018 1:35 pm
Sorry for the subject title...
TL;DR: something has to be done with the circuit system... - More discussion than suggestion...
----
example: ----
Circuits are complicated, confusing, visually annoying. But dunno what do to would be the best.
It's not the same fun as creating "circuits" in Minecraft. For example using chests as a computer memory is simply ridiculous.
Maybe there should be an extra toggle option to display the circuit stuff, i.e. including the wires to hide the wire salad.
Maybe there should be just some kind of computer box for circuits instead of the comparators.
The computer box on the other hand should either use a simple BASIC*) "script" interpreter or some kind of graphical programming, using 1x2-elements (input&output) and wire tiles in a grid, perhaps making a kind of schematic...
The computer "building" should be 2x2 in size, having 2 inputs and 2 outputs for red and green networks each.
Both solutions are ridiculous much work though. But if you worry about performance: it would still be more efficent than the current higgledy-piggledy wiring.
----
*) would look like this:
IF (#<channel>:<signal><operation>#<channel>:<value/signal> [{AND|OR} #<channel>:<signal><operation>#<channel>:<value/signal>]) THEN
- might/can only take up to 2 logically combinable comparsions - to keep conditional branching compact in case.
"channel" is one of "#A", "#B", "#Ar", "#Ag", "#Br", "#Bg" - the input connectors, represented by red, green or yellow "A" or "B" symbols in the program editor GUI, where "#A" and "#B" are adding the same signals from the red and green network
Signals and operations are graphically selected from the list, they may also be "EVERY", "ANY" and "EACH" in case.
(Optimisation: there are several variations of the instruction: "IF (...) THEN", "IF (... AND ...) THEN" and "IF (... OR ...) THEN")
- there maybe also IS_NULL and IS_NOT_NULL as a quick operation option
ELSE_IF (<just the same as IF>) THEN
short for "IF ... THEN {...} ELSE { IF ... THEN ... END_IF } END_IF"
ELSE
Done if all IF/ELSEIF statements before are not true
END_IF
OUT #<channel>, {#<channel>:<signal>|value}
Puts out/changes the given signal or value to the channels "#C", "#D", "#Cr", "#Cg", "#Dr", "#Dg"
You would have to use "OUT #..., #...:EVERY" to "pipe" all signals from the input to the output, but better should only "pipe" what you need.
IN #<channel>:<signal><operation>{#<channel>:<signal>|value}
Manipulates incoming signals like the arithmetic combinator. After referring to the given channel, the signal is manipulated in the given way, but only internally.
END
Stops the program interpretation; at this point all signals are really put out to the networks
<Label>:
A jump mark, just a number from 1 to 9. Programs shouldn't be very large anyway.
GOTO <label>
Continues the program at the given label. You can only jump to labels behind your GOTO line, therefore you can't create loops except externally via your wiring. Only needed if/because you can't make random AND/OR comparsions with the IF statement.
TL;DR: something has to be done with the circuit system... - More discussion than suggestion...
----
example: ----
Circuits are complicated, confusing, visually annoying. But dunno what do to would be the best.
It's not the same fun as creating "circuits" in Minecraft. For example using chests as a computer memory is simply ridiculous.
Maybe there should be an extra toggle option to display the circuit stuff, i.e. including the wires to hide the wire salad.
Maybe there should be just some kind of computer box for circuits instead of the comparators.
The computer box on the other hand should either use a simple BASIC*) "script" interpreter or some kind of graphical programming, using 1x2-elements (input&output) and wire tiles in a grid, perhaps making a kind of schematic...
The computer "building" should be 2x2 in size, having 2 inputs and 2 outputs for red and green networks each.
Both solutions are ridiculous much work though. But if you worry about performance: it would still be more efficent than the current higgledy-piggledy wiring.
----
*) would look like this:
IF (#<channel>:<signal><operation>#<channel>:<value/signal> [{AND|OR} #<channel>:<signal><operation>#<channel>:<value/signal>]) THEN
- might/can only take up to 2 logically combinable comparsions - to keep conditional branching compact in case.
"channel" is one of "#A", "#B", "#Ar", "#Ag", "#Br", "#Bg" - the input connectors, represented by red, green or yellow "A" or "B" symbols in the program editor GUI, where "#A" and "#B" are adding the same signals from the red and green network
Signals and operations are graphically selected from the list, they may also be "EVERY", "ANY" and "EACH" in case.
(Optimisation: there are several variations of the instruction: "IF (...) THEN", "IF (... AND ...) THEN" and "IF (... OR ...) THEN")
- there maybe also IS_NULL and IS_NOT_NULL as a quick operation option
ELSE_IF (<just the same as IF>) THEN
short for "IF ... THEN {...} ELSE { IF ... THEN ... END_IF } END_IF"
ELSE
Done if all IF/ELSEIF statements before are not true
END_IF
OUT #<channel>, {#<channel>:<signal>|value}
Puts out/changes the given signal or value to the channels "#C", "#D", "#Cr", "#Cg", "#Dr", "#Dg"
You would have to use "OUT #..., #...:EVERY" to "pipe" all signals from the input to the output, but better should only "pipe" what you need.
IN #<channel>:<signal><operation>{#<channel>:<signal>|value}
Manipulates incoming signals like the arithmetic combinator. After referring to the given channel, the signal is manipulated in the given way, but only internally.
END
Stops the program interpretation; at this point all signals are really put out to the networks
<Label>:
A jump mark, just a number from 1 to 9. Programs shouldn't be very large anyway.
GOTO <label>
Continues the program at the given label. You can only jump to labels behind your GOTO line, therefore you can't create loops except externally via your wiring. Only needed if/because you can't make random AND/OR comparsions with the IF statement.