mirror of
https://github.com/MapMakersAndProgrammers/alternativa-editor-mod.git
synced 2025-10-26 01:49:05 -07:00
219 lines
6.7 KiB
ActionScript
219 lines
6.7 KiB
ActionScript
package alternativa.editor.prop
|
|
{
|
|
import alternativa.editor.InvisibleTexture;
|
|
import alternativa.engine3d.alternativa3d;
|
|
import alternativa.engine3d.objects.Mesh;
|
|
import alternativa.engine3d.core.Object3D;
|
|
import alternativa.engine3d.materials.TextureMaterial;
|
|
import alternativa.types.Map;
|
|
import alternativa.types.Matrix4;
|
|
import alternativa.types.Point3D;
|
|
import alternativa.types.Set;
|
|
import flash.display.BitmapData;
|
|
import flash.geom.Matrix;
|
|
import mx.controls.Alert;
|
|
import alternativa.engine3d.core.Face;
|
|
import alternativa.editor.engine3d.materials.WireMaterial;
|
|
import alternativa.engine3d.core.Vertex;
|
|
|
|
use namespace alternativa3d;
|
|
|
|
public class MeshProp extends Prop
|
|
{
|
|
public var bitmaps:Map;
|
|
|
|
protected var _textureName:String = "";
|
|
|
|
private var collisionMaterial:CustomFillMaterial;
|
|
|
|
private var _isMirror:Boolean = false;
|
|
|
|
private var collisionBoxes:Set;
|
|
|
|
private var bound:Mesh;
|
|
|
|
private var _objects:Vector.<Object3D>;
|
|
|
|
public function MeshProp(mainObject:Object3D, objects:Vector.<Object3D>, param2:String, param3:String, param4:String, param5:Boolean = true)
|
|
{
|
|
super(mainObject,param2,param3,param4,param5);
|
|
_objects = objects;
|
|
type = Prop.TILE;
|
|
this.parseCollisionData(mainObject, objects);
|
|
}
|
|
|
|
private static function getMirrorBitmapData(param1:BitmapData) : BitmapData
|
|
{
|
|
var loc2:BitmapData = new BitmapData(param1.width,param1.height);
|
|
loc2.draw(param1,new Matrix(-1,0,0,1,param1.width,0));
|
|
return loc2;
|
|
}
|
|
|
|
private function parseCollisionData(mainObject:Object3D, objects:Vector.<Object3D>) : void
|
|
{
|
|
var loc2:Object3D;
|
|
var loc3:Mesh = null;
|
|
this.collisionBoxes = new Set();
|
|
for each(loc2 in objects)
|
|
{
|
|
loc3 = loc2 as Mesh;
|
|
if(loc3)
|
|
{
|
|
loc3.setMaterialToAllFaces(null);
|
|
if(loc3.name.substr(0,3) != "occ")
|
|
{
|
|
this.collisionBoxes.add(loc3);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Alert.show(mainObject.name + " include invalid collision mesh " + Object3D(loc2).name);
|
|
}
|
|
}
|
|
this.collisionMaterial = new CustomFillMaterial(new Point3D(-10000000000,-7000000000,4000000000),16744319);
|
|
}
|
|
|
|
public function showCollisionBoxes() : void
|
|
{
|
|
var loc1:* = undefined;
|
|
var loc2:Mesh = null;
|
|
for(loc1 in this.collisionBoxes)
|
|
{
|
|
loc2 = loc1 as Mesh;
|
|
loc2.setMaterialToAllFaces(this.collisionMaterial);
|
|
}
|
|
setMaterial(null);
|
|
}
|
|
|
|
public function hideCollisionBoxes() : void
|
|
{
|
|
var loc1:* = undefined;
|
|
var loc2:Mesh = null;
|
|
for(loc1 in this.collisionBoxes)
|
|
{
|
|
loc2 = loc1 as Mesh;
|
|
loc2.setMaterialToAllFaces(null);
|
|
}
|
|
setMaterial(_material);
|
|
}
|
|
|
|
public function get collisionGeometry() : Set
|
|
{
|
|
return this.collisionBoxes;
|
|
}
|
|
|
|
public function get textureName() : String
|
|
{
|
|
return this._textureName;
|
|
}
|
|
|
|
public function set textureName(param1:String) : void
|
|
{
|
|
this._textureName = param1;
|
|
if(this._textureName == InvisibleTexture.TEXTURE_NAME)
|
|
{
|
|
bitmapData = InvisibleTexture.invisibleTexture.bitmapData;
|
|
}
|
|
else
|
|
{
|
|
bitmapData = this._isMirror ? getMirrorBitmapData(this.bitmaps[param1]) : this.bitmaps[param1];
|
|
}
|
|
_material = new TextureMaterial(bitmapData);
|
|
if(_selected)
|
|
{
|
|
_selectBitmapData.dispose();
|
|
select();
|
|
}
|
|
else
|
|
{
|
|
setMaterial(_material);
|
|
}
|
|
if(this._textureName == "DEFAULT")
|
|
{
|
|
this._textureName = "";
|
|
}
|
|
}
|
|
|
|
public function mirrorTexture() : void
|
|
{
|
|
this._isMirror = !this._isMirror;
|
|
bitmapData = getMirrorBitmapData(bitmapData);
|
|
(_material as TextureMaterial).texture = bitmapData;
|
|
if(selected)
|
|
{
|
|
_selectBitmapData.dispose();
|
|
select();
|
|
}
|
|
else
|
|
{
|
|
setMaterial(_material);
|
|
}
|
|
}
|
|
|
|
override public function clone() : Object3D
|
|
{
|
|
var loc1:Mesh = _object.clone() as Mesh;
|
|
loc1.setMaterialToAllFaces(_material as TextureMaterial);
|
|
|
|
var objectsCopy:Vector.<Object3D> = new Vector.<Object3D>();
|
|
for each(var obj:Object3D in _objects)
|
|
{
|
|
objectsCopy.push(obj.clone());
|
|
}
|
|
|
|
var loc2:MeshProp = new MeshProp(loc1,objectsCopy,name,_libraryName,_groupName,false);
|
|
loc2.distancesX = distancesX.clone();
|
|
loc2.distancesY = distancesY.clone();
|
|
loc2.distancesZ = distancesZ.clone();
|
|
loc2._multi = _multi;
|
|
loc2.name = name;
|
|
loc2.bitmaps = this.bitmaps;
|
|
loc2._textureName = this._textureName;
|
|
loc2.height = height;
|
|
return loc2;
|
|
}
|
|
|
|
public function showBound() : void
|
|
{
|
|
var loc1:Matrix4 = null;
|
|
var loc2:Point3D = null;
|
|
var loc3:Point3D = null;
|
|
var loc4:Point3D = null;
|
|
var loc5:Point3D = null;
|
|
var loc6:Face = null;
|
|
if(!this.bound)
|
|
{
|
|
this.bound = new Mesh();
|
|
loc1 = this.transformation;
|
|
loc1.invert();
|
|
loc2 = new Point3D(distancesX.y + x,distancesY.x + y,z);
|
|
loc3 = new Point3D(distancesX.y + x,distancesY.y + y,z);
|
|
loc4 = new Point3D(distancesX.x + x,distancesY.y + y,z);
|
|
loc5 = new Point3D(distancesX.x + x,distancesY.x + y,z);
|
|
loc5.transform(loc1);
|
|
loc4.transform(loc1);
|
|
loc3.transform(loc1);
|
|
loc2.transform(loc1);
|
|
this.bound.addFace(Vector.<Vertex>([this.bound.addVertex(loc2.x,loc2.y,loc2.z,3),this.bound.addVertex(loc3.x,loc3.y,loc3.z,2),this.bound.addVertex(loc4.x,loc4.y,loc4.z,1),this.bound.addVertex(loc5.x,loc5.y,loc5.z,0)]));
|
|
//loc6 = this.bound.createSurface([0],0);
|
|
//loc6.material = new WireMaterial(4,255);
|
|
this.bound.setMaterialToAllFaces(new WireMaterial(4,128,128,5,255));
|
|
addChild(this.bound);
|
|
this.bound.z = 0.1;
|
|
//this.bound.mobility = -100;
|
|
this.bound.mouseEnabled = false;
|
|
}
|
|
}
|
|
|
|
public function hideBound() : void
|
|
{
|
|
if(this.bound)
|
|
{
|
|
removeChild(this.bound);
|
|
this.bound = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|