Skip to content

Commit 81a8477

Browse files
committed
Events working with timelines
1 parent 875e9ac commit 81a8477

9 files changed

Lines changed: 89 additions & 61 deletions

File tree

rectangles/engine/Physics.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void update(GameObj caller, CopyOnWriteArrayList<GameObj> objects) {
4747
GameObj collidedWith = null;
4848

4949
for (GameObj obj : objects) {
50-
if (this.intersects(obj.getPy().getBounds2D()) && !obj.getUUID().equals(caller.getUUID())) {
50+
if (this.intersects(obj.getPy().getBounds2D()) && !obj.getUUID().equals(caller.getUUID()) && !obj.getType().equals("player")) {
5151
collidedWith = obj;
5252
// TODO: Need break here?
5353
break;
@@ -67,10 +67,10 @@ public void update(GameObj caller, CopyOnWriteArrayList<GameObj> objects) {
6767
HashMap<String, Object> data = new HashMap<>();
6868
data.put("caller", caller.getUUID());
6969
data.put("collidedWith", collidedWith.getUUID());
70+
// TODO: Could just make the collision event also be movement?
7071
Event e = new Event(Event.EVENT_COLLISION, Rectangles.globalTimeline.getCurrentTime(), data);
7172
Rectangles.eventManager.raiseEvent(e);
72-
}
73-
73+
} else {
7474
this.velocity.add(this.acceleration);
7575
this.velocity.limit(this.topSpeed);
7676
if (this.velocity.mag() > 0) {
@@ -83,9 +83,8 @@ public void update(GameObj caller, CopyOnWriteArrayList<GameObj> objects) {
8383
Event e = new Event(Event.EVENT_MOVEMENT, Rectangles.globalTimeline.getCurrentTime(), data);
8484
Rectangles.eventManager.raiseEvent(e);
8585
// Actually move
86-
//this.setLocation(newLoc);
87-
88-
//this.location.add(this.velocity);
86+
//this.location.add(this.velocity);
87+
}
8988
}
9089

9190
// Reset acceleration?

rectangles/engine/Platform.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,18 +100,18 @@ public void handleEvent(Event e) {
100100
GameObj collidedWith = Rectangles.objectMap.get((UUID) e.getData().get("collidedWith"));
101101
if (collidedWith.getType().equals("boundary")) {
102102
this.getPy().getVelocity().mult(-1);
103-
if (this.getPy().getVelocity().mag() > 0) {
104-
PVector newLoc = new PVector(this.getPy().getLocation().x, this.getPy().getLocation().y);
105-
newLoc.add(this.getPy().getVelocity());
106-
HashMap<String, Object> data = new HashMap<>();
107-
data.put("caller", this.getUUID());
108-
data.put("x", newLoc.x);
109-
data.put("y", newLoc.y);
110-
Event mov = new Event(Event.EVENT_MOVEMENT, Rectangles.globalTimeline.getCurrentTime(), data);
111-
Rectangles.eventManager.raiseEvent(mov);
112-
// Actually move
113-
//this.getPy().setLocation(newLoc);
114-
}
103+
}
104+
if (this.getPy().getVelocity().mag() > 0) {
105+
PVector newLoc = new PVector(this.getPy().getLocation().x, this.getPy().getLocation().y);
106+
newLoc.add(this.getPy().getVelocity());
107+
HashMap<String, Object> data = new HashMap<>();
108+
data.put("caller", this.getUUID());
109+
data.put("x", newLoc.x);
110+
data.put("y", newLoc.y);
111+
Event mov = new Event(Event.EVENT_MOVEMENT, Rectangles.globalTimeline.getCurrentTime(), data);
112+
Rectangles.eventManager.raiseEvent(mov);
113+
// Actually move
114+
//this.getPy().setLocation(newLoc);
115115
}
116116
}
117117
break;

rectangles/engine/Player.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public void handleEvent(Event e) {
9494
} else {
9595
switch (collidedWith.getType()) {
9696
case ("player"):
97+
System.out.println("player hit player");
9798
// Do nothing, clip-less
9899
break;
99100
case ("platform"):
@@ -110,7 +111,7 @@ public void handleEvent(Event e) {
110111
data.put("caller", this.getUUID());
111112
Event death = new Event(Event.EVENT_DEATH, e.getTime(), data);
112113
Rectangles.eventManager.raiseEvent(death);
113-
114+
break;
114115
default:
115116
this.getPy().getVelocity().mult((float) -1);
116117
break;
@@ -124,9 +125,9 @@ public void handleEvent(Event e) {
124125
data.put("x", newLoc.x);
125126
data.put("y", newLoc.y);
126127
Event mov = new Event(Event.EVENT_MOVEMENT, e.getTime(), data);
127-
//Rectangles.eventManager.raiseEvent(mov);
128+
Rectangles.eventManager.raiseEvent(mov);
128129
// Actually move
129-
this.getPy().setLocation(newLoc);
130+
//this.getPy().setLocation(newLoc);
130131
}
131132
}
132133
break;
@@ -146,7 +147,8 @@ public void handleEvent(Event e) {
146147
data.put("caller", this.getUUID());
147148
data.put("x", s.getPy().getLocation().x);
148149
data.put("y", s.getPy().getLocation().y);
149-
Event mov = new Event(Event.EVENT_MOVEMENT, e.getTime(), data);
150+
Event mov = new Event(Event.EVENT_MOVEMENT, Rectangles.globalTimeline.getCurrentTime()
151+
+ Rectangles.physicsTimeline.getTickSize(), data);
150152
Rectangles.eventManager.raiseEvent(mov);
151153
}
152154
break;

rectangles/engine/Rectangles.java

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ public class Rectangles extends PApplet {
3535
public static Spawn[] spawnPoints = new Spawn[2];
3636
public static Random generator = new Random();
3737
public static int deathPoints = 0;
38-
public static Timeline globalTimeline = new GlobalTimeline(1000/144);
38+
public static Timeline globalTimeline = new GlobalTimeline(1000/500);
39+
public static Timeline eventTimeline = new LocalTimeline(globalTimeline, 1);
3940
public static Timeline physicsTimeline = new LocalTimeline(globalTimeline, 1);
40-
public static Timeline networkTimeline = new LocalTimeline(globalTimeline, 3);
41-
public static Timeline renderTimeline = new LocalTimeline(globalTimeline, 3);
41+
public static Timeline networkTimeline = new LocalTimeline(globalTimeline, 6);
42+
public static Timeline renderTimeline = new LocalTimeline(globalTimeline, 6);
4243
public static EventManager eventManager = new EventManager();
4344
public static ExecutorService threadPool = Executors.newFixedThreadPool(NUM_THREADS);
4445

@@ -71,23 +72,22 @@ public Rectangles(boolean isServer) {
7172
* Just runs the game loop infinitely
7273
*/
7374
public void runLoop() {
74-
for (GameObj obj : movObjects) {
75-
eventManager.registerHandler(obj, Event.EVENT_COLLISION);
76-
eventManager.registerHandler(obj, Event.EVENT_MOVEMENT);
77-
eventManager.registerHandler(obj, Event.EVENT_PHYSICS);
78-
if (obj.getType() == "player") {
79-
eventManager.registerHandler(obj, Event.EVENT_INPUT);
80-
eventManager.registerHandler(obj, Event.EVENT_DEATH);
81-
eventManager.registerHandler(obj, Event.EVENT_SPAWN);
75+
if (this.isServer) {
76+
for (GameObj obj : movObjects) {
77+
eventManager.registerHandler(obj, Event.EVENT_COLLISION);
78+
eventManager.registerHandler(obj, Event.EVENT_MOVEMENT);
79+
eventManager.registerHandler(obj, Event.EVENT_PHYSICS);
80+
if (obj.getType() == "player") {
81+
eventManager.registerHandler(obj, Event.EVENT_INPUT);
82+
eventManager.registerHandler(obj, Event.EVENT_DEATH);
83+
eventManager.registerHandler(obj, Event.EVENT_SPAWN);
84+
}
85+
HashMap<String, Object> data = new HashMap<>();
86+
data.put("caller", obj.getUUID());
87+
Event e = new Event(Event.EVENT_PHYSICS,
88+
globalTimeline.getCurrentTime() + physicsTimeline.getTickSize(), data);
89+
eventManager.raiseEvent(e);
8290
}
83-
HashMap<String, Object> data = new HashMap<>();
84-
data.put("caller", obj.getUUID());
85-
Event e = new Event(Event.EVENT_PHYSICS, globalTimeline.getCurrentTime()
86-
+ physicsTimeline.getTickSize(), data);
87-
eventManager.raiseEvent(e);
88-
89-
90-
9191
}
9292
while(true) {
9393
this.gameLoop(globalTimeline.resetDelta());
@@ -100,16 +100,24 @@ public void runLoop() {
100100
*/
101101
private void gameLoop(boolean delta) {
102102
if (delta) {
103-
threadPool.execute(eventManager);
104-
//this.updatePhysics(physicsTimeline.getAndResetDelta());
105-
//this.updateNetwork(networkTimeline.resetDelta());
103+
if (this.isServer) {
104+
this.updateEvent(eventTimeline.resetDelta());
105+
// this.updatePhysics(physicsTimeline.getAndResetDelta());
106+
this.updateNetwork(networkTimeline.resetDelta());
107+
}
106108
this.updateRender(renderTimeline.resetDelta());
107109
}
108110
}
109111

110112
/* Update methods with deltas */
111113
// TODO: Determine if this is event the best way to do it...
112114

115+
private void updateEvent(boolean delta) {
116+
if (delta) {
117+
threadPool.execute(eventManager);
118+
}
119+
}
120+
113121
private void updateRender(boolean delta) {
114122
if (delta) {
115123
this.redraw();
@@ -248,7 +256,7 @@ public void setup() {
248256

249257
} else {
250258
try {
251-
this.localClient = new Client(this, new Socket("127.0.0.1", 9200), this.threadPool, null);
259+
this.localClient = new Client(this, new Socket("127.0.0.1", 9200), threadPool, null);
252260
} catch (IOException e) {
253261
System.out.println("Error opening local client socket");
254262
e.printStackTrace();

rectangles/engine/events/EventManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void registerHandler(GameObj handler, int type) {
3939
}
4040

4141
public void raiseEvent(Event e) {
42-
System.out.println(Rectangles.eventManager.getEventQueue().size());
42+
//System.out.println(Rectangles.eventManager.getEventQueue().size());
4343
//System.out.println(e.getType() + " : " + Rectangles.objectMap.get(e.getData().get("caller")).getType());
4444
this.eventQueue.add(e);
4545
}

rectangles/engine/time/GlobalTimeline.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,24 @@ public void pause() {
4444
@Override
4545
public void unpause() {
4646
synchronized (this.lock) {
47-
this.pausedTotalTime += (System.currentTimeMillis() - this.pausedTime);
48-
this.pausedTime = 0;
49-
this.isPaused = false;
47+
if (this.isPaused) {
48+
this.pausedTotalTime += (System.currentTimeMillis() - this.pausedTime);
49+
this.pausedTime = 0;
50+
this.isPaused = false;
51+
}
5052
}
5153
}
5254

5355
@Override
5456
public long getCurrentTime() {
57+
long anchorTime = 0;
5558
if (this.isPaused ) {
56-
return this.pausedTime;
59+
anchorTime = this.pausedTime;
5760
} else {
58-
long elapsedTime = (System.currentTimeMillis() - this.startTime) - this.pausedTotalTime;
59-
return elapsedTime / this.tickSize;
61+
anchorTime = System.currentTimeMillis();
6062
}
63+
long elapsedTime = (anchorTime - this.startTime) - this.pausedTotalTime;
64+
return elapsedTime / this.tickSize;
6165
}
6266

6367
@Override

rectangles/engine/time/LocalTimeline.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,20 +48,24 @@ public void pause() {
4848
@Override
4949
public void unpause() {
5050
synchronized (this.lock) {
51-
this.pausedTotalTime += (anchor.getCurrentTime() - this.pausedTime);
52-
this.pausedTime = 0;
53-
this.isPaused = false;
51+
if (this.isPaused) {
52+
this.pausedTotalTime += (anchor.getCurrentTime() - this.pausedTime);
53+
this.pausedTime = 0;
54+
this.isPaused = false;
55+
}
5456
}
5557
}
5658

5759
@Override
5860
public long getCurrentTime() {
59-
if (this.isPaused) {
60-
return this.pausedTime;
61+
long anchorTime = 0;
62+
if (this.isPaused ) {
63+
anchorTime = this.pausedTime;
6164
} else {
62-
long elapsedTime = (this.anchor.getCurrentTime() - this.startTime) - this.pausedTotalTime;
63-
return elapsedTime / this.tickSize;
65+
anchorTime = anchor.getCurrentTime();
6466
}
67+
long elapsedTime = (anchorTime - this.startTime) - this.pausedTotalTime;
68+
return elapsedTime / this.tickSize;
6569
}
6670

6771
@Override

rectangles/networking/Packet.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,7 @@ public Packet(PApplet inst, String serial) {
257257
Event e = new Event(Event.EVENT_INPUT, Rectangles.globalTimeline.getCurrentTime(), data);
258258
data.put("keyCode", this.keyPress);
259259
data.put("caller", this.uuid);
260-
Rectangles.eventManager.raiseEvent(e);
261-
260+
Rectangles.eventManager.raiseEvent(e);
262261
}
263262
break;
264263
default:

rectangles/networking/Server.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import java.io.IOException;
33
import java.net.ServerSocket;
44
import java.net.Socket;
5+
import java.util.HashMap;
56
import java.util.Random;
67
import java.util.concurrent.ConcurrentLinkedQueue;
78
import java.util.concurrent.CopyOnWriteArrayList;
@@ -75,10 +76,21 @@ public void run() {
7576
Rectangles.movObjects.add(client.getPlayer());
7677

7778
// Register player for events
79+
Rectangles.eventManager.registerHandler(client.getPlayer(), Event.EVENT_COLLISION);
80+
Rectangles.eventManager.registerHandler(client.getPlayer(), Event.EVENT_MOVEMENT);
81+
Rectangles.eventManager.registerHandler(client.getPlayer(), Event.EVENT_PHYSICS);
7882
Rectangles.eventManager.registerHandler(client.getPlayer(), Event.EVENT_INPUT);
7983
Rectangles.eventManager.registerHandler(client.getPlayer(), Event.EVENT_DEATH);
8084
Rectangles.eventManager.registerHandler(client.getPlayer(), Event.EVENT_SPAWN);
8185

86+
// Start physics processing for new player
87+
HashMap<String, Object> data = new HashMap<>();
88+
data.put("caller", client.getPlayer().getUUID());
89+
Event e = new Event(Event.EVENT_PHYSICS, 0, data);
90+
Rectangles.eventManager.raiseEvent(e);
91+
92+
93+
// Send back register packet to client
8294
p = new Packet(Packet.PACKET_REGISTER, client.getPlayer());
8395
client.write(p);
8496
synchronized (this.clients) {

0 commit comments

Comments
 (0)