# HG changeset patch # User Matti Hamalainen # Date 1489659750 -7200 # Node ID fa9f29387cff0c80bc21afb91f2821106d085d0f # Parent ac5cf78a1cd2e0577c090cacfaa8a53d11409c4e Implement a very simplistic message queue system. diff -r ac5cf78a1cd2 -r fa9f29387cff game/Engine.java --- a/game/Engine.java Thu Mar 16 10:47:09 2017 +0200 +++ b/game/Engine.java Thu Mar 16 12:22:30 2017 +0200 @@ -503,7 +503,7 @@ GameBoard lauta = null; InputStream musa; - IDMContainer widgets; + IDMWindow widgets; AboutBox aboutBox; public void dbg(String msg) @@ -552,7 +552,7 @@ } // Create IDM GUI widgets - widgets = new IDMContainer(); + widgets = new IDMWindow(); lauta = new GameBoard(new IDMPoint(95, 130), 63); widgets.add(lauta); @@ -764,6 +764,13 @@ } catch (InterruptedException x) { } + + String msg; + do { + msg = widgets.getMessage(); + if (msg != null && msg == "NEWGAME") + startNewGame(); + } while (msg != null); } } @@ -776,7 +783,7 @@ public void clicked() { - startNewGame(); + sendMessage("NEWGAME"); } } diff -r ac5cf78a1cd2 -r fa9f29387cff game/IDMWidget.java --- a/game/IDMWidget.java Thu Mar 16 10:47:09 2017 +0200 +++ b/game/IDMWidget.java Thu Mar 16 12:22:30 2017 +0200 @@ -265,4 +265,18 @@ { modalWidget = m; } + + public void sendMessage(String msg) + { + if (parent != null) + parent.sendMessage(msg); + } + + public String getMessage() + { + if (parent != null) + return parent.getMessage(); + else + return null; + } } diff -r ac5cf78a1cd2 -r fa9f29387cff game/IDMWindow.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/game/IDMWindow.java Thu Mar 16 12:22:30 2017 +0200 @@ -0,0 +1,34 @@ +/* + * Ristipolku IDM window + * (C) Copyright 2011 Matti 'ccr' Hämäläinen + */ +package game; + +import java.awt.*; +import java.awt.event.*; +import java.util.*; + + + +public class IDMWindow extends IDMContainer +{ + private ArrayList messages; + + public IDMWindow() + { + messages = new ArrayList(); + } + + public void sendMessage(String msg) + { + messages.add(0, msg); + } + + public String getMessage() + { + if (messages.size() > 0) + return messages.remove(0); + else + return null; + } +}