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