This repository was archived by the owner on Dec 6, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdecals.cs
More file actions
80 lines (61 loc) · 1.92 KB
/
Copy pathdecals.cs
File metadata and controls
80 lines (61 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
$Pref::Server::DecalLimit = 100;
$Pref::Server::DecalTimeout = 20000;
function spawnDecal(%dataBlock, %position, %vector, %size, %angle) {
if (!isObject(MissionCleanup)) {
error("ERROR: MissionCleanup not created.");
return -1;
}
if (!isObject(%dataBlock) || %dataBlock.getClassName() !$= StaticShapeData) {
return;
}
if (%size $= "") {
%size = %dataBlock.decalSize;
}
if (%size $= "") {
%size = 1;
}
%obj = new StaticShape() {
dataBlock = %dataBlock;
};
if (!isObject(%obj)) {
error("ERROR: Unable to create object.");
return -1;
}
if (!isObject(DecalGroup)) {
MissionCleanup.add(new SimSet(DecalGroup));
}
DecalGroup.add(%obj);
while (DecalGroup.getCount() >= $Pref::Server::DecalLimit) {
DecalGroup.getObject(0).delete();
}
if (!isObject(%obj)) {
return -1;
}
// TODO: Rotate decal around normal by %angle
%obj.setTransform(%position SPC vectorToAxis(%vector));
//%obj.setScale(vectorSub(%size SPC %size SPC %size, vectorScale(%vector, %size)));
%obj.setScale(%size SPC %size SPC %size);
if (%dataBlock.doColorShift) {
%obj.setNodeColor("ALL", %dataBlock.colorShiftColor);
}
if ($Pref::Server::DecalTimeout !$= "") {
%obj.schedule($Pref::Server::DecalTimeout - 1000, fadeOut);
%obj.schedule($Pref::Server::DecalTimeout, delete);
}
return %obj;
}
function spawnDecalFromRayCast(%dataBlock, %rayCast, %size) {
if (%rayCast $= 0) {
return -1;
}
return spawnDecal(%dataBlock, getWords(%rayCast, 1, 3), getWords(%rayCast, 4, 6), %size);
}
function sprayDecalWithRayCast(%dataBlock, %a, %b, %mask, %avoid, %size) {
return spawnDecalFromRayCast(%dataBlock, containerRayCast(%a, %b, %mask, %avoid), %size);
}
function vectorToAxis(%vector) {
%y = mRadToDeg(mACos(getWord(%vector, 2) / vectorLen(%vector))) % 360;
%z = mRadToDeg(mATan(getWord(%vector, 1), getWord(%vector, 0)));
%euler = vectorScale(0 SPC %y SPC %z, $pi / 180);
return getWords(matrixCreateFromEuler(%euler), 3, 6);
}