1 /** 2 * Copyright: Copyright (C) 2018 Gabriel Gheorghe, All Rights Reserved 3 * Authors: $(Gabriel Gheorghe) 4 * License: $(LINK2 https://www.gnu.org/licenses/gpl-3.0.txt, GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007) 5 * Source: $(LINK2 https://github.com/GabyForceQ/LibertyEngine/blob/master/source/liberty/camera/preset.d) 6 * Documentation: 7 * Coverage: 8 **/ 9 module liberty.camera.preset; 10 11 import liberty.core.engine; 12 import liberty.input.impl; 13 import liberty.input.keyboard.constants; 14 import liberty.camera; 15 import liberty.math.transform; 16 17 /// A camera custom setting. 18 class CameraPreset { 19 /// 20 void delegate(Camera) runImplicitProcess; 21 /// 22 void delegate(Camera, CameraMovement, float) runKeyboardProcess; 23 24 /// 25 this(void delegate(Camera) runImplicitProcess, 26 void delegate(Camera, CameraMovement, float) runKeyboardProcess) 27 do { 28 this.runImplicitProcess = runImplicitProcess; 29 this.runKeyboardProcess = runKeyboardProcess; 30 } 31 32 /// Returns an empty camera preset. 33 static typeof(this) getEmpty() { 34 return new CameraPreset((camera) { 35 }, (camera, direction, velocity) { 36 }); 37 } 38 39 /// Returns implicit camera preset. 40 static typeof(this) getDefault() { 41 return new CameraPreset((camera) { 42 if (Input.getKeyboard.isButtonHold(KeyboardButton.W)) 43 camera.processKeyboard(CameraMovement.FORWARD); 44 if (Input.getKeyboard.isButtonHold(KeyboardButton.S)) 45 camera.processKeyboard(CameraMovement.BACKWARD); 46 if (Input.getKeyboard.isButtonHold(KeyboardButton.A)) 47 camera.processKeyboard(CameraMovement.LEFT); 48 if (Input.getKeyboard.isButtonHold(KeyboardButton.D)) 49 camera.processKeyboard(CameraMovement.RIGHT); 50 }, (camera, direction, velocity) { 51 final switch (direction) with (CameraMovement) { 52 case FORWARD: 53 camera.component!Transform.setLocation!"+="(camera.frontVector * velocity); 54 break; 55 case BACKWARD: 56 camera.component!Transform.setLocation!"-="(camera.frontVector * velocity); 57 break; 58 case LEFT: 59 camera.component!Transform.setLocation!"-="(camera.rightVector * velocity); 60 break; 61 case RIGHT: 62 camera.component!Transform.setLocation!"+="(camera.rightVector * velocity); 63 break; 64 case UP: 65 camera.component!Transform.setLocation!"+="(camera.upVector * velocity); 66 break; 67 case DOWN: 68 camera.component!Transform.setLocation!"-="(camera.upVector * velocity); 69 } 70 }); 71 } 72 }