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 }