everything i found in leaked code

This commit is contained in:
Tubix
2024-10-05 12:31:02 +01:00
parent 6679f44200
commit 28441faac3
2960 changed files with 394479 additions and 0 deletions

View File

@@ -0,0 +1,427 @@
package alternativa.physics.collision.colliders {
import __AS3__.vec.Vector;
import alternativa.physics.Contact;
import alternativa.physics.collision.CollisionPrimitive;
import alternativa.physics.collision.ICollider;
import alternativa.physics.math.Vector3;
/**
*
*/
public class BoxCollider implements ICollider {
/**
*
*/
public function BoxCollider() {
}
/**
* Проверяет наличие пересечения примитивов. Если пересечение существует, заполняется информация о контакте.
*
* @param prim1 первый примитив
* @param prim2 второй примитив
* @param contact переменная, в которую записывается информация о контакте, если пересечение существует
* @return true, если пересечение существует, иначе false
*/
public function getContact(prim1:CollisionPrimitive, prim2:CollisionPrimitive, contact:Contact):Boolean {
return false;
}
/**
* Выполняет быстрый тест на наличие пересечения двух примитивов.
*
* @param prim1 первый примитив
* @param prim2 второй примитив
* @return true, если пересечение существует, иначе false
*/
public function haveCollision(prim1:CollisionPrimitive, prim2:CollisionPrimitive):Boolean {
return false;
}
/**
* Формирует список вершин грани бокса, заданной нормальной к грани осью. Вершины перечисляются против часовой стрелки.
*
* @param box бокс, в котором ишутся вершины
* @param axisIdx индекс нормальной оси
* @param reverse если указано значение true, возвращаются вершины противоположной грани
* @param result список, в который помещаются вершины
*/
protected function getFaceVertsByAxis(hs:Vector3, axisIdx:int, negativeFace:Boolean, result:Vector.<Vector3>):void {
var v:Vector3;
switch (axisIdx) {
case 0:
if (negativeFace) {
v = result[0]; v.x = -hs.x; v.y = hs.y; v.z = -hs.z;
v = result[1]; v.x = -hs.x; v.y = -hs.y; v.z = -hs.z;
v = result[2]; v.x = -hs.x; v.y = -hs.y; v.z = hs.z;
v = result[3]; v.x = -hs.x; v.y = hs.y; v.z = hs.z;
} else {
v = result[0]; v.x = hs.x; v.y = -hs.y; v.z = -hs.z;
v = result[1]; v.x = hs.x; v.y = hs.y; v.z = -hs.z;
v = result[2]; v.x = hs.x; v.y = hs.y; v.z = hs.z;
v = result[3]; v.x = hs.x; v.y = -hs.y; v.z = hs.z;
}
break;
case 1:
if (negativeFace) {
v = result[0]; v.x = -hs.x; v.y = -hs.y; v.z = -hs.z;
v = result[1]; v.x = hs.x; v.y = -hs.y; v.z = -hs.z;
v = result[2]; v.x = hs.x; v.y = -hs.y; v.z = hs.z;
v = result[3]; v.x = -hs.x; v.y = -hs.y; v.z = hs.z;
} else {
v = result[0]; v.x = hs.x; v.y = hs.y; v.z = -hs.z;
v = result[1]; v.x = -hs.x; v.y = hs.y; v.z = -hs.z;
v = result[2]; v.x = -hs.x; v.y = hs.y; v.z = hs.z;
v = result[3]; v.x = hs.x; v.y = hs.y; v.z = hs.z;
}
break;
case 2:
if (negativeFace) {
v = result[0]; v.x = -hs.x; v.y = hs.y; v.z = -hs.z;
v = result[1]; v.x = hs.x; v.y = hs.y; v.z = -hs.z;
v = result[2]; v.x = hs.x; v.y = -hs.y; v.z = -hs.z;
v = result[3]; v.x = -hs.x; v.y = -hs.y; v.z = -hs.z;
} else {
v = result[0]; v.x = -hs.x; v.y = -hs.y; v.z = hs.z;
v = result[1]; v.x = hs.x; v.y = -hs.y; v.z = hs.z;
v = result[2]; v.x = hs.x; v.y = hs.y; v.z = hs.z;
v = result[3]; v.x = -hs.x; v.y = hs.y; v.z = hs.z;
}
break;
}
}
/**
*
* @param x
* @param pnum
* @param points
* @param result
* @return
*/
protected function clipLowX(x:Number, pnum:int, points:Vector.<Vector3>, result:Vector.<Vector3>, epsilon:Number):int {
var x1:Number = x - epsilon;
var num:int = 0;
var p1:Vector3 = points[int(pnum - 1)];
var p2:Vector3;
var dx:Number;
var dy:Number;
var dz:Number;
var t:Number;
var v:Vector3;
for (var i:int = 0; i < pnum; i++) {
p2 = points[i];
if (p1.x > x1) {
v = result[num];
num++;
v.x = p1.x;
v.y = p1.y;
v.z = p1.z;
if (p2.x < x1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (x - p1.x)/dx;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
} else if (p2.x > x1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (x - p1.x)/dx;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
p1 = p2;
}
return num;
}
/**
*
* @param x
* @param pnum
* @param points
* @param result
* @return
*/
protected function clipHighX(x:Number, pnum:int, points:Vector.<Vector3>, result:Vector.<Vector3>, epsilon:Number):int {
var x1:Number = x + epsilon;
var num:int = 0;
var p1:Vector3 = points[int(pnum - 1)];
var p2:Vector3;
var dx:Number;
var dy:Number;
var dz:Number;
var t:Number;
var v:Vector3;
for (var i:int = 0; i < pnum; i++) {
p2 = points[i];
if (p1.x < x1) {
v = result[num];
num++;
v.x = p1.x;
v.y = p1.y;
v.z = p1.z;
if (p2.x > x1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (x - p1.x)/dx;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
} else if (p2.x < x1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (x - p1.x)/dx;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
p1 = p2;
}
return num;
}
/**
*
* @param x
* @param pnum
* @param points
* @param result
* @return
*/
protected function clipLowY(y:Number, pnum:int, points:Vector.<Vector3>, result:Vector.<Vector3>, epsilon:Number):int {
var y1:Number = y - epsilon;
var num:int = 0;
var p1:Vector3 = points[int(pnum - 1)];
var p2:Vector3;
var dx:Number;
var dy:Number;
var dz:Number;
var t:Number;
var v:Vector3;
for (var i:int = 0; i < pnum; i++) {
p2 = points[i];
if (p1.y > y1) {
v = result[num];
num++;
v.x = p1.x;
v.y = p1.y;
v.z = p1.z;
if (p2.y < y1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (y - p1.y)/dy;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
} else if (p2.y > y1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (y - p1.y)/dy;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
p1 = p2;
}
return num;
}
/**
*
* @param x
* @param pnum
* @param points
* @param result
* @return
*/
protected function clipHighY(y:Number, pnum:int, points:Vector.<Vector3>, result:Vector.<Vector3>, epsilon:Number):int {
var y1:Number = y + epsilon;
var num:int = 0;
var p1:Vector3 = points[int(pnum - 1)];
var p2:Vector3;
var dx:Number;
var dy:Number;
var dz:Number;
var t:Number;
var v:Vector3;
for (var i:int = 0; i < pnum; i++) {
p2 = points[i];
if (p1.y < y1) {
v = result[num];
num++;
v.x = p1.x;
v.y = p1.y;
v.z = p1.z;
if (p2.y > y1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (y - p1.y)/dy;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
} else if (p2.y < y1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (y - p1.y)/dy;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
p1 = p2;
}
return num;
}
/**
*
* @param x
* @param pnum
* @param points
* @param result
* @return
*/
protected function clipLowZ(z:Number, pnum:int, points:Vector.<Vector3>, result:Vector.<Vector3>, epsilon:Number):int {
var z1:Number = z - epsilon;
var num:int = 0;
var p1:Vector3 = points[int(pnum - 1)];
var p2:Vector3;
var dx:Number;
var dy:Number;
var dz:Number;
var t:Number;
var v:Vector3;
for (var i:int = 0; i < pnum; i++) {
p2 = points[i];
if (p1.z > z1) {
v = result[num];
num++;
v.x = p1.x;
v.y = p1.y;
v.z = p1.z;
if (p2.z < z1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (z - p1.z)/dz;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
} else if (p2.z > z1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (z - p1.z)/dz;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
p1 = p2;
}
return num;
}
/**
*
* @param x
* @param pnum
* @param points
* @param result
* @return
*/
protected function clipHighZ(z:Number, pnum:int, points:Vector.<Vector3>, result:Vector.<Vector3>, epsilon:Number):int {
var z1:Number = z + epsilon;
var num:int = 0;
var p1:Vector3 = points[int(pnum - 1)];
var p2:Vector3;
var dx:Number;
var dy:Number;
var dz:Number;
var t:Number;
var v:Vector3;
for (var i:int = 0; i < pnum; i++) {
p2 = points[i];
if (p1.z < z1) {
v = result[num];
num++;
v.x = p1.x;
v.y = p1.y;
v.z = p1.z;
if (p2.z > z1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (z - p1.z)/dz;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
} else if (p2.z < z1) {
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
t = (z - p1.z)/dz;
v = result[num];
num++;
v.x = p1.x + t*dx;
v.y = p1.y + t*dy;
v.z = p1.z + t*dz;
}
p1 = p2;
}
return num;
}
}
}