more versions added

This commit is contained in:
Tubix
2024-10-05 12:11:16 +01:00
parent 413f563f33
commit c32c7e8c34
7661 changed files with 1343635 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.engine3d.Math3D;
import com.alternativagame.type.RGB;
import flash.display.BitmapData;
import flash.geom.Point;
public class SpriteMaterial extends ObjectMaterial {
// Массив фаз
private var states:Array = new Array();
// Сглаженность
public var smoothing:Boolean;
// Цвет самосвечения материала
public var selfIllumination:RGB = new RGB();
// Флаги искажения спрайта
public var scale:Boolean;
public var rotate:Boolean;
public function SpriteMaterial(smoothing:Boolean = false, scale:Boolean = false, rotate:Boolean = false) {
this.smoothing = smoothing;
this.scale = scale;
this.rotate = rotate;
}
public function setPhase(bitmapData:BitmapData, pivot:Point = null, state:String = "default", pitch:Number = 0, yaw:Number = 0):void {
// Добавляем состояние, если надо
if (states[state] == undefined) {
states[state] = new Array();
}
states[state].push(new SpritePhase(bitmapData, pivot, pitch, yaw));
}
// Возвращает фазу
public function getPhase(state:String = "default", pitch:Number = 0, yaw:Number = 0):SpritePhase {
var res:SpritePhase = null;
// Проверка на наличие состояние
if (states[state] != undefined) {
var phases:Array = states[state];
var num:uint = phases.length;
var i:uint;
var phase:SpritePhase;
var resPitch:Number;
var currentDiff:Number;
// Находим ближайший pitch
var minDiff:Number = Number.MAX_VALUE;
for (i = 0; i < num; i++) {
phase = phases[i];
currentDiff = Math.abs(phase.pitch - pitch);
if (currentDiff < minDiff) {
minDiff = currentDiff;
resPitch = phase.pitch;
}
}
// Находим ближайший yaw и сохраняем результат
minDiff = Number.MAX_VALUE;
for (i = 0; i < num; i++) {
phase = phases[i];
if (phase.pitch == resPitch) {
currentDiff = Math.abs(Math3D.deltaAngle(phase.yaw, yaw));
if (currentDiff < minDiff) {
minDiff = currentDiff;
res = phase;
}
}
}
}
return res;
}
// Клон
override public function clone():Material {
var res:SpriteMaterial = new SpriteMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:SpriteMaterial = SpriteMaterial(material);
super.cloneParams(mat);
mat.smoothing = smoothing;
mat.selfIllumination = selfIllumination.clone();
mat.scale = scale;
mat.rotate = rotate;
for (var state:String in states) {
for (var i:uint = 0; i < states[state].length; i++) {
var phase:SpritePhase = states[state][i];
mat.setPhase(phase.bitmapData, phase.pivot.clone(), state, phase.pitch, phase.yaw);
}
}
}
}
}