DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
EntityPlacementCallback.c
См. документацию.
1class EntityPlacementCallback : ObjectSnapCallback
2{
3#ifdef DIAG_DEVELOPER
4#ifndef SERVER
5 ref array<Shape> m_Shapes = new array<Shape>();
6#endif
7#endif
8
10 {
11 }
12
17
19 {
20#ifdef DIAG_DEVELOPER
21#ifndef SERVER
22 foreach (auto shape : m_Shapes)
23 {
24 shape.Destroy();
25 shape = null;
26 }
27 m_Shapes.Clear();
28#endif
29#endif
30 }
31
32 override void OnSetup()
33 {
34#ifdef DIAG_DEVELOPER
35#ifndef SERVER
36 m_DebugEnabled = DiagMenu.GetBool(DiagMenuIDs.INVENTORY_ENTITY_PLACEMENT_CALLBACK_DEBUG);
37#endif
38#endif
39
41
42 m_DirectionFunc[0] = 1.2;
43 m_DirectionFunc[1] = 0.3;
44
45 Human human;
46 if (Class.CastTo(human, m_Owner))
47 {
48 m_OwnerPosition = human.GetBonePositionWS(human.GetBoneIndexByName("Head"));
49
50 HumanInputController hic = human.GetInputController();
51 if (hic)
52 {
53 float headingAngle = hic.GetHeadingAngle() + Math.PI_HALF;
54 m_OwnerDirection[0] = Math.Cos(headingAngle);
55 m_OwnerDirection[1] = 0.0;
56 m_OwnerDirection[2] = Math.Sin(headingAngle);
57
58 m_OwnerDirection.Normalized();
59 }
60 else
61 {
62 m_OwnerDirection = human.GetDirection();
63 }
64 }
65 else if (m_Owner)
66 {
67 m_OwnerPosition = m_Owner.GetPosition();
68 m_OwnerDirection = m_Owner.GetDirection();
69 }
70 }
71
72 override void OnDebug(vector p0, vector p1, bool hasHit, bool found)
73 {
74#ifdef DIAG_DEVELOPER
75#ifndef SERVER
76 Shape shape;
77
78 int alpha = 0x33000000;
79 int colour = 0x00FF0000;
80 if (!hasHit && found)
81 {
82 colour = 0x000000FF;
83 }
84 else if (!hasHit)
85 {
86 colour = 0x0000FF00;
87 alpha = 0x11000000;
88 }
89
90 shape = Shape.Create(ShapeType.BBOX, colour | alpha, ShapeFlags.NOZBUFFER | ShapeFlags.TRANSP, -m_Extents, m_Extents);
91 shape.SetMatrix(m_Transform);
92 m_Shapes.Insert(shape);
93
94 vector p[2];
95 p[0] = p0;
96 p[1] = p1;
97 shape = Shape.CreateLines(colour | 0xFF000000, ShapeFlags.NOZBUFFER | ShapeFlags.TRANSP, p, 2);
98 m_Shapes.Insert(shape);
99#endif
100#endif
101 }
102
103 override bool OnFirstContact(Object other)
104 {
105 if (!other.IsTransport())
106 {
107 return false;
108 }
109
110 return true;
111 }
112
113 override bool OnQuery(Object other)
114 {
115 if (other.IsScenery())
116 {
117 return false;
118 }
119
120 if (other.IsMan())
121 {
122 return false;
123 }
124
125 EntityAI entity;
126 if (Class.CastTo(entity, other))
127 {
128 if (entity.IsAnimal() || entity.IsZombie())
129 {
130 return false;
131 }
132 }
133
134 if (other.GetCollisionRadius() < 0.05)
135 {
136 return false;
137 }
138
139 return true;
140 }
141
142 override bool OnCollide(Object other)
143 {
144 if (other.IsScenery())
145 {
146 return false;
147 }
148
149 if (other.IsMan())
150 {
151 return false;
152 }
153
154 if (!other.CanObstruct() && !other.IsTransport())
155 {
156 return false;
157 }
158
159 return true;
160 }
161};
DiagMenuIDs
Определения EDiagMenuIDs.c:2
vector m_DirectionFunc
The size of the boundig box, centered.
Определения Object.c:18
enum ProcessDirectDamageFlags m_Owner
vector m_OwnerDirection
The position of the owner in world space.
Определения Object.c:13
vector m_Transform[4]
If 'OnDebug' is to be called.
Определения Object.c:21
bool m_DebugEnabled
How much should the direction be favoured.
Определения Object.c:20
vector m_OwnerPosition
The owner performing the snap callback.
Определения Object.c:12
vector m_Extents
The true center of the bounding box of the object to be dropped in model space.
Определения Object.c:16
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения EnDebug.c:233
Определения Building.c:6
override bool OnQuery(Object other)
Определения EntityPlacementCallback.c:113
void ClearDebugShapes()
Определения EntityPlacementCallback.c:18
override void OnSetup()
Определения EntityPlacementCallback.c:32
override void OnDebug(vector p0, vector p1, bool hasHit, bool found)
Определения EntityPlacementCallback.c:72
override bool OnFirstContact(Object other)
Определения EntityPlacementCallback.c:103
void ~EntityPlacementCallback()
Определения EntityPlacementCallback.c:13
void EntityPlacementCallback()
Определения EntityPlacementCallback.c:9
override bool OnCollide(Object other)
Определения EntityPlacementCallback.c:142
proto native float GetHeadingAngle()
returns main heading angle (in radians) -PI .. PI (this is world Y angle player is actualy pointing t...
Определения human.c:18
Определения EnMath.c:7
Определения ObjectTyped.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения EnConvert.c:106
ShapeType
Определения EnDebug.c:116
ShapeFlags
Определения EnDebug.c:126
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
class DiagMenu Shape
don't call destructor directly. Use Destroy() instead
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
static const float PI_HALF
Определения EnMath.c:14
static proto float Cos(float angle)
Returns cosinus of angle in radians.
static proto float Sin(float angle)
Returns sinus of angle in radians.