Răsfoiți Sursa

interfaces for graphs

mesinger 6 ani în urmă
părinte
comite
6ff7ed177e

+ 1 - 4
src/me/hammerle/supersnuvi/Main.java

@@ -1,13 +1,10 @@
 package me.hammerle.supersnuvi;
 
 import me.hammerle.supersnuvi.gamelogic.Level;
-import me.hammerle.supersnuvi.gamelogic.LevelPathParser;
-import me.hammerle.supersnuvi.util.Pair;
+import me.hammerle.supersnuvi.gamelogic.pathfinding.LevelPathParser;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 public class Main
 {

+ 11 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/IEdge.java

@@ -0,0 +1,11 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+/**
+ * main interface for a edge in a graph
+ */
+public interface IEdge {
+
+    INode getStart();
+    INode getEnd();
+    double getWeight();
+}

+ 11 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/IGraph.java

@@ -0,0 +1,11 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+import java.util.Set;
+
+/**
+ * main interface for a graph
+ */
+public interface IGraph {
+
+    Set<? extends INode> getNodes();
+}

+ 11 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/IModifieableGraph.java

@@ -0,0 +1,11 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+/**
+ * modifieable graph, to add/remove nodes
+ * after object allocation
+ */
+public interface IModifieableGraph {
+
+    void addNode(INode node);
+    void removeNode(INode node);
+}

+ 11 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/IModifieableNode.java

@@ -0,0 +1,11 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+/**
+ * interface for a modifieable node in a graph
+ * allows to change edges after object creation
+ */
+interface IModifieableNode {
+
+    void addEdge(IEdge edge);
+    void removeEdge(IEdge edge);
+}

+ 11 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/INode.java

@@ -0,0 +1,11 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+import java.util.Set;
+
+/**
+ * main interface for a node for graphs
+ */
+public interface INode {
+
+    Set<? extends IEdge> getEdges();
+}

+ 38 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/LevelGraph.java

@@ -0,0 +1,38 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * level representation as graph
+ * used to apply path finding for entities
+ */
+public class LevelGraph implements IGraph, IModifieableGraph {
+
+    private Set<PathNode> nodes;
+
+    public LevelGraph(){
+
+        nodes = new HashSet<>();
+    }
+
+
+    @Override
+    public Set<PathNode> getNodes() {
+        return nodes;
+    }
+
+    @Override
+    public void addNode(INode node) {
+
+        if(node instanceof PathNode)
+            nodes.add((PathNode) node);
+    }
+
+    @Override
+    public void removeNode(INode node) {
+
+        if(node instanceof PathNode)
+            nodes.remove(node);
+    }
+}

+ 14 - 1
src/me/hammerle/supersnuvi/gamelogic/LevelPathParser.java → src/me/hammerle/supersnuvi/gamelogic/pathfinding/LevelPathParser.java

@@ -1,6 +1,9 @@
-package me.hammerle.supersnuvi.gamelogic;
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
 
 import me.hammerle.supersnuvi.Game;
+import me.hammerle.supersnuvi.gamelogic.ILevel;
+import me.hammerle.supersnuvi.gamelogic.Level;
+import me.hammerle.supersnuvi.gamelogic.LevelData;
 import me.hammerle.supersnuvi.tiles.Tile;
 import me.hammerle.supersnuvi.util.CollisionObject;
 import me.hammerle.supersnuvi.util.Pair;
@@ -9,6 +12,16 @@ import java.util.*;
 
 public class LevelPathParser {
 
+    private final ILevel level;
+    private final LevelData levelData;
+
+    public LevelPathParser(Level level) {
+        this.level = level;
+        levelData = level.getData();
+    }
+
+
+
     public static Map<Integer, List<Integer>> getCoordinatesOfCollisionTiles(Level lvl){
 
         Map<Integer, List<Integer>> coordinates = new HashMap<>();

+ 34 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/PathEdge.java

@@ -0,0 +1,34 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+/**
+ * edge of the graph, which represents the level layout
+ * used for pathfinding
+ */
+public class PathEdge implements IEdge {
+
+    private PathNode start;
+    private PathNode end;
+    private double weight;
+
+    public PathEdge(PathNode start, PathNode end, double weight) {
+        this.start = start;
+        this.end = end;
+        this.weight = weight;
+    }
+
+
+    @Override
+    public INode getStart() {
+        return start;
+    }
+
+    @Override
+    public INode getEnd() {
+        return end;
+    }
+
+    @Override
+    public double getWeight() {
+        return weight;
+    }
+}

+ 43 - 0
src/me/hammerle/supersnuvi/gamelogic/pathfinding/PathNode.java

@@ -0,0 +1,43 @@
+package me.hammerle.supersnuvi.gamelogic.pathfinding;
+
+import me.hammerle.supersnuvi.util.Pair;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * node of the graph, which represents the level layout
+ * used for pathfinding
+ */
+public class PathNode implements INode, IModifieableNode{
+
+    private Pair<Integer, Integer> levelCoordinates;
+    private Set<PathEdge> edges;
+
+    public PathNode(int x, int y) {
+
+        levelCoordinates = new Pair<>(x, y);
+        edges = new HashSet<>();
+    }
+
+
+    @Override
+    public void addEdge(IEdge edge) {
+
+        if(edge instanceof PathEdge)
+            edges.add((PathEdge) edge);
+    }
+
+    @Override
+    public void removeEdge(IEdge edge) {
+
+        if(edge instanceof PathEdge)
+            edges.remove(edge);
+    }
+
+    @Override
+    public Set<PathEdge> getEdges() {
+
+        return edges;
+    }
+}