Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 6.79 KB | None | 0 0
  1. package;
  2.  
  3. import haxe.Constraints.FlatEnum;
  4.  
  5. // import haxe.ds.Map;
  6. // import kha.Assets;
  7. // import kha.Framebuffer;
  8. // import kha.Scheduler;
  9. // import kha.System;
  10. // import kha.math.Random;
  11.  
  12. /**
  13.  * Core: Will not change frequently
  14.  */
  15. interface IFuel {
  16.     @:isVar public var materials(get, null):Array<MaterialEnum>;
  17.     @:isVar public var fuels(get, null):Array<FuelEnum>;
  18.     @:isVar public var fuel(get, null):FuelEnum;
  19.     public function addMaterial(material:MaterialEnum):Void;
  20.     public function addFuel(fuel:FuelEnum):Void;
  21. }
  22.  
  23. /**
  24.  * Core: Will not change frequently
  25.  */
  26. enum FuelEnum {
  27.     Bio;
  28.     Sun;
  29. }
  30.  
  31. /**
  32.  * Core: Will not change frequently
  33.  */
  34. class Fuel implements IFuel {
  35.     @:isVar public var materials(get, null):Array<MaterialEnum> = [];
  36.     @:isVar public var fuels(get, null):Array<FuelEnum> = [];
  37.     @:isVar public var fuel(get, null):FuelEnum;
  38.  
  39.     public function new(fuel:FuelEnum) {
  40.         this.fuel = fuel;
  41.     }
  42.  
  43.     public function addMaterial(material:MaterialEnum) {
  44.         this.materials.push(material);
  45.     }
  46.  
  47.     public function addFuel(fuel:FuelEnum) {
  48.         this.fuels.push(fuel);
  49.     }
  50.  
  51.     public function get_materials():Array<MaterialEnum> {
  52.         return materials;
  53.     }
  54.  
  55.     public function get_fuels():Array<FuelEnum> {
  56.         return fuels;
  57.     }
  58.  
  59.     public function get_fuel():FuelEnum {
  60.         return fuel;
  61.     }
  62. }
  63.  
  64. /**
  65.  * Will change frequently/maybe will be replaced
  66.  */
  67. class FuelBio extends Fuel {
  68.     public function new() {
  69.         super(FuelEnum.Bio);
  70.         this.addMaterial(MaterialEnum.M0);
  71.         this.addFuel(FuelEnum.Sun);
  72.     }
  73.  
  74.     public function calculateSomeShit():String {
  75.         return "tadaaa";
  76.     }
  77. }
  78.  
  79. /**
  80.  * Will change frequently/maybe will be replaced
  81.  */
  82. class FuelSun extends Fuel {
  83.     public function new() {
  84.         super(FuelEnum.Sun);
  85.     }
  86. }
  87.  
  88. interface IMaterialProperty {}
  89.  
  90. class MaterialProperty implements IMaterialProperty {
  91.     public function new() {}
  92. }
  93.  
  94. /**
  95.  * Will change frequently/maybe will be replaced
  96.  */
  97. class MaterialPropertyTransport extends MaterialProperty {
  98.     @:isVar public var transportsMaterials(get, null):Array<MaterialEnum> = [];
  99.     @:isVar public var transportsFuels(get, null):Array<FuelEnum> = [];
  100.  
  101.     public function new(transportsMaterials:Array<MaterialEnum>, transportsFuels:Array<FuelEnum>) {
  102.         this.transportsMaterials = transportsMaterials;
  103.         this.transportsFuels = transportsFuels;
  104.         super();
  105.     }
  106.  
  107.     public function get_transportsMaterials():Array<MaterialEnum> {
  108.         return transportsMaterials;
  109.     }
  110.  
  111.     public function get_transportsFuels():Array<FuelEnum> {
  112.         return transportsFuels;
  113.     }
  114. }
  115.  
  116. /**
  117.  * Will change frequently/maybe will be replaced
  118.  */
  119. class MaterialPropertyFuel extends MaterialProperty {
  120.     @:isVar public var fuel(get, null):Fuel;
  121.  
  122.     public function new(fuel:Fuel) {
  123.         super();
  124.         this.fuel = fuel;
  125.     }
  126.  
  127.     public function get_fuel():Fuel {
  128.         return fuel;
  129.     }
  130. }
  131.  
  132. /**
  133.  * Will change frequently/maybe will be replaced
  134.  */
  135. enum MaterialEnum {
  136.     M0;
  137.     M1;
  138.     M2;
  139. }
  140.  
  141. /**
  142.  * Core: Will not change frequently
  143.  */
  144. class Material {
  145.     @:isVar public var properties(get, null):Array<MaterialProperty>;
  146.     @:isVar public var material(get, null):MaterialEnum;
  147.  
  148.     public function new(material:MaterialEnum, properties:Array<MaterialProperty>) {
  149.         this.properties = properties;
  150.         this.material = material;
  151.     }
  152.  
  153.     public function get_properties():Array<MaterialProperty> {
  154.         return properties;
  155.     }
  156.  
  157.     public function get_material():MaterialEnum {
  158.         return material;
  159.     }
  160. }
  161.  
  162. /**
  163.  * Core: Will not change frequently
  164.  */
  165. class MaterialGroup {
  166.     @:isVar public var materials(get, null):Array<Material> = [];
  167.  
  168.     public function new() {}
  169.  
  170.     public function addMaterial(material:Material) {
  171.         this.materials.push(material);
  172.     }
  173.  
  174.     public function get_materials():Array<Material> {
  175.         return materials;
  176.     }
  177.  
  178.     public function minFuelRequired():Fuel {
  179.         return null; // TODO
  180.     }
  181. }
  182.  
  183. /**
  184.  * Will change frequently
  185.  */
  186. class MaterialPool {
  187.     @:isVar public var materials(get, null):Array<Material> = [];
  188.  
  189.     public function new() {
  190.         var m1 = new Material(MaterialEnum.M1, [
  191.             new MaterialPropertyTransport([MaterialEnum.M0], []),
  192.             new MaterialPropertyFuel(new FuelBio())
  193.         ]);
  194.         var m2 = new Material(MaterialEnum.M2, [
  195.             new MaterialPropertyTransport([], [FuelEnum.Sun]),
  196.             new MaterialPropertyFuel(new FuelBio())
  197.         ]);
  198.         materials.push(m1);
  199.         materials.push(m2);
  200.     }
  201.  
  202.     public function get_materials():Array<Material> {
  203.         return materials;
  204.     }
  205.  
  206.     public function getGrops():Array<MaterialGroup> {
  207.         //var group = new MaterialGroup();
  208.  
  209.         for (material in get_materials()) {
  210.             var properties = material.properties;
  211.  
  212.             for (property in properties) {
  213.                 switch Type.typeof(property) {
  214.                     case TClass(MaterialPropertyFuel):
  215.                         var materialPropertyFuel = cast(property, MaterialPropertyFuel);
  216.                         var fuel = materialPropertyFuel.fuel;
  217.                         var fuelMaterials = fuel.materials;
  218.                         var fuelFuels = fuel.fuels;
  219.  
  220.                         for (fuelMaterial in fuelMaterials) {
  221.                             // TODO: add material to group, as fuel depends on it;
  222.                         }
  223.                         for (fuelFuel in fuelFuels) {
  224.                             // TODO: calculte other material depencies, that this sub-fuel requires and populate group;
  225.                         }
  226.                     case _:
  227.                 }
  228.             }
  229.         }
  230.  
  231.         return []; // TODO
  232.     }
  233. }
  234.  
  235. /**
  236.  * Will change frequently
  237.  */
  238. class DNA {
  239.     public function new() {}
  240.  
  241.     public function generateDNA(groups:Array<MaterialGroup>) {
  242.         for (group in groups) {
  243.             for (material in group.materials) {
  244.                 trace("Matrial: " + material.material);
  245.                 var properties = material.properties;
  246.  
  247.                 for (property in properties) {
  248.                     switch Type.typeof(property) {
  249.                         case TClass(MaterialPropertyFuel):
  250.                             trace("Fuel property");
  251.                             var materialPropertyFuel = cast(property, MaterialPropertyFuel);
  252.  
  253.                             switch Type.typeof(materialPropertyFuel.fuel) {
  254.                                 case TClass(FuelBio):
  255.                                     var fuelBio:FuelBio = cast(materialPropertyFuel.fuel, FuelBio);
  256.                                     trace("Do bio fuel stuff: " + fuelBio.calculateSomeShit());
  257.                                 case _:
  258.                                     trace("Other fuel stuff");
  259.                             }
  260.                         case _:
  261.                             trace("Other property");
  262.                     }
  263.                 }
  264.             }
  265.         }
  266.     }
  267. }
  268.  
  269. class Test {
  270.     public function new() {
  271.         var dna = new DNA();
  272.         var mp = new MaterialPool();
  273.         dna.generateDNA(mp.getGrops());
  274.     }
  275. }
  276.  
  277. class Main {
  278.     /*static function update():Void {}
  279.         static function render(frames:Array<Framebuffer>):Void {
  280.     }*/
  281.     public static function main() {
  282.         var t = new Test();
  283.  
  284.         /*System.start({title: "Project", width: 1024, height: 768}, function(_) {
  285.             // Just loading everything is ok for small projects
  286.             Assets.loadEverything(function() {
  287.                 // Avoid passing update/render directly,
  288.                 // so replacing them via code injection works
  289.                 Scheduler.addTimeTask(function() {
  290.                     update();
  291.                 }, 0, 1 / 60);
  292.                 System.notifyOnFrames(function(frames) {
  293.                     render(frames);
  294.                 });
  295.             });
  296.         });*/
  297.     }
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement