Files
alternativa3d-archive/Alternativa3D2/2.0/com/alternativagame/engine3d/skin/HelperSkin.as
2024-10-05 12:11:16 +01:00

97 lines
2.6 KiB
ActionScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.alternativagame.engine3d.skin {
import com.alternativagame.engine3d.Math3D;
import com.alternativagame.engine3d.Matrix3D;
import com.alternativagame.engine3d.engine3d;
import com.alternativagame.engine3d.material.HelperMaterial;
import com.alternativagame.engine3d.object.Object3D;
import com.alternativagame.engine3d.object.SkinObject3D;
import com.alternativagame.engine3d.object.light.Light3D;
import com.alternativagame.type.RGB;
import com.alternativagame.type.Vector;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
use namespace engine3d;
public class HelperSkin extends ObjectSkin {
use namespace engine3d;
private var tf:TextField = null;
private var link:Shape;
protected var gfx:Shape;
public function HelperSkin(object:SkinObject3D) {
super(object);
link = new Shape();
addChild(link);
gfx = new Shape();
addChild(gfx);
}
override engine3d function position():void {
super.position();
drawLink();
}
override engine3d function draw():void {
super.draw();
var material:HelperMaterial = HelperMaterial(this.material);
// Если в материале есть текст
if (material.text) {
// Создаём текстовое поле если надо
if (tf == null) {
tf = new TextField();
var f:TextFormat = new TextFormat("Courier", 11);
f.align = "center";
tf.defaultTextFormat = f;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.selectable = false;
tf.mouseEnabled = false;
addChild(tf);
}
// Обновляем данные текстового поля
tf.text = object.name;
tf.textColor = material.textColor.toInt();
tf.x = -tf.width/2;
} else {
// Удаляем текстовое поле если оно не нужно
if (tf != null) {
removeChild(tf);
tf = null;
}
}
drawLink();
}
// Рисуем связь с родителем
private function drawLink():void {
link.graphics.clear();
if (HelperMaterial(material).link && object.parent != null) {
var px:Number = object.parent.transform.d - x;
var py:Number = - object.parent.transform.l - y;
with (link.graphics) {
moveTo(0,0);
lineStyle(1, 0xFFFFFF, 0.3);
lineTo(px, py);
}
}
}
override protected function drawDefaultHit():void {
with (graphics) {
drawCircle(0, 0, 3);
}
}
}
}