65 {
66 PlaceObjectActionData poActionData;
67 poActionData = PlaceObjectActionData.Cast(action_data);
68
69 if (!poActionData)
70 return;
71
72 if (!action_data.m_MainItem)
73 return;
74
75 EntityAI entity_for_placing = action_data.m_MainItem;
76 vector position;
77 vector orientation;
78
79
80 if (action_data.m_Player.GetHologramServer())
81 {
82 position = action_data.m_Player.GetLocalProjectionPosition();
83 orientation = action_data.m_Player.GetLocalProjectionOrientation();
84
85 action_data.m_Player.GetHologramServer().EvaluateCollision(action_data.m_MainItem);
86 if (
GetGame().IsMultiplayer() && action_data.m_Player.GetHologramServer().IsColliding())
87 return;
88
89 action_data.m_Player.GetHologramServer().PlaceEntity(entity_for_placing);
90
92 action_data.m_Player.GetHologramServer().CheckPowerSource();
93 }
94 else
95 {
96 position = action_data.m_Player.GetPosition();
97 orientation = action_data.m_Player.GetOrientation();
98 position = position + (action_data.m_Player.GetDirection() *
POSITION_OFFSET);
99 }
100
103 action_data.m_MainItem.SetIsBeingPlaced(false);
105
106 entity_for_placing.OnPlacementComplete(action_data.m_Player, position, orientation);
107 action_data.m_Player.PlacingCompleteServer();
108
110 }
void MoveEntityToFinalPosition(ActionData action_data, vector position, vector orientation)
const float POSITION_OFFSET
ref array< ItemBase > m_MovedItems
bool ClearJunctureEx(Man player, notnull EntityAI item)
proto native CGame GetGame()