PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/Jump.hx

http://github.com/gwillen/test
Haxe | 161 lines | 118 code | 41 blank | 2 comment | 8 complexity | ae5eec17861d943a8fe976cab1f592c1 MD5 | raw file
Possible License(s): GPL-3.0
  1. import flash.events.Event;
  2. import flash.events.MouseEvent;
  3. import flash.display.Sprite;
  4. import flash.display.BitmapData;
  5. import flash.display.Bitmap;
  6. import flash.geom.Rectangle;
  7. import flash.geom.Point;
  8. import World;
  9. typedef Jmp = {
  10. var dest : Coor;
  11. var path : Array<Coor>;
  12. }
  13. class Jump extends Sprite {
  14. // read a jump from an array of coors. First coor is dest, rest are path.
  15. static function readjmp(a : Array<Coor>) : Jmp {
  16. if(a.length < 1 )
  17. { // bad input
  18. return {dest : {x:0,y:0}, path : []};
  19. }
  20. var d: Coor = a[0];
  21. return {dest : d, path : a.slice(1)};
  22. }
  23. static var u : Jmp = { dest : {x:0, y:-1}, path : [] } ;
  24. static var uu : Jmp = { dest : {x:0, y:-2}, path : [ {x:0,y:-1}] } ;
  25. static var uuu : Jmp = { dest : {x:0, y:-3}, path : [{x:0,y:-1},{x:0,y:-2}] } ;
  26. static var ru : Jmp = { dest: {x:1,y:-1}, path : [{x:0,y:-1}]};
  27. static var ruu : Jmp = { dest : {x:1,y:-2}, path : [{x:0,y:-1}, {x:0,y:-2}]};
  28. static var ruuu : Jmp = readjmp( [ {x:1,y:-3},{x:0,y:-1}, {x:0,y:-2}, {x:0,y:-3}]);
  29. static var rr = readjmp([ {x:2,y:0}, {x:1,y:0}]);
  30. static var rru = readjmp([ {x:2,y:-1}, {x:1,y:-1}]);
  31. static var rruu = readjmp([ {x:2,y:-2}, {x:0,y:-1}, {x:1,y:-2}]);
  32. static var rrr = readjmp([ {x:3,y:0}, {x:1,y:0}, {x:2,y:0}]);
  33. static var rrru = readjmp([ {x:3,y:-1}, {x:1,y:-1}, {x:2,y:-1}]);
  34. static var rd = readjmp([{x:1,y:1},{x:1,y:0}]);
  35. static var rdd = readjmp([{x:1,y:2},
  36. {x:1,y:0},
  37. {x:1,y:1}]);
  38. static var rddd = readjmp([{x:1,y:3},
  39. {x:1,y:0},
  40. {x:1,y:1},
  41. {x:1,y:2}]);
  42. static var rdddd = readjmp([{x:1,y:4},{x:1,y:0},{x:1,y:1},{x:1,y:2},{x:1,y:3}]);
  43. static var rrd = readjmp([{x:2,y:1},
  44. {x:1,y:0}]);
  45. static var rrdd = readjmp([{x:2,y:2},
  46. {x:1,y:0},
  47. {x:2,y:1}]);
  48. static var rrddd = readjmp([{x:2,y:3},
  49. {x:1,y:0},
  50. {x:2,y:1},
  51. {x:2,y:2}]);
  52. static var rrrd = readjmp([{x:3,y:1},
  53. {x:1,y:0},
  54. {x:2,y:0}]);
  55. static var rrrdd = readjmp([{x:3,y:2},
  56. {x:1,y:0},
  57. {x:2,y:0},
  58. {x:3,y:1}]);
  59. static function reflectcoor(c : Coor): Coor {
  60. return {x: -c.x, y: c.y};
  61. }
  62. static function reflectjmp(j : Jmp): Jmp {
  63. var d = reflectcoor(j.dest);
  64. var p = j.path.copy();
  65. for(i in 0...p.length){
  66. p[i] = reflectcoor(j.path[i]);
  67. }
  68. return {dest : d, path : p};
  69. }
  70. static function arrmap<T>(a : Array<T>, f : T -> T) : Array<T> {
  71. var a1 = a.copy();
  72. for( i in 0...a.length){
  73. a1[i] = f(a[i]);
  74. }
  75. return a1;
  76. }
  77. static var rightjmps:Array<Jmp> = [ru,ruu,ruuu,rr,rru,rruu,rrr,rrru,
  78. rd,rdd,rddd,rdddd,rrd,rrdd,rrddd,rrrd,rrrdd];
  79. static var leftjmps:Array<Jmp> = arrmap(rightjmps, reflectjmp);
  80. public static var jmps = rightjmps.concat(leftjmps).concat([u,uu,uuu]);
  81. public static function stringofcoor(c : Coor){
  82. return ("(" + c.x + "," + c.y + ")");
  83. }
  84. static function stringofjmp(j : Jmp) {
  85. var d = ( "dest= " + stringofcoor(j.dest) + " path = ");
  86. for( i in 0...j.path.length) {
  87. d = d + (stringofcoor(j.path[i]) );
  88. }
  89. return d;
  90. }
  91. public static function canJump(j:Jmp, w0: World_t, w1: World_t, x: Int, y: Int): Bool {
  92. var r: Bool = true;
  93. if(! World.canStandOn(w1, j.dest.x + x, j.dest.y + y + 1 )){
  94. r = false;
  95. }
  96. if(World.isBlocked(w1, x + j.dest.x, y + j.dest.y)){ r = false; }
  97. for(p in j.path){
  98. if(World.isBlocked(w0, p.x + x, p.y + y)){
  99. r = false;
  100. }
  101. }
  102. return r;
  103. }
  104. public static function validJumps(w0: World_t, w1: World_t, x: Int, y: Int)
  105. : Array<Jmp> {
  106. return Utils.filter(function (j) { return canJump(j, w0, w1, x, y); }, jmps);
  107. }
  108. static function main() {
  109. trace ( stringofjmp(leftjmps[6] ));
  110. trace ("Hello world!" + jmps[0] + " " + "length=" + jmps.length );
  111. var mc:flash.display.MovieClip = flash.Lib.current;
  112. // type annotation not necessary
  113. mc.graphics.beginFill(0xFF0000);
  114. mc.graphics.moveTo(50,50);
  115. mc.graphics.lineTo(100,50);
  116. mc.graphics.lineTo(100,100);
  117. mc.graphics.lineTo(50,100);
  118. mc.graphics.endFill();
  119. }
  120. }