mirror of
https://github.com/MapMakersAndProgrammers/alternativa3d-archive.git
synced 2025-10-30 08:55:21 -07:00
60 lines
1.9 KiB
ActionScript
60 lines
1.9 KiB
ActionScript
package alternativa.engine3d.physics {
|
|
import alternativa.engine3d.*;
|
|
import alternativa.engine3d.core.BSPNode;
|
|
|
|
use namespace alternativa3d;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
public class CollisionPlane {
|
|
// Узел BSP дерева, который содержит плоскость
|
|
public var node:BSPNode;
|
|
// Индикатор положения объекта относительно плоскости (спереди или сзади)
|
|
public var infront:Boolean;
|
|
// Расстояние до плоскости в начальной точке (всегда положительное)
|
|
public var sourceOffset:Number;
|
|
// Расстояние до плоскости в конечной точке
|
|
public var destinationOffset:Number;
|
|
|
|
// Хранилище неиспользуемых плоскостей
|
|
static private var collector:Array = new Array();
|
|
|
|
|
|
/**
|
|
* Создание плоскости
|
|
*
|
|
* @param node
|
|
* @param infront
|
|
* @param sourceOffset
|
|
* @param destinationOffset
|
|
* @return
|
|
*/
|
|
static alternativa3d function createCollisionPlane(node:BSPNode, infront:Boolean, sourceOffset:Number, destinationOffset:Number):CollisionPlane {
|
|
|
|
// Достаём плоскость из коллектора
|
|
var plane:CollisionPlane = collector.pop();
|
|
// Если коллектор пуст, создаём новую плоскость
|
|
if (plane == null) {
|
|
plane = new CollisionPlane();
|
|
}
|
|
|
|
plane.node = node;
|
|
plane.infront = infront;
|
|
plane.sourceOffset = sourceOffset;
|
|
plane.destinationOffset = destinationOffset;
|
|
|
|
return plane;
|
|
}
|
|
|
|
/**
|
|
* Удаление плоскости, все ссылки должны быть почищены
|
|
*
|
|
* @param plane
|
|
*/
|
|
static alternativa3d function destroyCollisionPlane(plane:CollisionPlane):void {
|
|
plane.node = null;
|
|
collector.push(plane);
|
|
}
|
|
}
|
|
} |