1 module gui; 2 3 import liberty.engine; 4 import controller; 5 6 /** 7 * Example class for player. 8 **/ 9 final class HUD : Surface { 10 mixin NodeConstructor; 11 12 private { 13 Button[10][10] button; 14 Tuple!(Button, Event)[] leftClickEvents; 15 Tuple!(Button, Event)[] mouseOverEvents; 16 Material greyMaterial; 17 Material redMaterial; 18 CubeMap skybox; 19 } 20 21 /** 22 * Optional. 23 * If declared, it is called after all objects instantiation. 24 **/ 25 override void start() { 26 greyMaterial = new Material("res/textures/grey.bmp"); 27 redMaterial = new Material("res/textures/red.bmp"); 28 29 foreach (i; 0..10) 30 foreach (j; 0..10) { 31 (button[i][j] = new Button("Button[" ~ i.to!string ~ "][" ~ j.to!string ~ "]", this)) 32 .setIndex(i, j) 33 .getTransform() 34 .setLocation(100 + i * 50, 100 + j * 50) 35 .setScale(50, 50); 36 button[i][j].getModel().setMaterials([greyMaterial]); 37 leftClickEvents ~= tuple(button[i][j], Event.MouseLeftClick); 38 mouseOverEvents ~= tuple(button[i][j], Event.MouseOver); 39 } 40 41 // Action for mouse over 42 addAction("ColorToRed", (sender, event) { 43 foreach (btn; button) 44 foreach (b; btn) 45 b.getModel().setMaterials([greyMaterial]); 46 47 const x = sender.getIndex().x; 48 const y = sender.getIndex().y; 49 50 if (x != 0 && y != 0) 51 button[x - 1][y - 1].getModel().setMaterials([redMaterial]); 52 53 if (x != 0) 54 button[x - 1][y].getModel().setMaterials([redMaterial]); 55 56 if (x != 0 && y != 9) 57 button[x - 1][y + 1].getModel().setMaterials([redMaterial]); 58 59 if (x != 9 && y != 0) 60 button[x + 1][y - 1].getModel().setMaterials([redMaterial]); 61 62 if (x != 9) 63 button[x + 1][y].getModel().setMaterials([redMaterial]); 64 65 if (x != 9 && y != 9) 66 button[x + 1][y + 1].getModel().setMaterials([redMaterial]); 67 68 if (y != 0) 69 button[x][y - 1].getModel().setMaterials([redMaterial]); 70 71 if (y != 9) 72 button[x][y + 1].getModel().setMaterials([redMaterial]); 73 74 }, mouseOverEvents); 75 76 (skybox = spawn!CubeMap("Sky")) 77 .build(new Material([ 78 "res/textures/skybox/right.bmp", 79 "res/textures/skybox/left.bmp", 80 "res/textures/skybox/bottom.bmp", 81 "res/textures/skybox/top.bmp", 82 "res/textures/skybox/back.bmp", 83 "res/textures/skybox/front.bmp" 84 ])); 85 } 86 87 /** 88 * Optional. 89 * If declared, it is called every frame. 90 **/ 91 override void update() { 92 super.update(); 93 94 updateMouseMode(); 95 96 if (Input.getJoystick().isButtonDown(JoystickButton.A)) 97 simulateAction("ColorToRed", button[1][1], Event.Update); 98 } 99 }