Dayz Explorer  1.24.157551 (v105080)
Dayz Code Explorer by Zeroy
entityplacementcallback.c
Go to the documentation of this file.
1 class 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 
14  {
15  ClearDebugShapes();
16  }
17 
18  void ClearDebugShapes()
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 
40  ClearDebugShapes();
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 };
DiagMenu
Definition: endebug.c:232
m_OwnerPosition
vector m_OwnerPosition
The owner performing the snap callback.
Definition: object.c:12
m_Extents
vector m_Extents
The true center of the bounding box of the object to be dropped in model space.
Definition: object.c:16
m_Transform
vector m_Transform[4]
If 'OnDebug' is to be called.
Definition: object.c:21
EntityPlacementCallback
Definition: entityplacementcallback.c:1
DiagMenuIDs
DiagMenuIDs
Definition: ediagmenuids.c:1
vector
Definition: enconvert.c:105
m_OwnerDirection
vector m_OwnerDirection
The position of the owner in world space.
Definition: object.c:13
ShapeFlags
ShapeFlags
Definition: endebug.c:125
Object
Definition: objecttyped.c:1
HumanInputController
Definition: human.c:17
m_DebugEnabled
bool m_DebugEnabled
How much should the direction be favoured.
Definition: object.c:20
m_Owner
enum ProcessDirectDamageFlags m_Owner
array< Shape >
m_DirectionFunc
vector m_DirectionFunc
The size of the boundig box, centered.
Definition: object.c:18
ShapeType
ShapeType
Definition: endebug.c:115
Math
Definition: enmath.c:6
Class
Super root of all classes in Enforce script.
Definition: enscript.c:10
EntityAI
Definition: building.c:5
Shape
class DiagMenu Shape
don't call destructor directly. Use Destroy() instead