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 }