66import ru .base .game .engine .lang .Parser ;
77import ru .base .game .engine .lang .VirtualMachine ;
88import ru .base .game .engine .map .StandardMapGenerator ;
9+ import ru .base .game .engine .messages .SourceLevel ;
910
1011import java .util .concurrent .atomic .AtomicInteger ;
1112
@@ -16,13 +17,13 @@ public final class Game implements Evaluator.ObjectTarget, Context {
1617 private final Map .Generator generator = new StandardMapGenerator ();
1718 private final int width = 41 ;
1819 private final int height = 41 ;
19- private final Listener listener ;
20+ private final Message . Listener listener ;
2021 private final Player player = new Player ();
2122 private boolean userAttacked = false ;
2223 private Map map ;
2324 private State state = State .INITIATE ;
2425
25- public Game (Listener listener ) {
26+ public Game (Message . Listener listener ) {
2627 this .listener = listener ;
2728 }
2829
@@ -52,7 +53,7 @@ public void tick() {
5253 .filter (co -> co .source () instanceof Event e && e .type () == Event .Type .ENTER )
5354 .findAny ().ifPresent (c -> player .flyTo (c .x (), c .y ()));
5455 change (State .RUNNING );
55- emitRefresh ();
56+ emitLevel ();
5657 break ;
5758 }
5859 default : {
@@ -61,8 +62,21 @@ public void tick() {
6162 }
6263 }
6364
64- private void emitRefresh () {
65- listener .emit (new Listener .Refresh (map , player ));
65+ private void emitLevel () {
66+ int [][] layers = new int [width ][height ];
67+ for (int y = 0 ; y < height ; y ++) {
68+ for (int x = 0 ; x < width ; x ++) {
69+ layers [x ][y ] = ((Map .BlockType ) map .at (x , y , Map .Layer .BLOCKS )).ordinal () + 2 ;
70+ }
71+ }
72+ var assets = new SourceLevel .Asset []{
73+ new SourceLevel .Asset ("grass-short" , false , 0 ),
74+ new SourceLevel .Asset ("grass-tall" , false , 1 ),
75+ new SourceLevel .Asset ("bush" , true , 0 ),
76+ new SourceLevel .Asset ("wave" , true , 1 ),
77+ };
78+ listener .emit (new Message <>(Message .Type .LEVEL ,
79+ new SourceLevel (width , height , layers , player .x (), player .y (), player .viewport (), assets )));
6680 }
6781
6882 private void change (State state ) {
@@ -113,7 +127,7 @@ private void actionTo(int x, int y) {
113127 map .set (x , y , Map .Layer .EVENTS , null );
114128 }
115129 }
116- emitRefresh ();
130+ emitLevel ();
117131 } else {
118132 change (State .BATTLE );
119133 if (userAttacked ) {
@@ -139,7 +153,7 @@ private void actionTo(int x, int y) {
139153 change (State .BATTLE );
140154 }
141155 }
142- emitRefresh ();
156+ emitLevel ();
143157 }
144158 }
145159
0 commit comments