Implement usage of save_to field.

This commit is contained in:
Sergio Martínez Portela 2020-05-29 13:32:05 +02:00
parent 948a04c78f
commit a2bcf79309
18 changed files with 490 additions and 208 deletions

View File

@ -400,11 +400,9 @@ public class CanvasView extends View implements PartGrid {
@Override
@Nullable
public BooleanInputConnector getBooleanInputConnectorOn(int x, int y) {
// If no part was found, do the same for connectors
for (int i = parts.size() - 1; i >= 0; i--){
final Part part = parts.get(i);
// Then with input ones
for (InputConnector inputConnector : part.getInputConnectors()){
BooleanInputConnector booleanInputConnector;
if (inputConnector instanceof BooleanInputConnector){
@ -426,6 +424,25 @@ public class CanvasView extends View implements PartGrid {
return null;
}
@Override
public AnyInputConnector getAnyInputConnectorOn(int x, int y) {
for (int i = parts.size() - 1; i >= 0; i--){
final Part part = parts.get(i);
for (InputConnector inputConnector : part.getInputConnectors()){
if (!(inputConnector instanceof AnyInputConnector)) {
continue;
}
if (inputConnector.containsPoint(x, y)){
return (AnyInputConnector) inputConnector;
}
}
}
return null;
}
@Override
@Nullable
public StringInputConnector getStringInputConnectorOn(int x, int y) {

View File

@ -58,9 +58,10 @@ public class SignalListenerManager implements ProgramakerSignalListener {
remainingListeners.remove(listener);
if (remainingListeners.size() == 0) {
ProgramakerListeningChannel channel = idToChannel.get(id);
channel.stop();
idToChannel.remove(id);
channelToListener.remove(id);
channel.stop();
}
}
}
@ -69,6 +70,15 @@ public class SignalListenerManager implements ProgramakerSignalListener {
Log.w(LogTag, "Connection lost to (bridge="+bridgeId+",key="+key + ")");
Tuple2<String, String> id = new Tuple2<>(bridgeId, key);
// Check that there is still someone listening
if (!this.channelToListener.containsKey(id)) {
return;
}
if (this.channelToListener.get(id).size() == 0) {
this.channelToListener.remove(id);
return;
}
// On disconnect disable the connection, wait 2 seconds and retry
idToChannel.put(id, null);

View File

@ -2,6 +2,7 @@ package com.codigoparallevar.minicards;
import com.codigoparallevar.minicards.types.PartGrid;
import com.codigoparallevar.minicards.types.Selectable;
import com.codigoparallevar.minicards.types.connectors.input.AnyInputConnector;
import com.codigoparallevar.minicards.types.functional.Tuple2;
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
@ -34,6 +35,16 @@ class StubPartGrid implements PartGrid {
return null;
}
@Override
public AnyInputConnector getAnyInputConnectorOn(int x, int y) {
return null;
}
@Override
public StringInputConnector getStringInputConnectorOn(int xEnd, int yEnd) {
return null;
}
@Override
public Tuple2<Integer, Integer> getCenteredOn() {
return null;
@ -43,8 +54,4 @@ class StubPartGrid implements PartGrid {
public void update() {
}
@Override
public StringInputConnector getStringInputConnectorOn(int xEnd, int yEnd) {
return null;
}
}

View File

@ -8,8 +8,10 @@ import android.util.Log;
import com.codigoparallevar.minicards.ScrolledCanvas;
import com.codigoparallevar.minicards.parts.connectors.AnyRoundInputConnector;
import com.codigoparallevar.minicards.parts.connectors.AnyRoundOutputConnector;
import com.codigoparallevar.minicards.parts.connectors.ConnectorTypeInfo;
import com.codigoparallevar.minicards.parts.connectors.RoundOutputConnector;
import com.codigoparallevar.minicards.parts.connectors.SignalRoundOutputConnector;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
import com.codigoparallevar.minicards.types.PartConnection;
@ -17,6 +19,7 @@ import com.codigoparallevar.minicards.types.PartGrid;
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
import com.codigoparallevar.minicards.types.functional.Tuple2;
import com.codigoparallevar.minicards.types.wireData.AnySignal;
import com.codigoparallevar.minicards.types.wireData.Signal;
import com.codigoparallevar.minicards.types.wireData.WireDataType;
import com.codigoparallevar.minicards.ui_helpers.DoAsync;
@ -59,8 +62,8 @@ public class ProgramakerCustomBlockPart implements Part, ProgramakerSignalListen
private String token = null;
private Object[] lastValues;
private boolean active = true;
private Tuple2<ConnectorTypeInfo, RoundOutputConnector> saveToOutput;
private RoundOutputConnector pulseOutput;
private Tuple2<ConnectorTypeInfo, AnyRoundOutputConnector> saveToOutput;
private SignalRoundOutputConnector pulseOutput;
public ProgramakerCustomBlockPart(String id, PartGrid grid, Tuple2<Integer, Integer> center, ProgramakerCustomBlock block) {
this._id = id;
@ -141,7 +144,7 @@ public class ProgramakerCustomBlockPart implements Part, ProgramakerSignalListen
final List<Tuple2<ConnectorTypeInfo, AnyRoundInputConnector>> inputs = new LinkedList<>();
final List<Tuple2<ConnectorTypeInfo, RoundOutputConnector>> outputs = new LinkedList<>();
RoundOutputConnector pulseOutput = null;
SignalRoundOutputConnector pulseOutput = null;
// Add pulses
if (has_pulse_input) {
@ -151,7 +154,7 @@ public class ProgramakerCustomBlockPart implements Part, ProgramakerSignalListen
);
}
if (has_pulse_output) {
pulseOutput = new RoundOutputConnector(this, this._partGrid, 0, 0,
pulseOutput = new SignalRoundOutputConnector(this, this._partGrid, 0, 0,
IO_RADIUS);
outputs.add(new Tuple2<>(new ConnectorTypeInfo(ConnectorTypeInfo.Type.PULSE),
pulseOutput)
@ -188,17 +191,17 @@ public class ProgramakerCustomBlockPart implements Part, ProgramakerSignalListen
}
}
Tuple2<ConnectorTypeInfo, RoundOutputConnector> saveToOutput = null;
Tuple2<ConnectorTypeInfo, AnyRoundOutputConnector> saveToOutput = null;
if (savedTo != null) {
saveToOutput = new Tuple2<>(ConnectorTypeInfo.FromTypeName(savedTo.getType()),
new RoundOutputConnector(this, this._partGrid, 0, 0, IO_RADIUS));
outputs.add(saveToOutput);
new AnyRoundOutputConnector(this, this._partGrid, 0, 0, IO_RADIUS));
outputs.add(new Tuple2<>(saveToOutput.item1, saveToOutput.item2));
}
if (hasImplicitOutput) {
outputs.add(new Tuple2<>(ConnectorTypeInfo.FromTypeName(_block.getBlock_result_type()),
new RoundOutputConnector(this, this._partGrid, 0, 0, IO_RADIUS)));
new AnyRoundOutputConnector(this, this._partGrid, 0, 0, IO_RADIUS)));
}
// Tie everything
@ -410,13 +413,16 @@ public class ProgramakerCustomBlockPart implements Part, ProgramakerSignalListen
}
private void onExecutionCompleted(ProgramakerFunctionCallResult result) {
Tuple2<ConnectorTypeInfo, RoundOutputConnector> savedTo = this.saveToOutput;
Tuple2<ConnectorTypeInfo, AnyRoundOutputConnector> savedTo = this.saveToOutput;
if (savedTo != null) {
// TODO: Fix output typing
// savedTo.item2.send((WireDataType<Object>) () -> result.getResult());
Object value = null;
if (result != null) {
result.getResult();
}
savedTo.item2.send(new AnySignal(value));
}
RoundOutputConnector pulseOutput = this.pulseOutput;
SignalRoundOutputConnector pulseOutput = this.pulseOutput;
if (pulseOutput != null) {
pulseOutput.send(new Signal());
}
@ -537,7 +543,7 @@ public class ProgramakerCustomBlockPart implements Part, ProgramakerSignalListen
// Stream object on save_to, then trigger pulse
Object content = signal.get("content");
if (this.saveToOutput != null) {
// this.saveToOutput.item2.send(content); // TODO: Have an output type that allows this
this.saveToOutput.item2.send(new AnySignal(content));
}
if (this.pulseOutput != null) {

View File

@ -6,7 +6,7 @@ import android.util.Log;
import com.codigoparallevar.minicards.PartInstantiator;
import com.codigoparallevar.minicards.ScrolledCanvas;
import com.codigoparallevar.minicards.parts.connectors.RoundOutputConnector;
import com.codigoparallevar.minicards.parts.connectors.SignalRoundOutputConnector;
import com.codigoparallevar.minicards.parts.style.CardTheme;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
@ -39,7 +39,7 @@ public class RoundButton implements Part {
private final int _outerRadiusThickness = 10;
private final int _pathRunWay = 200;
private List<OutputConnector> _outputConnectors;
private final RoundOutputConnector _pressedOutputConnector;
private final SignalRoundOutputConnector _pressedOutputConnector;
private final static int DEFAULT_INNER_RADIUS = 80;
private final static int DEFAULT_OUTER_RADIUS = 100;
@ -54,7 +54,7 @@ public class RoundButton implements Part {
_outerRadius = outerRadius;
// Create connectors
_pressedOutputConnector = new RoundOutputConnector(
_pressedOutputConnector = new SignalRoundOutputConnector(
this,
_partGrid,
getOutputConnectorCenterX(), getOutputConnectorCenterY(),
@ -234,7 +234,7 @@ public class RoundButton implements Part {
return null; // Only pulse output, so no relevant data
}
public RoundOutputConnector getPressedOutputConnector(){
public SignalRoundOutputConnector getPressedOutputConnector(){
return _pressedOutputConnector;
}

View File

@ -4,14 +4,15 @@ import android.util.Log;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
import com.codigoparallevar.minicards.types.connectors.RoundConnector;
import com.codigoparallevar.minicards.types.connectors.Wiring.Wire;
import com.codigoparallevar.minicards.types.connectors.input.AnyInputConnector;
import com.codigoparallevar.minicards.types.wireData.WireDataType;
import com.codigoparallevar.minicards.types.wireData.AnySignal;
import java.util.LinkedList;
import java.util.List;
public class AnyRoundInputConnector extends AnyInputConnector {
public class AnyRoundInputConnector extends AnyInputConnector implements RoundConnector {
private final Part _part;
private int _xposition;
private int _yposition;
@ -81,7 +82,7 @@ public class AnyRoundInputConnector extends AnyInputConnector {
}
@Override
public void send(WireDataType signal) {
public void send(AnySignal signal) {
_part.send(this, signal);
}

View File

@ -0,0 +1,176 @@
package com.codigoparallevar.minicards.parts.connectors;
import android.util.Log;
import com.codigoparallevar.minicards.ScrolledCanvas;
import com.codigoparallevar.minicards.types.Drawable;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
import com.codigoparallevar.minicards.types.PartGrid;
import com.codigoparallevar.minicards.types.connectors.Wiring.AnyWire;
import com.codigoparallevar.minicards.types.connectors.input.AnyInputConnector;
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
import com.codigoparallevar.minicards.types.connectors.output.AnyOutputConnector;
import com.codigoparallevar.minicards.types.functional.Tuple2;
import com.codigoparallevar.minicards.types.wireData.AnySignal;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
public class AnyRoundOutputConnector implements Drawable, AnyOutputConnector,
RoundOutputConnector<AnySignal, AnyInputConnector, AnyWire> {
private PartGrid _partGrid;
private int _centerX;
private int _centerY;
private final int _radius;
private final Part _part;
private AnyWire _currentWire = null;
private final List<AnyWire> _wires;
private final HashSet<InputConnector> _connections;
public AnyRoundOutputConnector(Part part, PartGrid partGrid, int centerX, int centerY, int radius) {
_part = part;
_partGrid = partGrid;
_centerX = centerX;
_centerY = centerY;
_radius = radius;
_wires = new LinkedList<>();
_connections = new HashSet<>();
}
@Override
public boolean containsPoint(int x, int y) {
return ((Math.abs(x - _centerX) <= _radius)
&& (Math.abs(y - _centerY) <= _radius));
}
@Override
public Moveable getMoveable() {
if (_currentWire == null) {
startWire();
}
return _currentWire;
}
@Override
public void unlink() {}
private void startWire() {
_currentWire = new AnyWire(this, _centerX, _centerY);
}
@Override
public void drop(AnyWire wire) {
if (wire == _currentWire){
_currentWire = null;
AnyInputConnector resultPoint = _partGrid.getAnyInputConnectorOn(
wire.getXEnd(), wire.getYEnd());
Log.d("RoundOutputConnector", "Dropped wire on " + resultPoint);
// Not connected
if (resultPoint == null){
return;
}
// Already connected
if (_connections.contains(resultPoint)) {
return;
}
_connections.add(resultPoint);
wire.attachTo(resultPoint, this);
_wires.add(wire);
}
else {
Log.w("RoundOutputConnector",
"Asked to drop non matching wire "
+ "(expected " + _currentWire + ", got " + wire + ")");
}
}
@Override
public void unlinkWire(AnyWire wire) {
_wires.remove(wire);
}
@Override
public void drawWires(ScrolledCanvas canvas, boolean devMode) {
for (AnyWire wire : _wires) {
wire.draw(canvas, devMode);
}
if (_currentWire != null) {
_currentWire.draw(canvas, devMode);
}
}
@Override
public void updatePosition(int x, int y) {
_centerX = x;
_centerY = y;
for (AnyWire wire : _wires){
wire.moveStart(x, y);
}
}
@Override
public List<Tuple2<String, String>> getConnectionEndpoints() {
List<Tuple2<String, String>> endpointIds = new LinkedList<>();
for (AnyWire wire : _wires) {
InputConnector inputConnector = wire.getAttachedTo();
Part endPart = inputConnector.getPart();
endpointIds.add(new Tuple2<>(inputConnector.getId(), endPart.get_id()));
}
return endpointIds;
}
@Override
public void connectTo(AnyInputConnector inputConnector) {
if (_connections.contains(inputConnector)) {
return;
}
_connections.add(inputConnector);
AnyWire wire = new AnyWire(this, _centerX, _centerY);
wire.attachTo(inputConnector, this);
_wires.add(wire);
}
@Override
public void draw(ScrolledCanvas canvas, boolean devMode) {
// TODO: Complete this part
}
public void send(AnySignal signal) {
for (AnyWire wire : _wires){
wire.send(signal);
}
}
@Override
public Object query(Object lastValue) {
return _part.query(lastValue);
}
public int getX() {
return _centerX;
}
public int getY() {
return _centerY;
}
public float getRadius() {
return _radius;
}
}

View File

@ -7,11 +7,11 @@ import com.codigoparallevar.minicards.types.Drawable;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
import com.codigoparallevar.minicards.types.PartGrid;
import com.codigoparallevar.minicards.types.functional.Tuple2;
import com.codigoparallevar.minicards.types.connectors.Wiring.BooleanWire;
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
import com.codigoparallevar.minicards.types.connectors.output.BooleanOutputConnector;
import com.codigoparallevar.minicards.types.functional.Tuple2;
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
import java.util.HashSet;

View File

@ -1,175 +1,14 @@
package com.codigoparallevar.minicards.parts.connectors;
import android.util.Log;
import com.codigoparallevar.minicards.ScrolledCanvas;
import com.codigoparallevar.minicards.types.Drawable;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
import com.codigoparallevar.minicards.types.PartGrid;
import com.codigoparallevar.minicards.types.functional.Tuple2;
import com.codigoparallevar.minicards.types.connectors.Wiring.SignalWire;
import com.codigoparallevar.minicards.types.connectors.RoundConnector;
import com.codigoparallevar.minicards.types.connectors.Wiring.Wire;
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
import com.codigoparallevar.minicards.types.connectors.output.SignalOutputConnector;
import com.codigoparallevar.minicards.types.wireData.Signal;
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
import com.codigoparallevar.minicards.types.wireData.WireDataType;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
public class RoundOutputConnector implements Drawable, SignalOutputConnector {
private PartGrid _partGrid;
private int _centerX;
private int _centerY;
private final int _radius;
private final Part _part;
private SignalWire _currentWire = null;
private final List<SignalWire> _wires;
private final HashSet<InputConnector> _connections;
public RoundOutputConnector(Part part, PartGrid partGrid, int centerX, int centerY, int radius) {
_part = part;
_partGrid = partGrid;
_centerX = centerX;
_centerY = centerY;
_radius = radius;
_wires = new LinkedList<>();
_connections = new HashSet<>();
}
@Override
public boolean containsPoint(int x, int y) {
return ((Math.abs(x - _centerX) <= _radius)
&& (Math.abs(y - _centerY) <= _radius));
}
@Override
public Moveable getMoveable() {
if (_currentWire == null) {
startWire();
}
return _currentWire;
}
@Override
public void unlink() {}
private void startWire() {
_currentWire = new SignalWire(this, _centerX, _centerY);
}
@Override
public void drop(SignalWire wire) {
if (wire == _currentWire){
_currentWire = null;
SignalInputConnector resultPoint = _partGrid.getSignalInputConnectorOn(
wire.getXEnd(), wire.getYEnd());
Log.d("RoundOutputConnector", "Dropped wire on " + resultPoint);
// Not connected
if (resultPoint == null){
return;
}
// Already connected
if (_connections.contains(resultPoint)) {
return;
}
_connections.add(resultPoint);
wire.attachTo(resultPoint, this);
_wires.add(wire);
}
else {
Log.w("RoundOutputConnector",
"Asked to drop non matching wire "
+ "(expected " + _currentWire + ", got " + wire + ")");
}
}
@Override
public void unlinkWire(SignalWire wire) {
_wires.remove(wire);
}
@Override
public void drawWires(ScrolledCanvas canvas, boolean devMode) {
for (SignalWire wire : _wires) {
wire.draw(canvas, devMode);
}
if (_currentWire != null) {
_currentWire.draw(canvas, devMode);
}
}
@Override
public void updatePosition(int x, int y) {
_centerX = x;
_centerY = y;
for (SignalWire wire : _wires){
wire.moveStart(x, y);
}
}
@Override
public List<Tuple2<String, String>> getConnectionEndpoints() {
List<Tuple2<String, String>> endpointIds = new LinkedList<>();
for (SignalWire wire : _wires) {
InputConnector inputConnector = wire.getAttachedTo();
Part endPart = inputConnector.getPart();
endpointIds.add(new Tuple2<>(inputConnector.getId(), endPart.get_id()));
}
return endpointIds;
}
@Override
public void connectTo(SignalInputConnector inputConnector) {
if (_connections.contains(inputConnector)) {
return;
}
_connections.add(inputConnector);
SignalWire wire = new SignalWire(this, _centerX, _centerY);
wire.attachTo(inputConnector, this);
_wires.add(wire);
}
@Override
public void draw(ScrolledCanvas canvas, boolean devMode) {
// TODO: Complete this part
}
public void send(Signal signal) {
for (SignalWire wire : _wires){
wire.send(signal);
}
}
@Override
public Object query(Object lastValue) {
return _part.query(lastValue);
}
public float getX() {
return _centerX;
}
public float getY() {
return _centerY;
}
public float getRadius() {
return _radius;
}
public interface RoundOutputConnector<
T1 extends WireDataType,
T2 extends InputConnector<T1, T2>,
T3 extends Wire<T1, T2>
> extends RoundConnector, OutputConnector<T1, T2, T3> {
}

View File

@ -0,0 +1,176 @@
package com.codigoparallevar.minicards.parts.connectors;
import android.util.Log;
import com.codigoparallevar.minicards.ScrolledCanvas;
import com.codigoparallevar.minicards.types.Drawable;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
import com.codigoparallevar.minicards.types.PartGrid;
import com.codigoparallevar.minicards.types.connectors.Wiring.SignalWire;
import com.codigoparallevar.minicards.types.connectors.input.InputConnector;
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
import com.codigoparallevar.minicards.types.connectors.output.SignalOutputConnector;
import com.codigoparallevar.minicards.types.functional.Tuple2;
import com.codigoparallevar.minicards.types.wireData.Signal;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
public class SignalRoundOutputConnector implements Drawable, SignalOutputConnector,
RoundOutputConnector<Signal, SignalInputConnector, SignalWire> {
private PartGrid _partGrid;
private int _centerX;
private int _centerY;
private final int _radius;
private final Part _part;
private SignalWire _currentWire = null;
private final List<SignalWire> _wires;
private final HashSet<InputConnector> _connections;
public SignalRoundOutputConnector(Part part, PartGrid partGrid, int centerX, int centerY, int radius) {
_part = part;
_partGrid = partGrid;
_centerX = centerX;
_centerY = centerY;
_radius = radius;
_wires = new LinkedList<>();
_connections = new HashSet<>();
}
@Override
public boolean containsPoint(int x, int y) {
return ((Math.abs(x - _centerX) <= _radius)
&& (Math.abs(y - _centerY) <= _radius));
}
@Override
public Moveable getMoveable() {
if (_currentWire == null) {
startWire();
}
return _currentWire;
}
@Override
public void unlink() {}
private void startWire() {
_currentWire = new SignalWire(this, _centerX, _centerY);
}
@Override
public void drop(SignalWire wire) {
if (wire == _currentWire){
_currentWire = null;
SignalInputConnector resultPoint = _partGrid.getSignalInputConnectorOn(
wire.getXEnd(), wire.getYEnd());
Log.d("RoundOutputConnector", "Dropped wire on " + resultPoint);
// Not connected
if (resultPoint == null){
return;
}
// Already connected
if (_connections.contains(resultPoint)) {
return;
}
_connections.add(resultPoint);
wire.attachTo(resultPoint, this);
_wires.add(wire);
}
else {
Log.w("RoundOutputConnector",
"Asked to drop non matching wire "
+ "(expected " + _currentWire + ", got " + wire + ")");
}
}
@Override
public void unlinkWire(SignalWire wire) {
_wires.remove(wire);
}
@Override
public void drawWires(ScrolledCanvas canvas, boolean devMode) {
for (SignalWire wire : _wires) {
wire.draw(canvas, devMode);
}
if (_currentWire != null) {
_currentWire.draw(canvas, devMode);
}
}
@Override
public void updatePosition(int x, int y) {
_centerX = x;
_centerY = y;
for (SignalWire wire : _wires){
wire.moveStart(x, y);
}
}
@Override
public List<Tuple2<String, String>> getConnectionEndpoints() {
List<Tuple2<String, String>> endpointIds = new LinkedList<>();
for (SignalWire wire : _wires) {
InputConnector inputConnector = wire.getAttachedTo();
Part endPart = inputConnector.getPart();
endpointIds.add(new Tuple2<>(inputConnector.getId(), endPart.get_id()));
}
return endpointIds;
}
@Override
public void connectTo(SignalInputConnector inputConnector) {
if (_connections.contains(inputConnector)) {
return;
}
_connections.add(inputConnector);
SignalWire wire = new SignalWire(this, _centerX, _centerY);
wire.attachTo(inputConnector, this);
_wires.add(wire);
}
@Override
public void draw(ScrolledCanvas canvas, boolean devMode) {
// TODO: Complete this part
}
public void send(Signal signal) {
for (SignalWire wire : _wires){
wire.send(signal);
}
}
@Override
public Object query(Object lastValue) {
return _part.query(lastValue);
}
public int getX() {
return _centerX;
}
public int getY() {
return _centerY;
}
public float getRadius() {
return _radius;
}
}

View File

@ -7,7 +7,7 @@ import android.util.Log;
import com.codigoparallevar.minicards.PartInstantiator;
import com.codigoparallevar.minicards.ScrolledCanvas;
import com.codigoparallevar.minicards.parts.connectors.RoundOutputConnector;
import com.codigoparallevar.minicards.parts.connectors.SignalRoundOutputConnector;
import com.codigoparallevar.minicards.parts.style.CardTheme;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.Part;
@ -40,7 +40,7 @@ public class Ticker implements Part {
private int _right;
private int _bottom;
private List<OutputConnector> _outputConnectors;
private final RoundOutputConnector _signalOutputConnector;
private final SignalRoundOutputConnector _signalOutputConnector;
private final long SLEEP_TIME = 1000;
private Thread _thread = null;
@ -53,7 +53,7 @@ public class Ticker implements Part {
_bottom = bottom;
// Create connectors
_signalOutputConnector = new RoundOutputConnector(
_signalOutputConnector = new SignalRoundOutputConnector(
this,
_partGrid,
getOutputConnectorCenterX(), getOutputConnectorCenterY(),

View File

@ -257,7 +257,7 @@ public class ConvertToString implements Part {
encoded = value.toString();
}
if ((_lastValue != null) && !_lastValue.equals(encoded)) {
if ((_lastValue == null) || !_lastValue.equals(encoded)) {
_lastValue = encoded;
_stringOutputConnector.send(new StringSignal(encoded));

View File

@ -1,6 +1,7 @@
package com.codigoparallevar.minicards.types;
import com.codigoparallevar.minicards.SignalListenerManager;
import com.codigoparallevar.minicards.types.connectors.input.AnyInputConnector;
import com.codigoparallevar.minicards.types.connectors.input.BooleanInputConnector;
import com.codigoparallevar.minicards.types.connectors.input.SignalInputConnector;
import com.codigoparallevar.minicards.types.connectors.input.StringInputConnector;
@ -14,10 +15,11 @@ public interface PartGrid {
SignalInputConnector getSignalInputConnectorOn(int x, int y);
BooleanInputConnector getBooleanInputConnectorOn(int x, int y);
AnyInputConnector getAnyInputConnectorOn(int x, int y);
StringInputConnector getStringInputConnectorOn(int xEnd, int yEnd);
Tuple2<Integer,Integer> getCenteredOn();
void update();
StringInputConnector getStringInputConnectorOn(int xEnd, int yEnd);
}

View File

@ -0,0 +1,7 @@
package com.codigoparallevar.minicards.types.connectors;
public interface RoundConnector {
int getX();
int getY();
float getRadius();
}

View File

@ -0,0 +1,19 @@
package com.codigoparallevar.minicards.types.connectors.Wiring;
import com.codigoparallevar.minicards.types.Drawable;
import com.codigoparallevar.minicards.types.Moveable;
import com.codigoparallevar.minicards.types.connectors.input.AnyInputConnector;
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
import com.codigoparallevar.minicards.types.wireData.AnySignal;
public class AnyWire extends Wire<AnySignal, AnyInputConnector> implements Moveable, Drawable {
public AnyWire(OutputConnector dropper, int xInit, int yInit) {
super(dropper, xInit, yInit);
}
public void send(AnySignal signal) {
if (_attachedTo != null) {
_attachedTo.send(signal);
}
}
}

View File

@ -9,13 +9,13 @@ import com.codigoparallevar.minicards.types.connectors.output.BooleanOutputConne
import com.codigoparallevar.minicards.types.connectors.output.OutputConnector;
import com.codigoparallevar.minicards.types.connectors.output.SignalOutputConnector;
import com.codigoparallevar.minicards.types.connectors.output.StringOutputConnector;
import com.codigoparallevar.minicards.types.wireData.AnySignal;
import com.codigoparallevar.minicards.types.wireData.BooleanSignal;
import com.codigoparallevar.minicards.types.wireData.Signal;
import com.codigoparallevar.minicards.types.wireData.StringSignal;
import com.codigoparallevar.minicards.types.wireData.WireDataType;
public abstract class AnyInputConnector implements InputConnector<WireDataType, AnyInputConnector> {
public abstract class AnyInputConnector implements InputConnector<AnySignal, AnyInputConnector> {
public SignalInputConnector ToSignalInputConnector() {
return new WrapAsSignal(this);
@ -51,7 +51,7 @@ public abstract class AnyInputConnector implements InputConnector<WireDataType,
@Override
public void send(Signal data) {
baseInputConnector.send(data);
baseInputConnector.send(new AnySignal(data.get()));
}
}
@ -62,7 +62,7 @@ public abstract class AnyInputConnector implements InputConnector<WireDataType,
@Override
public void send(BooleanSignal data) {
baseInputConnector.send(data);
baseInputConnector.send(new AnySignal(data.get()));
}
}
@ -73,7 +73,7 @@ public abstract class AnyInputConnector implements InputConnector<WireDataType,
@Override
public void send(StringSignal data) {
baseInputConnector.send(data);
baseInputConnector.send(new AnySignal(data.get()));
}
}

View File

@ -0,0 +1,8 @@
package com.codigoparallevar.minicards.types.connectors.output;
import com.codigoparallevar.minicards.types.connectors.Wiring.AnyWire;
import com.codigoparallevar.minicards.types.connectors.input.AnyInputConnector;
import com.codigoparallevar.minicards.types.wireData.AnySignal;
public interface AnyOutputConnector extends OutputConnector<AnySignal, AnyInputConnector, AnyWire> {
}

View File

@ -0,0 +1,14 @@
package com.codigoparallevar.minicards.types.wireData;
public class AnySignal implements WireDataType<Object> {
public final Object value;
public AnySignal(Object value) {
this.value = value;
}
@Override
public Object get() {
return value;
}
}