1 /* 2 Copyright (C) 2015, by Laszlo Szeremi under the Boost license. 3 4 VDP Engine 5 */ 6 7 8 module app; 9 10 import std.stdio; 11 import std..string; 12 import std.conv; 13 import std.random; 14 15 import derelict.sdl2.sdl; 16 import derelict.freeimage.freeimage; 17 18 //import system.config; 19 20 import PixelPerfectEngine.graphics.outputScreen; 21 import PixelPerfectEngine.graphics.raster; 22 import PixelPerfectEngine.graphics.layers; 23 24 import PixelPerfectEngine.graphics.bitmap; 25 import PixelPerfectEngine.collision; 26 import PixelPerfectEngine.system.inputHandler; 27 import PixelPerfectEngine.system.file; 28 import PixelPerfectEngine.system.etc; 29 //import system.tgaconv; 30 import PixelPerfectEngine.system.config; 31 import PixelPerfectEngine.system.advBitArray; 32 33 import editor; 34 import PixelPerfectEngine.extbmp.extbmp; 35 36 int main(string[] args) 37 { 38 39 DerelictSDL2.load(); 40 DerelictFI.load(); 41 42 Editor e = new Editor(args); 43 e.whereTheMagicHappens; 44 //MainProgram game = new MainProgram(); 45 //testAdvBitArrays(128); 46 //TileLayerUnittest prg = new TileLayerUnittest(); 47 return 0; 48 } 49 50 void testAdvBitArrays(int l){ 51 //General rule: at every step, write all the results to the screen 52 //step 1: Generate 4 bitarrays with the l length 53 AdvancedBitArray[4] ba; 54 for(int i; i < ba.length; i++){ 55 int x = (l/8)+1; 56 void[] rawData; 57 rawData.length = x; 58 for(int j; j < l/8 ; j++){ 59 ubyte b = to!ubyte(uniform(0,255)); 60 *cast(ubyte*)(rawData.ptr + j) = b; 61 } 62 ba[i] = new AdvancedBitArray(rawData,l); 63 writeln(ba[i].toString()); 64 } 65 //step 2: And, or, and then xor all the arrays together 66 for(int i; i < ba.length; i++){ 67 for(int j; j < ba.length; j++){ 68 AdvancedBitArray resand = ba[i] & ba[j], resor = ba[i] | ba[j], resxor = ba[i] ^ ba[j]; 69 writeln(resand.toString());writeln(resor.toString());writeln(resxor.toString()); 70 } 71 }//*/ 72 //step 3: Test bit shifting in both ways by 13 73 /*for(int i; i < ba.length; i++){ 74 AdvancedBitArray shl = ba[i]<<5, shr = ba[i]>>5, sl = ba[i][1..50]; 75 writeln(shl.toString()); 76 writeln(shr.toString()); 77 writeln(sl.toString()); 78 }//*/ 79 ubyte[16] testdata = [0,0,81,51,186,186,0,86,48,82,35,5,99,208,95,9]; 80 ba[0] = new AdvancedBitArray(cast(void[])testdata,128); 81 ba[1] = new AdvancedBitArray(cast(void[])testdata,128); 82 for(int i ; i < 32 ; i++){ 83 writeln(ba[0].test(i,40,ba[1],16)); 84 } 85 } 86 87 class TileLayerUnittest : SystemEventListener, InputListener{ 88 bool isRunning, up, down, left, right; 89 OutputScreen output; 90 Raster r; 91 TileLayer t; 92 //Bitmap16Bit[wchar] tiles; 93 InputHandler ih; 94 this(){ 95 isRunning = true; 96 ExtendibleBitmap tileSource = new ExtendibleBitmap("tiletest.xmp"); 97 t = new TileLayer(32,32, TileLayerRenderingMode.BLITTER); 98 for(int i; i < tileSource.bitmapID.length; i++){ 99 string hex = tileSource.bitmapID[i]; 100 //writeln(hex[hex.length-4..hex.length]); 101 t.addTile(loadBitmapFromXMP(tileSource, hex), to!wchar(parseHex(hex[hex.length-4..hex.length]))); 102 } 103 wchar[] mapping; 104 mapping.length = 256*256; 105 for(int i; i < mapping.length; i++){ 106 mapping[i] = to!wchar(uniform(0x0000,0x00AA)); 107 } 108 ih = new InputHandler(); 109 ih.sel ~= this; 110 ih.il ~= this; 111 ih.kb ~= KeyBinding(4096, SDL_SCANCODE_UP,0, "up", Devicetype.KEYBOARD); 112 ih.kb ~= KeyBinding(4096, SDL_SCANCODE_DOWN,0, "down", Devicetype.KEYBOARD); 113 ih.kb ~= KeyBinding(4096, SDL_SCANCODE_LEFT,0, "left", Devicetype.KEYBOARD); 114 ih.kb ~= KeyBinding(4096, SDL_SCANCODE_RIGHT,0, "right", Devicetype.KEYBOARD); 115 116 t.loadMapping(256,256,mapping); 117 118 output = new OutputScreen("Tile Layer Unittest", 1280,960); 119 r = new Raster(320,240,output); 120 output.setMainRaster(r); 121 loadPaletteFromXMP(tileSource, "default", r); 122 r.addLayer(t); 123 //r.addRefreshListener(output, 0); 124 while(isRunning){ 125 r.refresh(); 126 ih.test(); 127 if(up) t.relScroll(0, 1); 128 if(down) t.relScroll(0, -1); 129 if(left) t.relScroll(1, 0); 130 if(right) t.relScroll(-1, 0); 131 //t.relScroll(1,0); 132 } 133 } 134 override public void onQuit() { 135 isRunning = false; 136 } 137 override public void controllerAdded(uint ID) { 138 139 } 140 override public void controllerRemoved(uint ID) { 141 142 } 143 override public void keyPressed(string ID,uint timestamp,uint devicenumber,uint devicetype) { 144 //writeln(ID); 145 switch(ID){ 146 case "up": up = true; break; 147 case "down": down = true; break; 148 case "left": left = true; break; 149 case "right": right = true; break; 150 default: break; 151 } 152 } 153 override public void keyReleased(string ID,uint timestamp,uint devicenumber,uint devicetype) { 154 switch(ID){ 155 case "up": up = false; break; 156 case "down": down = false; break; 157 case "left": left = false; break; 158 case "right": right = false; break; 159 default: break; 160 } 161 } 162 163 }