mirror of
https://github.com/Stefan-5422/School-Programming-Projekt-022022.git
synced 2026-09-04 00:46:01 +02:00
BROKEN: Buggy codeno compile
This commit is contained in:
Generated
+10
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RunConfigurationProducerService">
|
||||||
|
<option name="ignoredProducers">
|
||||||
|
<set>
|
||||||
|
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.yes.yes;
|
package com.yes.yes;
|
||||||
|
|
||||||
import com.yes.yes.managers.GameManager;
|
import com.yes.yes.managers.GameManager;
|
||||||
|
import com.yes.yes.managers.HubManager;
|
||||||
import com.yes.yes.managers.PlayerManager;
|
import com.yes.yes.managers.PlayerManager;
|
||||||
import com.yes.yes.managers.UiManager;
|
import com.yes.yes.managers.UiManager;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
@@ -13,15 +14,18 @@ public class MainController {
|
|||||||
private VBox root;
|
private VBox root;
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
GameManager gameManager = new GameManager(root);
|
|
||||||
gameManager.initialize();
|
|
||||||
|
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
|
GameManager gameManager = new GameManager(root);
|
||||||
|
gameManager.initialize();
|
||||||
|
|
||||||
UiManager uiManager = new UiManager(root);
|
UiManager uiManager = new UiManager(root);
|
||||||
uiManager.initialize();
|
uiManager.initialize();
|
||||||
|
|
||||||
PlayerManager playerManager = new PlayerManager(gameManager.getWorld(), uiManager.getBuildBox());
|
PlayerManager playerManager = new PlayerManager(gameManager.getWorld(), uiManager.getBuildBox());
|
||||||
playerManager.initialize();
|
playerManager.initialize();
|
||||||
|
|
||||||
|
HubManager hubManager = new HubManager();
|
||||||
|
hubManager.initialize();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ public class ConveyorBehaviour extends Component {
|
|||||||
|
|
||||||
if (isConveyed && parent.getData(offerDataKey) == null) {
|
if (isConveyed && parent.getData(offerDataKey) == null) {
|
||||||
parent.setData(receiveDataKey, null);
|
parent.setData(receiveDataKey, null);
|
||||||
parent.trigger(receiveDataKey + "Changed", null);
|
|
||||||
isConveyed = false;
|
isConveyed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.yes.yes.behaviours;
|
||||||
|
|
||||||
|
import com.yes.yes.utils.*;
|
||||||
|
|
||||||
|
public class DataStoreEvent extends Component {
|
||||||
|
|
||||||
|
String dataKey;
|
||||||
|
String eventName;
|
||||||
|
boolean global;
|
||||||
|
|
||||||
|
|
||||||
|
public DataStoreEvent(Entity entity, BlockContainer blockContainer, String dataKey, String eventName, boolean global) {
|
||||||
|
super(entity, blockContainer);
|
||||||
|
this.dataKey = dataKey;
|
||||||
|
this.eventName = eventName;
|
||||||
|
this.global = global;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void triggerEvent(Item item) {
|
||||||
|
if (global) {
|
||||||
|
GlobalEventHandler.trigger(eventName, item);
|
||||||
|
} else {
|
||||||
|
this.parent.trigger(eventName, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
this.parent.addListener(dataKey + "Changed", this, this::triggerEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
if (global) {
|
||||||
|
GlobalEventHandler.removeListener(eventName, this);
|
||||||
|
} else {
|
||||||
|
this.parent.removeListener(dataKey + "Changed", this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,8 +19,9 @@ public class DestroyBehaviour extends Component {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
this.parent.setData(dataKey, null);
|
if(this.parent.getData(dataKey) !=null) {
|
||||||
this.parent.trigger(dataKey + "Changed", null);
|
this.parent.setData(dataKey, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package com.yes.yes.behaviours;
|
||||||
|
|
||||||
|
import com.yes.yes.utils.*;
|
||||||
|
|
||||||
|
public class EventDataStore extends Component {
|
||||||
|
|
||||||
|
String eventName;
|
||||||
|
String dataKey;
|
||||||
|
boolean global;
|
||||||
|
|
||||||
|
public EventDataStore(Entity entity, BlockContainer blockContainer, String eventName, String dataKey, boolean global) {
|
||||||
|
super(entity, blockContainer);
|
||||||
|
this.eventName = eventName;
|
||||||
|
this.dataKey = dataKey;
|
||||||
|
this.global = global;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setData(Item item) {
|
||||||
|
this.parent.setData(dataKey, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
if (global) {
|
||||||
|
GlobalEventHandler.addListener(this.eventName, this, this::setData);
|
||||||
|
} else {
|
||||||
|
this.parent.addListener(this.eventName, this, this::setData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
if (global) {
|
||||||
|
GlobalEventHandler.removeListener(this.eventName, this);
|
||||||
|
} else {
|
||||||
|
this.parent.removeListener(this.eventName, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.yes.yes.behaviours;
|
||||||
|
|
||||||
|
import com.yes.yes.utils.BlockContainer;
|
||||||
|
import com.yes.yes.utils.Component;
|
||||||
|
import com.yes.yes.utils.Entity;
|
||||||
|
import com.yes.yes.utils.GlobalEventHandler;
|
||||||
|
import javafx.scene.text.Text;
|
||||||
|
|
||||||
|
public class HubDisplayBehaviour extends Component {
|
||||||
|
|
||||||
|
String eventName;
|
||||||
|
Text text;
|
||||||
|
|
||||||
|
public HubDisplayBehaviour(Entity entity, BlockContainer blockContainer, String eventName, Text text) {
|
||||||
|
super(entity, blockContainer);
|
||||||
|
this.eventName = eventName;
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateText(String content)
|
||||||
|
{
|
||||||
|
this.text.setText(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
GlobalEventHandler.addListener(eventName, this, this::updateText);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
GlobalEventHandler.removeListener(eventName, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
package com.yes.yes.behaviours;
|
package com.yes.yes.behaviours;
|
||||||
|
|
||||||
import com.yes.yes.utils.BlockContainer;
|
import com.yes.yes.utils.*;
|
||||||
import com.yes.yes.utils.Component;
|
|
||||||
import com.yes.yes.utils.Entity;
|
|
||||||
import com.yes.yes.utils.Item;
|
|
||||||
import com.yes.yes.world.Chunk;
|
import com.yes.yes.world.Chunk;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.Node;
|
||||||
import javafx.scene.layout.StackPane;
|
import javafx.scene.layout.StackPane;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.scene.shape.Rectangle;
|
import javafx.scene.shape.Rectangle;
|
||||||
@@ -24,15 +22,21 @@ public class ItemBehaviour extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void itemChanged(Item item) {
|
private void itemChanged(Item item) {
|
||||||
|
//GlobalExecQueue.schedule(() -> {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
this.itemGroup.getChildren().clear();
|
try {
|
||||||
if (item != null)
|
|
||||||
this.itemGroup.getChildren().add(item);
|
this.parent.getChildren().clear();
|
||||||
else {
|
|
||||||
Rectangle alignmentRectangle = new Rectangle(Chunk.ENTITY_SIZE, Chunk.ENTITY_SIZE);
|
if (item != null)
|
||||||
alignmentRectangle.setFill(Color.rgb(0,0,0,0));
|
this.itemGroup.getChildren().add(item);
|
||||||
this.itemGroup.getChildren().add(alignmentRectangle);
|
else {
|
||||||
|
Rectangle alignmentRectangle = new Rectangle(Chunk.ENTITY_SIZE, Chunk.ENTITY_SIZE);
|
||||||
|
alignmentRectangle.setFill(Color.rgb(0, 0, 0, 0));
|
||||||
|
this.itemGroup.getChildren().add(alignmentRectangle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
catch (IndexOutOfBoundsException ex){System.out.print(ex.getMessage() + " | " + this.parent.getClass().getSimpleName()); }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ public class ReceiveBehaviour extends Component {
|
|||||||
if (this.parent.getData(dataKey) != null) return;
|
if (this.parent.getData(dataKey) != null) return;
|
||||||
|
|
||||||
this.parent.setData(dataKey, pair.getValue());
|
this.parent.setData(dataKey, pair.getValue());
|
||||||
this.parent.trigger(dataKey + "Changed", pair.getValue());
|
|
||||||
this.offerer.trigger("itemAccepted", this.parent);
|
this.offerer.trigger("itemAccepted", this.parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.yes.yes.behaviours;
|
||||||
|
|
||||||
|
public class RotateBehaviour {
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package com.yes.yes.behaviours;
|
||||||
|
|
||||||
|
import com.yes.yes.utils.*;
|
||||||
|
import javafx.application.Platform;
|
||||||
|
|
||||||
|
public class StackBehaviour extends Component {
|
||||||
|
private final int processingDuration;
|
||||||
|
private String receiveDataKey1;
|
||||||
|
private String receiveDataKey2;
|
||||||
|
private String offerDataKey;
|
||||||
|
private int progress = 0;
|
||||||
|
|
||||||
|
|
||||||
|
public StackBehaviour(Entity entity, BlockContainer blockContainer, String receiveDataKey1, String receiveDataKey2, String offerDataKey, int processingDuration) {
|
||||||
|
super(entity, blockContainer);
|
||||||
|
this.receiveDataKey1 = receiveDataKey1;
|
||||||
|
this.receiveDataKey2 = receiveDataKey2;
|
||||||
|
this.offerDataKey = offerDataKey;
|
||||||
|
this.processingDuration = processingDuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
//GlobalExecQueue.schedule( () -> {
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
if (progress > processingDuration) {
|
||||||
|
if (parent.getData(offerDataKey) != null) return;
|
||||||
|
|
||||||
|
Item item1 = parent.getData(receiveDataKey1);
|
||||||
|
Item item2 = parent.getData(receiveDataKey2);
|
||||||
|
|
||||||
|
for (int quarter = 0; quarter < 4; quarter++) {
|
||||||
|
int offset = 0;
|
||||||
|
for (int layer = 0; layer < 4; layer++) {
|
||||||
|
if (item1.getPart(layer, quarter) != null) {
|
||||||
|
offset++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
item1.setPart(layer, quarter, item2.getPart(layer - offset, quarter));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parent.setData(offerDataKey, item1);
|
||||||
|
parent.setData(receiveDataKey1, null);
|
||||||
|
parent.setData(receiveDataKey2, null);
|
||||||
|
|
||||||
|
} else if (parent.getData(receiveDataKey1) != null && parent.getData(receiveDataKey2) != null) {
|
||||||
|
progress++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,7 +37,6 @@ public class Cutter extends Entity {
|
|||||||
public Cutter(BlockContainer blockContainer) {
|
public Cutter(BlockContainer blockContainer) {
|
||||||
this();
|
this();
|
||||||
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
||||||
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.DOWN, "Item"));
|
|
||||||
this.addBehaviour(new CutItemBehaviour(this, blockContainer, Orientation.Horizontal, "ReceivedItem", "OfferItemLeft", "OfferItemRight", 5));
|
this.addBehaviour(new CutItemBehaviour(this, blockContainer, Orientation.Horizontal, "ReceivedItem", "OfferItemLeft", "OfferItemRight", 5));
|
||||||
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.DOWN, "ReceivedItem"));
|
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.DOWN, "ReceivedItem"));
|
||||||
this.addBehaviour(new OfferBehaviour(this, blockContainer, Direction.LEFT, "OfferItemLeft"));
|
this.addBehaviour(new OfferBehaviour(this, blockContainer, Direction.LEFT, "OfferItemLeft"));
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ import com.yes.yes.behaviours.ItemBehaviour;
|
|||||||
import com.yes.yes.behaviours.OfferBehaviour;
|
import com.yes.yes.behaviours.OfferBehaviour;
|
||||||
import com.yes.yes.behaviours.PlaceBehaviour;
|
import com.yes.yes.behaviours.PlaceBehaviour;
|
||||||
import com.yes.yes.entities.parts.Square;
|
import com.yes.yes.entities.parts.Square;
|
||||||
import com.yes.yes.utils.*;
|
import com.yes.yes.utils.BlockContainer;
|
||||||
|
import com.yes.yes.utils.Direction;
|
||||||
|
import com.yes.yes.utils.Entity;
|
||||||
|
import com.yes.yes.utils.Item;
|
||||||
import com.yes.yes.world.Chunk;
|
import com.yes.yes.world.Chunk;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.scene.shape.Polygon;
|
import javafx.scene.shape.Polygon;
|
||||||
@@ -36,7 +39,7 @@ public class GeneratorMachine extends Entity {
|
|||||||
rectangle.setFill(blockContainer.chunkColor());
|
rectangle.setFill(blockContainer.chunkColor());
|
||||||
|
|
||||||
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
||||||
this.addBehaviour(new ItemBehaviour(this, blockContainer, "Item"));
|
//this.addBehaviour(new ItemBehaviour(this, blockContainer, "Item"));
|
||||||
this.addBehaviour(new OfferBehaviour(this, blockContainer, Direction.UP, "Item"));
|
this.addBehaviour(new OfferBehaviour(this, blockContainer, Direction.UP, "Item"));
|
||||||
this.addBehaviour(new GeneratorBehaviour(this, blockContainer, generateItem(blockContainer.chunkColor()), "Item"));
|
this.addBehaviour(new GeneratorBehaviour(this, blockContainer, generateItem(blockContainer.chunkColor()), "Item"));
|
||||||
}
|
}
|
||||||
@@ -44,10 +47,8 @@ public class GeneratorMachine extends Entity {
|
|||||||
private Item generateItem(Color color) {
|
private Item generateItem(Color color) {
|
||||||
Item item = new Item();
|
Item item = new Item();
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
for (int j = 0; j < 4; j++) {
|
Square square = new Square(color);
|
||||||
Square square = new Square(color);
|
item.setPart(0, i, square);
|
||||||
item.setPart(i, j, square);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
package com.yes.yes.entities.machines;
|
package com.yes.yes.entities.machines;
|
||||||
|
|
||||||
import com.yes.yes.behaviours.PlaceBehaviour;
|
import com.yes.yes.behaviours.*;
|
||||||
import com.yes.yes.behaviours.ReceiveBehaviour;
|
|
||||||
import com.yes.yes.utils.BlockContainer;
|
import com.yes.yes.utils.BlockContainer;
|
||||||
import com.yes.yes.utils.Direction;
|
import com.yes.yes.utils.Direction;
|
||||||
import com.yes.yes.utils.Entity;
|
import com.yes.yes.utils.Entity;
|
||||||
|
import com.yes.yes.utils.NotOverridable;
|
||||||
import com.yes.yes.world.Chunk;
|
import com.yes.yes.world.Chunk;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javafx.scene.shape.Rectangle;
|
import javafx.scene.shape.Rectangle;
|
||||||
|
|
||||||
public class HubAcceptor extends Entity {
|
public class HubAcceptor extends Entity implements NotOverridable {
|
||||||
public HubAcceptor() {
|
public HubAcceptor() {
|
||||||
Rectangle r = new Rectangle(Chunk.ENTITY_SIZE, Chunk.ENTITY_SIZE);
|
Rectangle r = new Rectangle(Chunk.ENTITY_SIZE, Chunk.ENTITY_SIZE);
|
||||||
r.setFill(Color.PINK);
|
r.setFill(Color.PINK);
|
||||||
@@ -22,5 +22,12 @@ public class HubAcceptor extends Entity {
|
|||||||
this();
|
this();
|
||||||
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
||||||
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.LEFT, "Input"));
|
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.LEFT, "Input"));
|
||||||
|
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.RIGHT, "Input"));
|
||||||
|
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.UP, "Input"));
|
||||||
|
this.addBehaviour(new ReceiveBehaviour(this, blockContainer, Direction.DOWN, "Input"));
|
||||||
|
this.addBehaviour(new DataStoreEvent(this, blockContainer, "Input", "hub:objectiveCompletion", true));
|
||||||
|
this.addBehaviour(new DestroyBehaviour(this, blockContainer, "Input"));
|
||||||
|
this.addBehaviour(new ItemBehaviour(this, blockContainer, "Objective"));
|
||||||
|
this.addBehaviour(new EventDataStore(this, blockContainer, "hub:newObjective", "Objective", true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
package com.yes.yes.entities.machines;
|
package com.yes.yes.entities.machines;
|
||||||
|
|
||||||
|
import com.yes.yes.behaviours.EventDataStore;
|
||||||
|
import com.yes.yes.behaviours.HubDisplayBehaviour;
|
||||||
import com.yes.yes.behaviours.ItemBehaviour;
|
import com.yes.yes.behaviours.ItemBehaviour;
|
||||||
import com.yes.yes.behaviours.PlaceBehaviour;
|
import com.yes.yes.behaviours.PlaceBehaviour;
|
||||||
import com.yes.yes.utils.BlockContainer;
|
import com.yes.yes.utils.BlockContainer;
|
||||||
import com.yes.yes.utils.Entity;
|
import com.yes.yes.utils.Entity;
|
||||||
|
import com.yes.yes.utils.NotOverridable;
|
||||||
import com.yes.yes.world.Chunk;
|
import com.yes.yes.world.Chunk;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
import javafx.scene.layout.StackPane;
|
import javafx.scene.layout.StackPane;
|
||||||
@@ -11,13 +14,15 @@ import javafx.scene.paint.Color;
|
|||||||
import javafx.scene.shape.Rectangle;
|
import javafx.scene.shape.Rectangle;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
|
|
||||||
public class HubDisplay extends Entity {
|
public class HubDisplay extends Entity implements NotOverridable {
|
||||||
|
|
||||||
|
Text text;
|
||||||
|
|
||||||
public HubDisplay() {
|
public HubDisplay() {
|
||||||
Rectangle r = new Rectangle(Chunk.ENTITY_SIZE, Chunk.ENTITY_SIZE);
|
Rectangle r = new Rectangle(Chunk.ENTITY_SIZE, Chunk.ENTITY_SIZE);
|
||||||
r.setFill(Color.PINK);
|
r.setFill(Color.PINK);
|
||||||
|
|
||||||
Text text = new Text("yes\nthis is a test");
|
text = new Text("yes\nthis is a test");
|
||||||
text.setWrappingWidth(Chunk.ENTITY_SIZE);
|
text.setWrappingWidth(Chunk.ENTITY_SIZE);
|
||||||
|
|
||||||
StackPane stackPane = new StackPane();
|
StackPane stackPane = new StackPane();
|
||||||
@@ -31,6 +36,6 @@ public class HubDisplay extends Entity {
|
|||||||
public HubDisplay(BlockContainer blockContainer) {
|
public HubDisplay(BlockContainer blockContainer) {
|
||||||
this();
|
this();
|
||||||
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
||||||
this.addBehaviour(new ItemBehaviour(this, blockContainer, "Objective"));
|
this.addBehaviour(new HubDisplayBehaviour(this, blockContainer, "hub:statusText",text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.yes.yes.entities.machines;
|
||||||
|
|
||||||
|
import com.yes.yes.behaviours.OfferBehaviour;
|
||||||
|
import com.yes.yes.behaviours.PlaceBehaviour;
|
||||||
|
import com.yes.yes.behaviours.ReceiveBehaviour;
|
||||||
|
import com.yes.yes.behaviours.StackBehaviour;
|
||||||
|
import com.yes.yes.utils.BlockContainer;
|
||||||
|
import com.yes.yes.utils.Direction;
|
||||||
|
import com.yes.yes.utils.Entity;
|
||||||
|
import com.yes.yes.world.Chunk;
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
import javafx.scene.shape.Polygon;
|
||||||
|
|
||||||
|
public class Stacker extends Entity {
|
||||||
|
|
||||||
|
public Stacker() {
|
||||||
|
super();
|
||||||
|
Polygon p = new Polygon();
|
||||||
|
p.getPoints().addAll(
|
||||||
|
Chunk.ENTITY_SIZE / 2d, 0.0,
|
||||||
|
0.0, (double) Chunk.ENTITY_SIZE,
|
||||||
|
(double) Chunk.ENTITY_SIZE, (double) Chunk.ENTITY_SIZE);
|
||||||
|
p.setFill(new Color(1, 0, 0, 1));
|
||||||
|
|
||||||
|
this.getChildren().addAll(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Stacker(BlockContainer blockContainer) {
|
||||||
|
this();
|
||||||
|
this.addBehaviour(new PlaceBehaviour(this, blockContainer));
|
||||||
|
this.addBehaviour(new StackBehaviour(this,blockContainer,"Input1","Input2","Output",2));
|
||||||
|
this.addBehaviour(new OfferBehaviour(this, blockContainer, Direction.UP, "Output"));
|
||||||
|
this.addBehaviour(new ReceiveBehaviour(this,blockContainer,Direction.LEFT,"Input1"));
|
||||||
|
this.addBehaviour(new ReceiveBehaviour(this,blockContainer,Direction.RIGHT,"Input2"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,7 +22,7 @@ public class Square extends com.yes.yes.utils.Part {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onColorChanged(Color color)
|
protected void onColorChanged(Color color)
|
||||||
{
|
{
|
||||||
rect.setFill(color);
|
rect.setFill(color);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
package com.yes.yes.managers;
|
package com.yes.yes.managers;
|
||||||
|
|
||||||
import com.yes.yes.entities.machines.*;
|
import com.yes.yes.entities.machines.*;
|
||||||
import com.yes.yes.utils.EntityRegistry;
|
import com.yes.yes.utils.*;
|
||||||
import com.yes.yes.utils.GlobalEventHandler;
|
|
||||||
import com.yes.yes.utils.RegistryEntry;
|
|
||||||
import com.yes.yes.utils.exceptions.AlreadyExistsException;
|
import com.yes.yes.utils.exceptions.AlreadyExistsException;
|
||||||
|
import com.yes.yes.world.Chunk;
|
||||||
import com.yes.yes.world.World;
|
import com.yes.yes.world.World;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
@@ -13,6 +12,8 @@ import java.util.concurrent.ScheduledExecutorService;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class GameManager {
|
public class GameManager {
|
||||||
|
public static final Coordinate START_POSITION = new Coordinate(Integer.MAX_VALUE / -5000, Integer.MAX_VALUE / -5000);
|
||||||
|
|
||||||
private final VBox root;
|
private final VBox root;
|
||||||
private World world;
|
private World world;
|
||||||
|
|
||||||
@@ -34,28 +35,50 @@ public class GameManager {
|
|||||||
EntityRegistry.register(new RegistryEntry("destroyer", "Incinerator", DestroyMachine.class));
|
EntityRegistry.register(new RegistryEntry("destroyer", "Incinerator", DestroyMachine.class));
|
||||||
EntityRegistry.register(new RegistryEntry("generator", "Generator", GeneratorMachine.class));
|
EntityRegistry.register(new RegistryEntry("generator", "Generator", GeneratorMachine.class));
|
||||||
EntityRegistry.register(new RegistryEntry("conveyorBelt", "Conveyor Belt", ConveyorBelt.class));
|
EntityRegistry.register(new RegistryEntry("conveyorBelt", "Conveyor Belt", ConveyorBelt.class));
|
||||||
EntityRegistry.register(new RegistryEntry("hub", "Central Hub", HubDisplay.class));
|
|
||||||
EntityRegistry.register(new RegistryEntry("hubAcceptor", "Central Hub Acceptor", HubAcceptor.class));
|
|
||||||
EntityRegistry.register(new RegistryEntry("splitter", "Splitter", Splitter.class));
|
EntityRegistry.register(new RegistryEntry("splitter", "Splitter", Splitter.class));
|
||||||
EntityRegistry.register(new RegistryEntry("cutter","Cutter", Cutter.class));
|
EntityRegistry.register(new RegistryEntry("cutter", "Cutter", Cutter.class));
|
||||||
|
EntityRegistry.register(new RegistryEntry("stacker", "Stacker", Stacker.class));
|
||||||
} catch (AlreadyExistsException e) {
|
} catch (AlreadyExistsException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
||||||
executor.scheduleAtFixedRate(() -> {
|
executor.scheduleAtFixedRate(() -> {
|
||||||
try {
|
try {
|
||||||
GlobalEventHandler.trigger("global:timerTick", null);
|
GlobalEventHandler.trigger("global:timerTick", null);
|
||||||
|
//GlobalExecQueue.run();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
//ex.printStackTrace();
|
||||||
}
|
}
|
||||||
//System.out.println("Finished tick!");
|
//System.out.println("Finished tick!");
|
||||||
}, 0, 100, TimeUnit.MILLISECONDS);
|
}, 0, 10, TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
GlobalEventHandler.addListener("global:timerTick", this, (__) -> {
|
|
||||||
//System.out.println("Tick!");
|
|
||||||
});
|
|
||||||
GlobalEventHandler.addListener("app:closing", this, (__) -> executor.shutdown());
|
GlobalEventHandler.addListener("app:closing", this, (__) -> executor.shutdown());
|
||||||
|
|
||||||
|
generateHub();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void generateHub() {
|
||||||
|
Coordinate startChunk = Coordinate.sceneToChunkCoordinate(START_POSITION);
|
||||||
|
Coordinate centerPosition = new Coordinate((int) Math.ceil(Chunk.CHUNK_SIZE / 2f), (int) Math.ceil(Chunk.CHUNK_SIZE / 2f));
|
||||||
|
|
||||||
|
Chunk chunk = world.getChunk(startChunk);
|
||||||
|
|
||||||
|
for (int x = centerPosition.x - 2; x <= centerPosition.x; x++) {
|
||||||
|
for (int y = centerPosition.y - 2; y <= centerPosition.y; y++) {
|
||||||
|
if (x == centerPosition.x - 1 && y == centerPosition.y - 1) {
|
||||||
|
BlockContainer blockContainer = new BlockContainer(world, chunk.getChunkColor(), new Coordinate(x, y), startChunk);
|
||||||
|
HubDisplay center = new HubDisplay(blockContainer);
|
||||||
|
chunk.setEntity(center, new Coordinate(x, y));
|
||||||
|
center.initialize();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BlockContainer blockContainer = new BlockContainer(world, chunk.getChunkColor(), new Coordinate(x, y), startChunk);
|
||||||
|
HubAcceptor hubAcceptor = new HubAcceptor(blockContainer);
|
||||||
|
chunk.setEntity(hubAcceptor, new Coordinate(x, y));
|
||||||
|
hubAcceptor.initialize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
package com.yes.yes.managers;
|
||||||
|
|
||||||
|
import com.yes.yes.entities.parts.Square;
|
||||||
|
import com.yes.yes.utils.GlobalEventHandler;
|
||||||
|
import com.yes.yes.utils.Item;
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
|
||||||
|
public class HubManager {
|
||||||
|
|
||||||
|
private int level = 0;
|
||||||
|
private int objectiveCompletion = 0;
|
||||||
|
private int objectiveTotal = 0;
|
||||||
|
private Item objective = null;
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
|
GlobalEventHandler.addListener("hub:objectiveCompletion", this, this::objectiveCompletion);
|
||||||
|
newLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void newLevel() {
|
||||||
|
level++;
|
||||||
|
|
||||||
|
objective = generateObjective();
|
||||||
|
GlobalEventHandler.trigger("hub:newObjective", objective);
|
||||||
|
|
||||||
|
objectiveCompletion = 0;
|
||||||
|
objectiveTotal = level * 10;
|
||||||
|
|
||||||
|
System.out.println("New level: " + level);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private Item generateObjective() {
|
||||||
|
Item item = new Item();
|
||||||
|
|
||||||
|
int layerCount = (level / 10) + 1;
|
||||||
|
int complexity = level % 10; //TODO: Make complexity make stuff more complex
|
||||||
|
|
||||||
|
//for (int l = 0; l < layerCount && l < 4; l++) {
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
//item.setPart(l, i, new Square(Color.RED));
|
||||||
|
item.setPart(0, i, new Square(Color.GREEN));
|
||||||
|
}
|
||||||
|
|
||||||
|
//}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getStatusText() {
|
||||||
|
return String.format("%s\n%s/%s",level,objectiveCompletion,objectiveTotal);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void objectiveCompletion(Item item) {
|
||||||
|
if (item == null) return;
|
||||||
|
if (item.equals(objective)) {
|
||||||
|
objectiveCompletion++;
|
||||||
|
}
|
||||||
|
if (objectiveCompletion >= objectiveTotal) {
|
||||||
|
newLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalEventHandler.trigger("hub:statusText",getStatusText());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,7 +15,6 @@ public class PlayerManager {
|
|||||||
private static final KeyCombination DOWN_KEY = new KeyCodeCombination(KeyCode.S);
|
private static final KeyCombination DOWN_KEY = new KeyCodeCombination(KeyCode.S);
|
||||||
private static final KeyCombination DELETE_KEY = new KeyCodeCombination(KeyCode.X);
|
private static final KeyCombination DELETE_KEY = new KeyCodeCombination(KeyCode.X);
|
||||||
private static final KeyCombination HOME_KEY = new KeyCodeCombination(KeyCode.HOME);
|
private static final KeyCombination HOME_KEY = new KeyCodeCombination(KeyCode.HOME);
|
||||||
private static final Coordinate START_POSITION = new Coordinate(Integer.MAX_VALUE / -5000, Integer.MAX_VALUE / -5000);
|
|
||||||
|
|
||||||
private final World world;
|
private final World world;
|
||||||
private final BuildBox buildBox;
|
private final BuildBox buildBox;
|
||||||
@@ -37,8 +36,8 @@ public class PlayerManager {
|
|||||||
scene.heightProperty().addListener((e) -> redrawChunks());
|
scene.heightProperty().addListener((e) -> redrawChunks());
|
||||||
|
|
||||||
world.setOnMouseClicked(this::processClick);
|
world.setOnMouseClicked(this::processClick);
|
||||||
world.setTranslateX(START_POSITION.x);
|
world.setTranslateX(GameManager.START_POSITION.x);
|
||||||
world.setTranslateY(START_POSITION.y);
|
world.setTranslateY(GameManager.START_POSITION.y);
|
||||||
world.setOnMouseMoved((mouse) -> currentMousePosition = new Coordinate((int) mouse.getX(), (int) mouse.getY()));
|
world.setOnMouseMoved((mouse) -> currentMousePosition = new Coordinate((int) mouse.getX(), (int) mouse.getY()));
|
||||||
|
|
||||||
redrawChunks();
|
redrawChunks();
|
||||||
@@ -46,8 +45,8 @@ public class PlayerManager {
|
|||||||
|
|
||||||
private void processClick(MouseEvent mouse) {
|
private void processClick(MouseEvent mouse) {
|
||||||
Coordinate mouseCoordinate = new Coordinate((int) mouse.getX(), (int) mouse.getY());
|
Coordinate mouseCoordinate = new Coordinate((int) mouse.getX(), (int) mouse.getY());
|
||||||
Coordinate chunkCoordinate = Coordinate.WorldToChunkCoordinate(mouseCoordinate);
|
Coordinate chunkCoordinate = Coordinate.worldToChunkCoordinate(mouseCoordinate);
|
||||||
Coordinate blockCoordinate = Coordinate.WorldToChunkBlock(mouseCoordinate);
|
Coordinate blockCoordinate = Coordinate.worldToChunkBlock(mouseCoordinate);
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -84,8 +83,8 @@ public class PlayerManager {
|
|||||||
|
|
||||||
private void processKeyRelease(KeyEvent key) {
|
private void processKeyRelease(KeyEvent key) {
|
||||||
if (HOME_KEY.match(key)) {
|
if (HOME_KEY.match(key)) {
|
||||||
world.setTranslateX(START_POSITION.x);
|
world.setTranslateX(GameManager.START_POSITION.x);
|
||||||
world.setTranslateY(START_POSITION.y);
|
world.setTranslateY(GameManager.START_POSITION.y);
|
||||||
redrawChunks();
|
redrawChunks();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -104,15 +103,15 @@ public class PlayerManager {
|
|||||||
world.setTranslateY(world.getTranslateY() - 45);
|
world.setTranslateY(world.getTranslateY() - 45);
|
||||||
}
|
}
|
||||||
if (DELETE_KEY.match(key)) {
|
if (DELETE_KEY.match(key)) {
|
||||||
Coordinate chunkCoordinate = Coordinate.WorldToChunkCoordinate(currentMousePosition);
|
Coordinate chunkCoordinate = Coordinate.worldToChunkCoordinate(currentMousePosition);
|
||||||
Coordinate blockCoordinate = Coordinate.WorldToChunkBlock(currentMousePosition);
|
Coordinate blockCoordinate = Coordinate.worldToChunkBlock(currentMousePosition);
|
||||||
|
|
||||||
Chunk chunk = world.getChunk(chunkCoordinate);
|
Chunk chunk = world.getChunk(chunkCoordinate);
|
||||||
chunk.removeEntity(blockCoordinate);
|
chunk.removeEntity(blockCoordinate);
|
||||||
}
|
}
|
||||||
|
|
||||||
Size preferredAmountOfChunks = getPreferredAmountOfChunks();
|
Size preferredAmountOfChunks = getPreferredAmountOfChunks();
|
||||||
Coordinate chunkPosition = getCurrentChunkPosition();
|
Coordinate chunkPosition = Coordinate.sceneToChunkCoordinate(new Coordinate(((int) world.getTranslateX()), ((int) world.getTranslateY())));
|
||||||
|
|
||||||
if (chunkPosition.x < chunkPos.x) {
|
if (chunkPosition.x < chunkPos.x) {
|
||||||
for (int i = 0; i < preferredAmountOfChunks.y; i++) {
|
for (int i = 0; i < preferredAmountOfChunks.y; i++) {
|
||||||
@@ -147,7 +146,7 @@ public class PlayerManager {
|
|||||||
|
|
||||||
private void redrawChunks() {
|
private void redrawChunks() {
|
||||||
Size preferredAmountOfChunks = getPreferredAmountOfChunks();
|
Size preferredAmountOfChunks = getPreferredAmountOfChunks();
|
||||||
Coordinate chunkPosition = getCurrentChunkPosition();
|
Coordinate chunkPosition = Coordinate.sceneToChunkCoordinate(new Coordinate(((int) world.getTranslateX()), ((int) world.getTranslateY())));
|
||||||
|
|
||||||
world.unloadAllChunks();
|
world.unloadAllChunks();
|
||||||
|
|
||||||
@@ -158,15 +157,6 @@ public class PlayerManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Coordinate getCurrentChunkPosition() {
|
|
||||||
double offset = Chunk.CHUNK_SIZE * Chunk.ENTITY_SIZE;
|
|
||||||
|
|
||||||
int chunkX = -(int) Math.floor((world.getTranslateX() + offset) / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE);
|
|
||||||
int chunkY = -(int) Math.floor((world.getTranslateY() + offset) / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE);
|
|
||||||
|
|
||||||
return new Coordinate(chunkX, chunkY);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Size getPreferredAmountOfChunks() {
|
private Size getPreferredAmountOfChunks() {
|
||||||
int loadedChunksX = (int) Math.ceil(world.getScene().getWidth() / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE) + 1;
|
int loadedChunksX = (int) Math.ceil(world.getScene().getWidth() / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE) + 1;
|
||||||
int loadedChunksY = (int) Math.ceil(world.getScene().getHeight() / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE) + 1;
|
int loadedChunksY = (int) Math.ceil(world.getScene().getHeight() / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE) + 1;
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ public class Coordinate {
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Coordinate WorldToChunkCoordinate(Coordinate worldPos) {
|
public static Coordinate worldToChunkCoordinate(Coordinate worldPos) {
|
||||||
int chunkSize = Chunk.CHUNK_SIZE * Chunk.ENTITY_SIZE;
|
int chunkSize = Chunk.CHUNK_SIZE * Chunk.ENTITY_SIZE;
|
||||||
|
|
||||||
return new Coordinate(worldPos.x / chunkSize, worldPos.y / chunkSize);
|
return new Coordinate(worldPos.x / chunkSize, worldPos.y / chunkSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Coordinate WorldToChunkBlock(Coordinate worldPos) {
|
public static Coordinate worldToChunkBlock(Coordinate worldPos) {
|
||||||
int chunkSize = Chunk.CHUNK_SIZE * Chunk.ENTITY_SIZE;
|
int chunkSize = Chunk.CHUNK_SIZE * Chunk.ENTITY_SIZE;
|
||||||
worldPos.x = worldPos.x % chunkSize;
|
worldPos.x = worldPos.x % chunkSize;
|
||||||
worldPos.y = worldPos.y % chunkSize;
|
worldPos.y = worldPos.y % chunkSize;
|
||||||
@@ -27,6 +27,15 @@ public class Coordinate {
|
|||||||
return new Coordinate(worldPos.x / Chunk.ENTITY_SIZE, worldPos.y / Chunk.ENTITY_SIZE);
|
return new Coordinate(worldPos.x / Chunk.ENTITY_SIZE, worldPos.y / Chunk.ENTITY_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Coordinate sceneToChunkCoordinate(Coordinate coordinate) {
|
||||||
|
double offset = Chunk.CHUNK_SIZE * Chunk.ENTITY_SIZE;
|
||||||
|
|
||||||
|
int chunkX = -(int) Math.floor((coordinate.x + offset) / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE);
|
||||||
|
int chunkY = -(int) Math.floor((coordinate.y + offset) / Chunk.CHUNK_SIZE / Chunk.ENTITY_SIZE);
|
||||||
|
|
||||||
|
return new Coordinate(chunkX, chunkY);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ public abstract class Entity extends javafx.scene.Group {
|
|||||||
|
|
||||||
public final void setData(String key, Object value) {
|
public final void setData(String key, Object value) {
|
||||||
data.put(key, value);
|
data.put(key, value);
|
||||||
|
this.trigger(key+"Changed",value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final <T> T getData(String key) {
|
public final <T> T getData(String key) {
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package com.yes.yes.utils;
|
||||||
|
|
||||||
|
import javafx.application.Platform;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
|
public class GlobalExecQueue {
|
||||||
|
private final static ArrayList<Runnable> queue = new ArrayList<>();
|
||||||
|
|
||||||
|
private GlobalExecQueue() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void schedule(Runnable runnable) {
|
||||||
|
queue.add(runnable);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void run() {
|
||||||
|
//Semaphore s = new Semaphore(0);
|
||||||
|
Platform.runLater( () -> {
|
||||||
|
for (Runnable runnable : queue) {
|
||||||
|
synchronized (GlobalExecQueue.class) {
|
||||||
|
runnable.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// s.release();
|
||||||
|
});
|
||||||
|
/*try {
|
||||||
|
//s.acquire();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}*/
|
||||||
|
queue.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,9 +2,12 @@ package com.yes.yes.utils;
|
|||||||
|
|
||||||
import javafx.scene.transform.Scale;
|
import javafx.scene.transform.Scale;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class Item extends javafx.scene.Group implements Cloneable {
|
public class Item extends javafx.scene.Group implements Cloneable {
|
||||||
final Part[][] parts = new Part[4][4];
|
final Part[][] parts = new Part[4][4];
|
||||||
|
|
||||||
|
|
||||||
public void setPart(int layer, int section, Part part) throws IllegalArgumentException {
|
public void setPart(int layer, int section, Part part) throws IllegalArgumentException {
|
||||||
if (layer < 0 || layer > 4 && section < 0 || section > 4) {
|
if (layer < 0 || layer > 4 && section < 0 || section > 4) {
|
||||||
throw new IllegalArgumentException("Argument out of range");
|
throw new IllegalArgumentException("Argument out of range");
|
||||||
@@ -65,7 +68,12 @@ public class Item extends javafx.scene.Group implements Cloneable {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Part part = this.getPart(i, j);
|
Part part = this.getPart(i, j);
|
||||||
|
|
||||||
|
if (part == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
Part clonePart = part.getClass().getConstructor(types).newInstance();
|
Part clonePart = part.getClass().getConstructor(types).newInstance();
|
||||||
|
|
||||||
clonePart.setColor(part.getColor());
|
clonePart.setColor(part.getColor());
|
||||||
clone.setPart(i, j, clonePart);
|
clone.setPart(i, j, clonePart);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@@ -75,4 +83,11 @@ public class Item extends javafx.scene.Group implements Cloneable {
|
|||||||
}
|
}
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof Item item)) return false;
|
||||||
|
return Arrays.deepEquals(parts, item.parts);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.yes.yes.utils;
|
||||||
|
|
||||||
|
public interface NotOverridable {
|
||||||
|
}
|
||||||
@@ -2,8 +2,10 @@ package com.yes.yes.utils;
|
|||||||
|
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public abstract class Part extends javafx.scene.Group {
|
public abstract class Part extends javafx.scene.Group {
|
||||||
Color color;
|
private Color color;
|
||||||
|
|
||||||
public void rotate(int quarters) {
|
public void rotate(int quarters) {
|
||||||
|
|
||||||
@@ -21,4 +23,11 @@ public abstract class Part extends javafx.scene.Group {
|
|||||||
public Color getColor() {
|
public Color getColor() {
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof Part part)) return false;
|
||||||
|
return Objects.equals(color, part.color) && o.getClass().getSimpleName().equals(this.getClass().getSimpleName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.yes.yes.world;
|
|||||||
import com.yes.yes.utils.Coordinate;
|
import com.yes.yes.utils.Coordinate;
|
||||||
import com.yes.yes.utils.Entity;
|
import com.yes.yes.utils.Entity;
|
||||||
import com.yes.yes.utils.NoiseGenerator;
|
import com.yes.yes.utils.NoiseGenerator;
|
||||||
|
import com.yes.yes.utils.NotOverridable;
|
||||||
import javafx.geometry.HPos;
|
import javafx.geometry.HPos;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.VPos;
|
import javafx.geometry.VPos;
|
||||||
@@ -28,7 +29,7 @@ public class Chunk extends GridPane {
|
|||||||
default -> throw new IllegalStateException();
|
default -> throw new IllegalStateException();
|
||||||
};
|
};
|
||||||
|
|
||||||
Color fillColor = new Color(chunkColor.getRed(),chunkColor.getGreen(), chunkColor.getBlue(), 0.1);
|
Color fillColor = new Color(chunkColor.getRed(), chunkColor.getGreen(), chunkColor.getBlue(), 0.1);
|
||||||
|
|
||||||
this.setBackground(new Background(new BackgroundFill(fillColor, CornerRadii.EMPTY, Insets.EMPTY)));
|
this.setBackground(new Background(new BackgroundFill(fillColor, CornerRadii.EMPTY, Insets.EMPTY)));
|
||||||
|
|
||||||
@@ -50,6 +51,9 @@ public class Chunk extends GridPane {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setEntity(Entity component, Coordinate pos) {
|
public void setEntity(Entity component, Coordinate pos) {
|
||||||
|
if (getEntity(pos) instanceof NotOverridable)
|
||||||
|
return;
|
||||||
|
|
||||||
removeEntity(pos);
|
removeEntity(pos);
|
||||||
data[pos.x + pos.y * CHUNK_SIZE] = component;
|
data[pos.x + pos.y * CHUNK_SIZE] = component;
|
||||||
this.add(component, pos.x, pos.y);
|
this.add(component, pos.x, pos.y);
|
||||||
@@ -58,6 +62,9 @@ public class Chunk extends GridPane {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void removeEntity(Coordinate pos) {
|
public void removeEntity(Coordinate pos) {
|
||||||
|
if (getEntity(pos) instanceof NotOverridable)
|
||||||
|
return;
|
||||||
|
|
||||||
Entity entity = getEntity(pos);
|
Entity entity = getEntity(pos);
|
||||||
|
|
||||||
if (entity != null) {
|
if (entity != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user