1 module paddle;
2 
3 import unecht;
4 
5 ///
6 final class PaddleLogic : UEComponent
7 {
8     mixin(UERegisterComponent!());
9     
10     auto keyUp = UEKey.u;
11     auto keyDown = UEKey.j;
12     
13     static immutable BORDER = 7.2f;
14     
15     static UEMaterial sharedMaterial;
16     
17     override void onCreate() {
18         super.onCreate;
19         
20         registerEvent(UEEventType.key, &OnKeyEvent);
21         
22         auto shape = entity.addComponent!UEShapeBox;
23         entity.addComponent!UEPhysicsColliderBox;
24         
25         if(!sharedMaterial)
26         {
27             sharedMaterial = entity.addComponent!UEMaterial;
28             sharedMaterial.setProgram(UEMaterial.vs_flat,UEMaterial.fs_flat,"flat");
29             sharedMaterial.uniforms.setColor(vec4(0,1,0,1));
30         }
31         shape.renderer.material = sharedMaterial;
32         
33         auto material = entity.addComponent!UEPhysicsMaterial;
34         material.materialInfo.bouncyness = 1.0f;
35         material.materialInfo.friction = 0;
36     }
37     
38     override void onUpdate() {
39         super.onUpdate;
40         
41         auto pos = sceneNode.position;
42         pos.z += 0.3f * control;
43         pos.z = pos.z.clamp(-BORDER,BORDER);
44         
45         sceneNode.position = pos;
46     }
47     
48     private void OnKeyEvent(UEEvent _ev)
49     {
50         if(_ev.keyEvent.action == UEEvent.KeyEvent.Action.Down ||
51             _ev.keyEvent.action == UEEvent.KeyEvent.Action.Up
52             )
53         {
54             bool pressed = _ev.keyEvent.action == UEEvent.KeyEvent.Action.Down;
55             
56             if(_ev.keyEvent.key == keyUp)
57             {
58                 control += pressed?1:-1;
59             }
60             else if(_ev.keyEvent.key == keyDown)
61             {
62                 control -= pressed?1:-1;
63             }
64         }
65     }
66     
67 private:
68     float control = 0;
69 }