mirror of
https://github.com/MapMakersAndProgrammers/alternativa3d-archive.git
synced 2025-10-26 09:49:07 -07:00
50 lines
1.7 KiB
ActionScript
50 lines
1.7 KiB
ActionScript
package com.alternativagame.engine3d.skin {
|
|
import com.alternativagame.engine3d.Math3D;
|
|
import com.alternativagame.engine3d.engine3d;
|
|
import com.alternativagame.engine3d.material.FillMaterial;
|
|
import com.alternativagame.engine3d.object.mesh.polygon.FillPolygon3D;
|
|
import com.alternativagame.type.RGB;
|
|
import com.alternativagame.type.Vector;
|
|
|
|
import flash.display.Sprite;
|
|
import flash.geom.ColorTransform;
|
|
|
|
use namespace engine3d;
|
|
|
|
public class FillSkin extends PolygonSkin {
|
|
|
|
use namespace engine3d;
|
|
|
|
public function FillSkin(polygon:FillPolygon3D) {
|
|
super(polygon);
|
|
// Изначально осветить
|
|
light();
|
|
}
|
|
|
|
override protected function drawPolygon(bx:int, by:int, cx:int, cy:int):void {
|
|
with (graphics) {
|
|
clear();
|
|
beginFill(FillMaterial(polygon.material).color.toInt());
|
|
lineTo(bx, by);
|
|
lineTo(cx, cy);
|
|
}
|
|
}
|
|
|
|
override engine3d function light():void {
|
|
var color:RGB = FillPolygon3D(polygon).lightColor.clone();
|
|
|
|
// Добавить самосвечение
|
|
var selfIllumination:RGB = FillMaterial(polygon.material).selfIllumination;
|
|
color.add(selfIllumination);
|
|
|
|
var redMultiplier:Number = (color.red/5 + color.red*0.6 + 30) / 127;
|
|
var greenMultiplier:Number = (color.green/5 + color.green*0.6 + 30) / 127;
|
|
var blueMultiplier:Number = (color.blue/5 + color.blue*0.6 + 30) / 127;
|
|
var redOffset:Number = (color.red - 127) * 0.65;
|
|
var greenOffset:Number = (color.green - 127) * 0.65;
|
|
var blueOffset:Number = (color.blue - 127) * 0.65;
|
|
|
|
transform.colorTransform = new ColorTransform(redMultiplier, greenMultiplier, blueMultiplier, alpha, redOffset, greenOffset, blueOffset);
|
|
}
|
|
}
|
|
} |