71 {
72 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
73 if (!poActionData)
74 return;
75
76 if (!poActionData.m_MainItem)
77 return;
78
80
81 EntityAI entity_for_placing = poActionData.m_MainItem;
82 vector position = vector.Zero;
83 vector orientation = vector.Zero;
84
85
87 {
88 if (poActionData.m_Player.GetHologramServer())
89 {
92
93 poActionData.m_Player.GetHologramServer().EvaluateCollision(poActionData.m_MainItem);
94 if (
g_Game.IsMultiplayer() && poActionData.m_Player.GetHologramServer().IsColliding())
95 return;
96
97 poActionData.m_Player.GetHologramServer().PlaceEntity(entity_for_placing);
98
99 if (
g_Game.IsMultiplayer())
100 poActionData.m_Player.GetHologramServer().CheckPowerSource();
101
102 #ifdef DEVELOPER
104 {
105 Debug.Log(
string.Format(
"Hologram of %1 found, deployment successful.", poActionData.m_MainItem),
"hologramLogs");
106 Debug.Log(
string.Format(
"Pos Comparison | player: %1 | hologram: %2 | action data: %3", poActionData.m_Player.GetPosition(),poActionData.m_Player.GetLocalProjectionPosition(),position),
"hologramLogs");
107 }
108 #endif
109 }
110 else
111 {
112 Debug.Log(
string.Format(
"Expected hologram of %1 not found, failing deployment!", poActionData.m_MainItem),
Type().
ToString());
113 return;
114 }
115 }
116 else
117 {
118 position = poActionData.m_Player.GetPosition();
119 orientation = poActionData.m_Player.GetOrientation();
120 position = position + (poActionData.m_Player.GetDirection() *
POSITION_OFFSET);
121 }
122
124 poActionData.m_MainItem.SetIsBeingPlaced(false);
126
127 entity_for_placing.OnPlacementComplete(poActionData.m_Player, position, orientation);
128 poActionData.m_Player.PlacingCompleteServer();
129
131 }
void ClearActionJuncture(ActionData action_data)
bool ActionUsesHologram()
void MoveEntityToFinalPosition(ActionData action_data, vector position, vector orientation)
const float POSITION_OFFSET
ref array< ItemBase > m_MovedItems
proto native bool IsCLIParam(string param)
Returns if command line argument is present.