Browse Source

Haxe update. Some refactoring, added vars graphics, engine in Atomic.hx

rsredsq 10 years ago
parent
commit
e46f4fc1d5

+ 1 - 0
Script/Haxe/HaxeTest/.gitignore

@@ -0,0 +1 @@
+Cache

+ 7 - 5
Script/Haxe/HaxeTest/Resources/Components/Star.hx

@@ -9,17 +9,19 @@ class Star extends JSComponent {
 	function new() {
 		super();
 		speed = 1;
+		var type:Stars = Stars.RandomStar;
 	}
-	
+
 	function update(timeStep:Float):Void {
 		this.node.rotate2D(speed);
 		this.node.rotateAround2D([1, 1], timeStep * 50, Atomic.TS_WORLD);
 	}
 }
 
+//Enums are not working yet
 enum Stars {
-  SuperStar;
-  NotSuperStar;
-  RandomStar;
-  Star(x:Int, y:Int);
+	RandomStar;
+	JustAStar;
+	SimpleStar;
+	NotAStar;
 }

+ 3 - 2
Script/Haxe/HaxeTest/Resources/Components/Star.js

@@ -1,10 +1,11 @@
+var Stars = require("./Stars");
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
-"atomic component";
 var Star = (function(_super) {
 __extends(Star, _super);
-function Star() {
+function Star () {
 	Atomic.JSComponent.call(this);
 	this.speed = 1;
+	var type = Stars.RandomStar;
 };
 Star.prototype.speed = null;
 Star.prototype.update = function(timeStep) {

+ 3 - 0
Script/Haxe/HaxeTest/Resources/Components/Stars.js

@@ -0,0 +1,3 @@
+var Stars;
+(function (Stars) {
+})(Stars || (Stars = {}));

+ 1 - 2
Script/Haxe/HaxeTest/Resources/Components/SuperStar.js

@@ -1,9 +1,8 @@
 var Star = require("components/Star");
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
-"atomic component";
 var SuperStar = (function(_super) {
 __extends(SuperStar, _super);
-function SuperStar() {
+function SuperStar () {
 	Star.call(this);
 };
 SuperStar.prototype.start = function() {

+ 4 - 4
Script/Haxe/HaxeTest/Resources/Components/addit/MegaStar.hx

@@ -4,15 +4,15 @@ import components.SuperStar;
 import scripts.utils.Loler;
 
 class MegaStar extends SuperStar {
-	
+
 	override function start() {
 		var lol:Loler = new Loler("lol");
 		var nlol:Loler = new Loler("foo");
 		node.scale2D = [4, 4];
-		
+
 		var str:String = "ReplAce me :)";
 		str = StringTools.replace(str, "Ace", "LOL");
 		trace(str);
 	}
-	
-}
+
+}

+ 1 - 2
Script/Haxe/HaxeTest/Resources/Components/addit/MegaStar.js

@@ -2,10 +2,9 @@ var StringTools = require("Modules/StringTools");
 var Loler = require("scripts/utils/Loler");
 var SuperStar = require("components/SuperStar");
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
-"atomic component";
 var MegaStar = (function(_super) {
 __extends(MegaStar, _super);
-function MegaStar() {
+function MegaStar () {
 	SuperStar.call(this);
 };
 MegaStar.prototype.start = function() {

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Modules/Boot.js

@@ -2,7 +2,7 @@ var String = require("Modules/String");
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
 var Boot = (function(_super) {
 __extends(Boot, _super);
-function Boot(){};
+function Boot (){};
 Boot.__string_rec = function(o,s) {
 	if(o == null) return "null";
 	if(s.length >= 5) return "<...>";

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Modules/Boot.js.asset

@@ -1,6 +1,6 @@
 {
 	"version": 1,
-	"guid": "4aa86d3dcaa070f0236f7bb85c841178",
+	"guid": "07df6639d511ca5707c5f9a55ce79594",
 	"JavascriptImporter": {
 		"IsComponentFile": false
 	}

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Modules/Std.js

@@ -1,7 +1,7 @@
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
 var Std = (function(_super) {
 __extends(Std, _super);
-function Std(){};
+function Std (){};
 ;
 return Std;
 })(Object);

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Modules/Std.js.asset

@@ -1,6 +1,6 @@
 {
 	"version": 1,
-	"guid": "0271f913c849d2c94764a2dae4211509",
+	"guid": "8021befbc0cc1f14286c1b03ddda0f93",
 	"JavascriptImporter": {
 		"IsComponentFile": false
 	}

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Modules/StringTools.js

@@ -1,7 +1,7 @@
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
 var StringTools = (function(_super) {
 __extends(StringTools, _super);
-function StringTools(){};
+function StringTools (){};
 StringTools.replace = function(s,sub,by) {
 	return s.split(sub).join(by);
 };

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Modules/StringTools.js.asset

@@ -1,6 +1,6 @@
 {
 	"version": 1,
-	"guid": "2566625f979f2a59880dfd6645393ff8",
+	"guid": "5eb5c0784349f6a18c41c0e6f029a305",
 	"JavascriptImporter": {
 		"IsComponentFile": false
 	}

+ 2 - 2
Script/Haxe/HaxeTest/Resources/Scripts/Main.hx

@@ -7,9 +7,9 @@ import components.SuperStar;
 import components.addit.MegaStar;
 
 class Main {
-	
+
 	static inline function main() {
 		untyped Atomic.player.loadScene("Scenes/Scene.scene");
 	}
 
-}
+}

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Scripts/Main.js

@@ -1,7 +1,7 @@
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
 var Main = (function(_super) {
 __extends(Main, _super);
-function Main(){};
+function Main (){};
 Main.main = function() {
 	Atomic.player.loadScene("Scenes/Scene.scene");
 };

+ 1 - 1
Script/Haxe/HaxeTest/Resources/Scripts/utils/Loler.js

@@ -1,7 +1,7 @@
 var __extends = (this && this.__extends) || function (d, b) {for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];function __() { this.constructor = d; };__.prototype = b.prototype;d.prototype = new __();};
 var Loler = (function(_super) {
 __extends(Loler, _super);
-function Loler(lol) {
+function Loler (lol) {
 	if(lol == "lol") console.log("LOL!"); else console.log("NOT LOL :(");
 };
 ;

+ 1 - 1
Script/Haxe/HaxeTest/Resources/atomic-haxe.hxproj

@@ -28,7 +28,7 @@
   </build>
   <!-- haxelib libraries -->
   <haxelib>
-    <library name="Actuate" />
+    <!-- example: <library name="..." /> -->
   </haxelib>
   <!-- Class files to compile (other referenced classes will automatically be included) -->
   <compileTargets>

+ 8 - 1
Script/Haxe/HaxeTest/Resources/atomic/Atomic.hx

@@ -249,7 +249,14 @@ typedef FileMode = Int;
 //Atomic Haxe Definitions
 
 extern class Atomic {
-
+	
+	public static var engine: Engine;
+    public static var graphics: Graphics;
+    public static var renderer: Renderer;
+    public static var cache: ResourceCache;
+    public static var input: Input;
+    public static var fileSystem: FileSystem;
+    public static var network: Network;
 
    // enum FrustumPlane
     public static var PLANE_NEAR:FrustumPlane;

+ 49 - 40
Script/Haxe/HaxeTest/Resources/atomic/AtomicBuilder.hx

@@ -15,8 +15,9 @@ class AtomicBuilder {
 	var inits : List<TypedExpr>;
 	var statics : List<{ c : ClassType, f : ClassField }>;
 	var requirements: Map<String, Array<String>>;
-	var currClass:ClassType;
+	var currClass:BaseType;
 	var components:List<ClassType>;
+	var enums:List<EnumType>;
 	
 	function new(api:JSGenApi) {
 		this.api = api;
@@ -25,6 +26,7 @@ class AtomicBuilder {
 		this.statics = new List();
 		this.requirements = new Map();
 		this.components = new List();
+		this.enums = new List();
 		api.setTypeAccessor(getType);
 		build();
 	}
@@ -32,16 +34,17 @@ class AtomicBuilder {
 	function getType( t : Type ) {
 		return switch(t) {
 			case TInst(c, _):
-				getPath(c.get());
+				getPath(c.get(), 0);
 			case TEnum(e, _): 
-				getPath(e.get());
+				getPath(e.get(), 1);
 			case TAbstract(a, _): 
-				getPath(a.get());
+				getPath(a.get(), 2);
 			default: throw "assert";
 		};
 	}
 	
-	function getPath( t : BaseType ) {
+	//n is a type, 0 - inst, 1 - enum, 2 - abstract
+	function getPath(t : BaseType, ?n: Int) {
 		var s:Array<String> = t.module.split(".");
 		if (s[0].toLowerCase() == "atomic") {
 			if (StringTools.startsWith(t.name, "Atomic")) {
@@ -51,8 +54,11 @@ class AtomicBuilder {
 		}
 		//skip to do not require itself
 		if (t.name == currClass.name) return t.name;
-		
 		var mod = t.module.split(".");
+		//it it's enum
+		if (n == 1) {
+			addReq("./" + t.name);
+		}
 		if (mod[0].toLowerCase() == "scripts") {
 			var n = "";
 			for (pa in mod) {
@@ -102,13 +108,16 @@ class AtomicBuilder {
 		switch( t ) {
 		case TInst(c, _):
 			var c = c.get();
-			if( c.init != null )
+			if ( c.init != null ) {
+				//trace("Adding init: " + c.name);
 				inits.add(c.init);
-			if( !c.isExtern ) genClass(c);
+			}
+			if ( !c.isExtern ) 
+				genClass(c);
 		//Enum is not really supported yet
 		case TEnum(r, _):
 			var e = r.get();
-			//if( !e.isExtern ) genEnum(e);
+			if( !e.isExtern ) genEnum(e);
 		default:
 		}
 	}
@@ -142,19 +151,19 @@ class AtomicBuilder {
 		return out;
 	}
 	
-	//https://github.com/HaxeFoundation/haxe/issues/3560
 	function checkRequires(c: ClassType):Void {
 		var arr = requirements.get(currClass.name);
 		if (arr == null || arr.length == 0) return;
 		for (req in requirements.get(currClass.name)) {
 			var a = req.split("/");
 			var name = a[a.length - 1];
+			//TODO fix that check
+			if (name == currClass.name) continue;
 			prepend("var " + name + " = require(\"" + req + "\");\n");
 		}
 	}
 	
 	function genClass(c:ClassType):Void {
-		//if (c.name == "Std") return;
 		if (c.pack.length > 0 && c.pack[0].toLowerCase() == "components") {
 			components.add(c);
 		} else {
@@ -165,25 +174,21 @@ class AtomicBuilder {
 	function genConstructor(c: ClassType):Void {
 		if (c.constructor != null) {
 			var constructor = getExpr(c.constructor.get().expr());
-			constructor = StringTools.replace(constructor, "function(", "function " + c.name + "(");
+			constructor = StringTools.replace(constructor, "function(", 'function ${c.name} (');
 			print(constructor);
 			newline();
 		} else {
-			print("function " + c.name + "(){}");
+			print('function ${c.name} (){}');
 			newline();
 		}
 	}
 	
-	function genScript(c: ClassType):Void {
-		//If pack length equals 0, so it's probably a haxe's class, so, require a HxOverrides
-		//if (c.pack.length == 0) {
-		//	print("var HxOverrides = require(\"./HxOverrides\");\n");
-		//}
+	function genClassBoody(c: ClassType):Void {
 		api.setCurrentClass(c);
 		currClass = c;
 		printExtend__();
-		print("var " + c.name + " = (function(_super) {\n");
-		print("__extends(" + c.name + ", _super);\n");
+		print('var ${c.name} = (function(_super) {\n');
+		print('__extends(${c.name}, _super);\n');
 		genConstructor(c);
 		for( f in c.statics.get() )
 			genStaticField(c, f);
@@ -191,10 +196,14 @@ class AtomicBuilder {
 			genClassField(c, f);
 		}
 		newline();
-		print("return " + c.name + ";\n");
+		print('return ${c.name};\n');
 		print("})(" + (c.superClass == null ? "Object" : getPath(c.superClass.t.get())) +");\n");
-		print("module.exports = " + c.name + ";\n");
+		print('module.exports = ${c.name};\n');
 		checkRequires(c);
+	}
+	
+	function genScript(c: ClassType):Void {
+		genClassBoody(c);
 		var p = "";
 		//script path
 		if (c.pack.length > 0 && c.pack[0].toLowerCase() == "scripts") {
@@ -210,24 +219,7 @@ class AtomicBuilder {
 	}
 	
 	function genComponent(c: ClassType):Void {
-		api.setCurrentClass(c);
-		currClass = c;
-		printExtend__();
-		print("\"atomic component\"");
-		newline();
-		print("var " + c.name + " = (function(_super) {\n");
-		print("__extends(" + c.name + ", _super);\n");
-		genConstructor(c);
-		for( f in c.statics.get() )
-			genStaticField(c, f);
-		for( f in c.fields.get() ) {
-			genClassField(c, f);
-		}
-		newline();
-		print("return " + c.name + ";\n");
-		print("})(" + (c.superClass == null ? "Object" : getPath(c.superClass.t.get())) +");\n");
-		print("module.exports = " + getPath(c) + ";\n");
-		checkRequires(c);
+		genClassBoody(c);
 		var p = "";
 		for (pa in c.pack) {
 			p += pa + "/";
@@ -237,6 +229,23 @@ class AtomicBuilder {
 		buf = new StringBuf();
 	}
 	
+	function genEnum( e : EnumType ) {
+		currClass = e;
+		//api.setCurrentClass(e);
+		print('var ${e.name}');
+		newline();
+		print('(function (${e.name}) {\n');
+		//TODO generate enum statements
+		print('})(${e.name} || (${e.name} = {}));');
+		var p = "";
+		for (pa in e.pack) {
+			p += pa + "/";
+		}
+		p += e.name + ".js";
+		File.saveContent(p, buf.toString());
+		buf = new StringBuf();
+	}
+	
 	function genStaticField(c: ClassType, f: ClassField):Void {
 		var field = f.name;
 		var e = f.expr();