diff --git a/bin/AlternativaEditor.swf b/bin/AlternativaEditor.swf
index 08bc8ea..95e3fee 100644
Binary files a/bin/AlternativaEditor.swf and b/bin/AlternativaEditor.swf differ
diff --git a/src/AlternativaEditor.mxml b/src/AlternativaEditor.mxml
index 90eacda..186de10 100644
--- a/src/AlternativaEditor.mxml
+++ b/src/AlternativaEditor.mxml
@@ -714,7 +714,7 @@
diff --git a/src/alternativa/editor/Preview.as b/src/alternativa/editor/Preview.as
index 99a72f8..fd4462c 100644
--- a/src/alternativa/editor/Preview.as
+++ b/src/alternativa/editor/Preview.as
@@ -17,6 +17,9 @@ package alternativa.editor
import flash.geom.Point;
import mx.core.UIComponent;
import alternativa.engine3d.core.Object3DContainer;
+ import alternativa.engine3d.objects.Mesh;
+ import alternativa.engine3d.materials.Material;
+ import alternativa.engine3d.materials.TextureMaterial;
public class Preview extends UIComponent
{
@@ -74,10 +77,16 @@ package alternativa.editor
private function calculateOptimalCameraPosition(param1:Prop) : void
{
+ var storedPoint:Point = this.propDistance[param1];
+ if(storedPoint != null)
+ {
+ return;
+ }
+
var loc7:BitmapData = null;
- var loc8:Vector. = null;
- var loc9:int = 0;
- var loc10:int = 0;
+ //var loc8:Vector. = null;
+ //var loc9:int = 0;
+ //var loc10:int = 0;
var loc11:Point3D = new Point3D();
var loc12:Number = NaN;
var loc13:Number = NaN;
@@ -96,9 +105,32 @@ package alternativa.editor
}
else
{
- loc8 = param1.vertices;
- loc9 = int(loc8.length);
- loc10 = 0;
+ var vertex:Vertex = (param1.object as Mesh).vertexList;
+ //loc8 = param1.vertices;
+ //loc9 = int(loc8.length);
+ while(vertex != null)
+ {
+ loc11.copyFromVertex(vertex);
+ loc12 = loc11.x - param1.x;
+ loc13 = loc11.y - param1.y;
+ loc14 = loc11.z - param1.z;
+ loc15 = loc12 * loc12 + loc13 * loc13 + loc14 * loc14;
+ if(loc15 > loc2)
+ {
+ loc2 = loc15;
+ }
+ if(loc11.z < loc4)
+ {
+ loc4 = loc11.z;
+ }
+ if(loc11.z > loc3)
+ {
+ loc3 = loc11.z;
+ }
+
+ vertex = vertex.next;
+ }
+ /*loc10 = 0;
while(loc10 < loc9)
{
loc11.copyFromVertex(loc8[loc10]);
@@ -119,22 +151,37 @@ package alternativa.editor
loc3 = loc11.z;
}
loc10++;
- }
+ }*/
loc2 = 2 * Math.sqrt(loc2);
}
var loc6:Number = loc2 * (Math.SQRT2 / (2 * Math.tan(this.camera.fov / 2)) + 0.5);
this.propDistance.add(param1,new Point(loc6,(loc3 - loc4) / 2));
}
+ private const tmpMatrix:Matrix = new Matrix();
+
public function getPropIcon(param1:Prop) : Bitmap
{
this.clearScene();
this.calculateOptimalCameraPosition(param1);
this.setCameraCoords(param1);
this.scene.root.addChild(param1);
- this.scene.calculate();
+ this.scene.calculate(false);
+
+ var mesh:Mesh = (param1.object as Mesh);
+ if(mesh != null)
+ {
+ mesh.deleteResources();
+
+ var currMaterial:Material = mesh.faceList.material;
+ if(currMaterial is TextureMaterial)
+ {
+ (currMaterial as TextureMaterial).disposeResource();
+ }
+ }
+
var loc2:BitmapData = new BitmapData(ICON_SIZE,ICON_SIZE,false,0);
- var loc3:Matrix = new Matrix();
+ var loc3:Matrix = tmpMatrix;
loc3.a = ICON_SIZE / this.view.width;
loc3.d = loc3.a;
loc2.draw(this.view,loc3);
diff --git a/src/alternativa/editor/SceneContainer.as b/src/alternativa/editor/SceneContainer.as
index 761efd3..067fd34 100644
--- a/src/alternativa/editor/SceneContainer.as
+++ b/src/alternativa/editor/SceneContainer.as
@@ -206,6 +206,7 @@ package alternativa.editor
//this.cursorScene.occupyMap = this.mainScene.occupyMap;
addChild(this.mainScene.view);
//addChild(this.cursorScene.view);
+ addChild(this.mainScene.camera.diagram);
this.boundBoxesOverlay = new Shape();
addChild(this.boundBoxesOverlay);
this.dominationOverlay = new Shape();
@@ -577,6 +578,10 @@ package alternativa.editor
private function onEnterFrame(param1:Event) : void
{
+ if(!this.mainScene.view.visible)
+ {
+ return;
+ }
this.cursorScene.containerController.yawLeft(this.keyMapper.keyPressed(0));
this.cursorScene.containerController.yawRight(this.keyMapper.keyPressed(1));
this.cursorScene.containerController.pitchDown(this.keyMapper.keyPressed(6));
diff --git a/src/alternativa/editor/engine3d/Scene3D.as b/src/alternativa/editor/engine3d/Scene3D.as
index 9e84773..2177bad 100644
--- a/src/alternativa/editor/engine3d/Scene3D.as
+++ b/src/alternativa/editor/engine3d/Scene3D.as
@@ -25,9 +25,9 @@ package alternativa.editor.engine3d
}
- public function calculate() : void
+ public function calculate(present:Boolean = true) : void
{
- var child:Object3D = _root.childrenList;
+ /*var child:Object3D = _root.childrenList;
while(child != null)
{
if(child is Prop)
@@ -36,9 +36,9 @@ package alternativa.editor.engine3d
}
child = child.next;
- }
+ }*/
- this.camera.render();
+ this.camera.render(present);
}
}
}
\ No newline at end of file
diff --git a/src/alternativa/editor/mapimport/xml/XMLImporterV1.as b/src/alternativa/editor/mapimport/xml/XMLImporterV1.as
index 8507607..df89463 100644
--- a/src/alternativa/editor/mapimport/xml/XMLImporterV1.as
+++ b/src/alternativa/editor/mapimport/xml/XMLImporterV1.as
@@ -155,6 +155,7 @@ package alternativa.editor.mapimport.xml
for(tName in loc5)
{
tile.textureName = tName;
+ break;//
}
Alert.show("Tile " + tile.name + ": texture " + textureName + " not found");
}
@@ -202,7 +203,7 @@ package alternativa.editor.mapimport.xml
if(loc3 != null)
{
this.scene.addProp(loc3,new Point3D(Number(param1.x),Number(param1.y),Number(param1.z)),0,true,false);
- this.scene.calculate();
+ //this.scene.calculate();
}
}
@@ -258,7 +259,7 @@ package alternativa.editor.mapimport.xml
{
this.scene.occupyMap.occupy(loc6);
}
- this.scene.calculate();
+ //this.scene.calculate();
}
loc3++;
}
@@ -295,7 +296,7 @@ package alternativa.editor.mapimport.xml
{
this.scene.occupyMap.occupy(loc3);
}
- this.scene.calculate();
+ //this.scene.calculate();
}
return SpawnPoint(loc3);
}
@@ -324,7 +325,7 @@ package alternativa.editor.mapimport.xml
this.scene.occupyMap.occupy(loc6);
}
this.loadDominationPointSpawns(loc4,ControlPoint(loc6));
- this.scene.calculate();
+ //this.scene.calculate();
}
}
}
diff --git a/src/alternativa/editor/propslib/PropsLibrary.as b/src/alternativa/editor/propslib/PropsLibrary.as
index 858fb2d..b9a46a1 100644
--- a/src/alternativa/editor/propslib/PropsLibrary.as
+++ b/src/alternativa/editor/propslib/PropsLibrary.as
@@ -199,7 +199,7 @@ package alternativa.editor.propslib
}
var loc4:ObjectLoaderPair = new ObjectLoaderPair();
loc4.propObject = new PropLibMesh(param1.@name);
- loc4.loader = new MeshLoader(this.url + loc2.attribute("file").toString().toLowerCase(),xmlReadAttrString(loc2,"object"),loc3);
+ loc4.loader = new MeshLoader(this.url + loc2.attribute("file").toString().toLowerCase(),xmlReadAttrString(loc2,"object"),loc3,this.url);
return loc4;
}
diff --git a/src/alternativa/editor/propslib/loaders/MeshLoader.as b/src/alternativa/editor/propslib/loaders/MeshLoader.as
index 6bc4c06..a1ba515 100644
--- a/src/alternativa/editor/propslib/loaders/MeshLoader.as
+++ b/src/alternativa/editor/propslib/loaders/MeshLoader.as
@@ -14,6 +14,10 @@ package alternativa.editor.propslib.loaders
import alternativa.engine3d.core.Face;
import alternativa.editor.engine3d.loaders.TextureMapsBatchLoader;
import alternativa.engine3d.core.Object3D;
+ import alternativa.editor.engine3d.loaders.TextureMapsInfo;
+ import mx.controls.Alert;
+ import flash.display.BitmapData;
+ import alternativa.engine3d.materials.FillMaterial;
public class MeshLoader extends ObjectLoader
{
@@ -34,13 +38,16 @@ package alternativa.editor.propslib.loaders
private var texturesLoader:TextureMapsBatchLoader;
private var loaderContext:LoaderContext;
+
+ private var baseUrl:String;
- public function MeshLoader(param1:String, param2:String, param3:Map)
+ public function MeshLoader(param1:String, param2:String, param3:Map, baseUrl:String)
{
super();
this.url = param1;
this.objectName = param2;
this.textures = param3;
+ this.baseUrl = baseUrl;
}
override public function load(param1:LoaderContext) : void
@@ -60,6 +67,12 @@ package alternativa.editor.propslib.loaders
private function on3DSLoadingComplete(param1:Event) : void
{
this.parser3DS.parse(this.loader3DS.data);
+
+ this.loader3DS.removeEventListener(Event.COMPLETE,this.on3DSLoadingComplete);
+ this.loader3DS.removeEventListener(IOErrorEvent.IO_ERROR,onErrorEvent);
+ this.loader3DS.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,onErrorEvent);
+ this.loader3DS = null;
+
if(this.objectName != null)
{
this.object = this.parser3DS.getObjectByName(this.objectName) as Mesh;
@@ -73,10 +86,14 @@ package alternativa.editor.propslib.loaders
this.objects = this.parser3DS.objects.concat();
this.objects.removeAt(this.objects.indexOf(this.object));
- this.loader3DS.removeEventListener(Event.COMPLETE,this.on3DSLoadingComplete);
- this.loader3DS.removeEventListener(IOErrorEvent.IO_ERROR,onErrorEvent);
- this.loader3DS.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,onErrorEvent);
- this.loader3DS = null;
+ if(this.textures == null && this.parser3DS.textureMaterials.length > 0)
+ {
+ var defaultMaterial:TextureMaterial = this.parser3DS.textureMaterials[0];
+ this.textures = new Map();
+ var opacityUrl:String = (defaultMaterial.opacityMapURL != null ? this.baseUrl + defaultMaterial.opacityMapURL.toLowerCase() : null);
+ this.textures.add("DEFAULT", new TextureMapsInfo(this.baseUrl+defaultMaterial.diffuseMapURL.toLowerCase(), opacityUrl));
+ }
+
if(this.textures != null)
{
this.texturesLoader = new TextureMapsBatchLoader();
@@ -109,6 +126,22 @@ package alternativa.editor.propslib.loaders
this.texturesLoader.removeEventListener(Event.COMPLETE,this.onTexturesLoadingComplete);
this.texturesLoader.removeEventListener(IOErrorEvent.IO_ERROR,onErrorEvent);
this.texturesLoader = null;
+
+ if(this.object.faceList.material is FillMaterial)
+ {
+ this.object.setMaterialToAllFaces(null);
+ }
+
+ var defaultTexture:BitmapData = this.bitmaps["DEFAULT"];
+ if(defaultTexture != null)
+ {
+ this.object.setMaterialToAllFaces(new TextureMaterial(defaultTexture));
+ }
+ else if(this.bitmaps.length == 0)
+ {
+ Alert.show("no textures: " + toString());
+ }
+
complete();
}
diff --git a/src/alternativa/editor/propslib/loaders/SpriteLoader.as b/src/alternativa/editor/propslib/loaders/SpriteLoader.as
index c91e2e7..ec75612 100644
--- a/src/alternativa/editor/propslib/loaders/SpriteLoader.as
+++ b/src/alternativa/editor/propslib/loaders/SpriteLoader.as
@@ -44,7 +44,7 @@ package alternativa.editor.propslib.loaders
private function onLoadingComplete(param1:Event) : void
{
- this.sprite = new Sprite3D(100,150);
+ this.sprite = new Sprite3D(100,100);
//this.sprite.material = new SpriteTextureMaterial(new Texture(this.loader.bitmapData),1,true,BlendMode.NORMAL,this.originX,this.originY);
this.sprite.material = new TextureMaterial(this.loader.bitmapData);
this.sprite.originX = this.originX;
diff --git a/src/alternativa/engine3d/core/Camera3D.as b/src/alternativa/engine3d/core/Camera3D.as
index b673264..20abf08 100644
--- a/src/alternativa/engine3d/core/Camera3D.as
+++ b/src/alternativa/engine3d/core/Camera3D.as
@@ -248,7 +248,7 @@ package alternativa.engine3d.core
this.shadows = new Dictionary();
}
- public function render():void
+ public function render(present:Boolean = true):void
{
var _local_1:int;
var _local_2:int;
@@ -791,7 +791,10 @@ package alternativa.engine3d.core
{
this.onRender();
};
- this.view.present();
+ if(present)
+ {
+ this.view.present();
+ }
} else
{
this.view.clearArea();
@@ -799,7 +802,10 @@ package alternativa.engine3d.core
{
this.onRender();
};
- this.view.present();
+ if(present)
+ {
+ this.view.present();
+ }
};
this.device = null;
};
diff --git a/src/alternativa/engine3d/core/Vertex.as b/src/alternativa/engine3d/core/Vertex.as
index c1ad3cf..a68d98d 100644
--- a/src/alternativa/engine3d/core/Vertex.as
+++ b/src/alternativa/engine3d/core/Vertex.as
@@ -43,7 +43,7 @@ package alternativa.engine3d.core
alternativa3d var index:int;
- alternativa3d var next:Vertex;
+ public var next:Vertex;
alternativa3d var value:Vertex;
diff --git a/src/alternativa/engine3d/materials/TextureMaterial.as b/src/alternativa/engine3d/materials/TextureMaterial.as
index b0fa847..9220724 100644
--- a/src/alternativa/engine3d/materials/TextureMaterial.as
+++ b/src/alternativa/engine3d/materials/TextureMaterial.as
@@ -53,11 +53,12 @@ package alternativa.engine3d.materials
this.smooth = _arg_3;
this._mipMapping = _arg_4;
this.resolution = _arg_5;
- if (_arg_1 != null)
+ this.bitmap = _arg_1;
+ /*if (_arg_1 != null)
{
this.bitmap = _arg_1;
this.textureResource = TextureResourcesRegistry.getTextureResource(_arg_1, (this._mipMapping > 0), _arg_2, this._hardwareMipMaps);
- };
+ };*/
}
public function get texture():BitmapData
@@ -66,7 +67,7 @@ package alternativa.engine3d.materials
{
return (this.textureResource.bitmapData);
};
- return (null);
+ return this.bitmap;
}
public function set texture(_arg_1:BitmapData):void
@@ -81,9 +82,10 @@ package alternativa.engine3d.materials
};
if (_arg_1 != null)
{
- this.textureResource = TextureResourcesRegistry.getTextureResource(_arg_1, (this._mipMapping > 0), this.repeat, this._hardwareMipMaps);
+ //this.textureResource = TextureResourcesRegistry.getTextureResource(_arg_1, (this._mipMapping > 0), this.repeat, this._hardwareMipMaps);
};
};
+ this.bitmap = _arg_1;
}
public function get textureATF():ByteArray
@@ -140,7 +142,7 @@ package alternativa.engine3d.materials
this._mipMapping = _arg_1;
if (this.bitmap != null)
{
- this.textureResource = TextureResourcesRegistry.getTextureResource(this.bitmap, (this._mipMapping > 0), this.repeat, this._hardwareMipMaps);
+ //this.textureResource = TextureResourcesRegistry.getTextureResource(this.bitmap, (this._mipMapping > 0), this.repeat, this._hardwareMipMaps);
};
}
@@ -170,6 +172,14 @@ package alternativa.engine3d.materials
};
}
+ private function createResourceIfNeeded() : void
+ {
+ if(this.textureResource == null && this.bitmap != null)
+ {
+ this.textureResource = TextureResourcesRegistry.getTextureResource(this.bitmap, (this._mipMapping > 0), this.repeat, this._hardwareMipMaps);
+ }
+ }
+
override public function clone():Material
{
var _local_1:TextureMaterial = new TextureMaterial(this.texture, this.repeat, this.smooth, this._mipMapping, this.resolution);
@@ -214,6 +224,8 @@ package alternativa.engine3d.materials
{
return;
};
+ this.createResourceIfNeeded();
+
var _local_8:Device = _arg_1.device;
var _local_9:Boolean = (_arg_6 is Decal);
var _local_10:Boolean = ((!(_local_9)) && (zOffset));
@@ -344,6 +356,8 @@ package alternativa.engine3d.materials
{
return;
};
+ this.createResourceIfNeeded();
+
var _local_9:Device = _arg_1.device;
var _local_10:Boolean = zOffset;
var _local_11:Boolean = ((_arg_1.fogAlpha > 0) && (_arg_1.fogStrength > 0));
diff --git a/src/alternativa/engine3d/objects/Mesh.as b/src/alternativa/engine3d/objects/Mesh.as
index 0ffda37..70b0e2f 100644
--- a/src/alternativa/engine3d/objects/Mesh.as
+++ b/src/alternativa/engine3d/objects/Mesh.as
@@ -26,7 +26,7 @@ package alternativa.engine3d.objects
public var clipping:int = 2;
public var sorting:int = 1;
public var threshold:Number = 0.01;
- alternativa3d var vertexList:Vertex;
+ public var vertexList:Vertex;
public var faceList:Face;
alternativa3d var vertexBuffer:VertexBufferResource;
alternativa3d var indexBuffer:IndexBufferResource;
@@ -2962,7 +2962,7 @@ package alternativa.engine3d.objects
};
}
- alternativa3d function deleteResources():void
+ public function deleteResources():void
{
if (this.vertexBuffer != null)
{
diff --git a/src/alternativa/gfx/core/Device.as b/src/alternativa/gfx/core/Device.as
index 5386deb..d5d41d5 100644
--- a/src/alternativa/gfx/core/Device.as
+++ b/src/alternativa/gfx/core/Device.as
@@ -70,6 +70,7 @@ package alternativa.gfx.core{
this.backBufferAntiAlias = -1;
this.backBufferEnableDepthAndStencil = false;
var _local_2:Context3D = this._stage3D.context3D;
+ //_local_2.ignoreResourceLimits = true;
_local_2.enableErrorChecking = this._enableErrorChecking;
for (_local_3 in this.resourcesToUpload)
{