14 protected static const float TRACE_DIS = 2000;
28 [
Attribute(defvalue:
"45",
desc:
"When vertical mode is GEOMETRY, hovering over surface with at least this slope will place preview entity below the surface, not on it.\n\nCurrently disabled, entity editing will be disable beyond this angle.")]
31 [
Attribute(defvalue:
"101",
desc:
"When vertical mode is GEOMETRY, hovering over surface with at least this slope will prevent showing preview entity and confirming the change.")]
34 [
Attribute(defvalue:
"1",
desc:
"When adjusting entity height, camera will move together with the entity when above this vertical offset.\nWhen below, the camera will rotate towards the entity instead.")]
72 if (entitiesRemove && entitiesRemove.Count() == 1)
81 if (entitiesInsert && entitiesInsert.Count() == 1)
84 bool isDelegate =
true;
110 set<SCR_EditableEntityComponent> hoverEntities =
new set<SCR_EditableEntityComponent>();
181 vector previewTransform[4];
215 if (!
game || !m_World)
223 vector cameraPos = workspace.ProjScreenToWorld(clickPos[0], clickPos[1], clickDir, m_World, -1);
236 if (!
game || !m_World)
253 if (!
game || !m_World)
261 cameraPos = workspace.ProjScreenToWorld(cursorPos[0], cursorPos[1], cursorDir, m_World, -1);
269 trace.End = trace.Start + dir;
270 if (cameraHeight >= m_World.GetOceanBaseHeight())
277 return m_World.TraceMove(trace, null);
294 vector previewBoundMin, previewBoundMax;
296 float previewSize =
vector.DistanceXZ(previewBoundMin, previewBoundMax);
297 float offsetSize =
vector.DistanceXZ(
vector.Zero, previewBoundMin + previewBoundMax);
309 vector orientedTransform[4];
337 vector cameraPos, cursorDir;
339 cursorDir *= TRACE_DIS;
340 vector pos = transform[3];
342 switch (verticalMode)
361 pos[1] =
Math.Max(pos[1],
GetGame().GetWorld().GetSurfaceY(pos[0], pos[2]));
383 vector pos = transform[3];
384 transform[3][1] = pos[1] + moveVertical;
397 vector cameraPos = camera.GetWorldTransformAxis(3) + transform[3] - pos;
403 camera.SetOrigin(cameraPos);
409 Math3D.DirectionAndUpMatrix(transform[3] - cameraTransform[3],
vector.Up, cameraTransform);
410 camera.SetTransform(cameraTransform);
423 vector cameraPos, cursorDir;
426 float dis =
vector.DistanceXZ(cameraPos, transform[3]);
427 float angle = cursorDir.VectorToAngles()[1];
428 vector tracePos = cameraPos + cursorDir * (dis /
Math.Cos(angle *
Math.DEG2RAD));
429 transform[3][1] = tracePos[1];
437 string text =
string.Format(
" %1 m",
m_PreviewEntityManager.GetPreviewHeightAboveTerrain().ToString(lenDec: 3));
444 protected void Rotate(
float tDelta, out
vector transform[4],
float rotationValue)
447 bool freeRotation =
true;
480 float step = slotEntity.GetRotationStep();
507 vector targetTransform[4];
509 pivotPos = targetTransform[3];
518 vector cameraPos, cursorDir;
521 float dir = (worldPos - pivotPos).VectorToAngles()[0] -
m_vAnglesOrigin[0];
545 trace.Start = cameraPos;
546 trace.End = trace.Start + cursorDir;
549 if (cameraPos[1] >= m_World.GetOceanBaseHeight())
553 float traceCursor = m_World.TraceMove(trace, null);
556 if (traceCursor == 1)
559 worldPos = cameraPos + cursorDir * traceCursor;
562 if (!trace.TraceEnt || trace.TraceEnt.Type() == GenericTerrainEntity || trace.TraceEnt.Type() == RoadEntity)
567 float dotProduct =
vector.Dot(trace.TraceNorm,
vector.Up);
568 float slope = 90 -
Math.Tan(dotProduct) *
Math.RAD2DEG;
622 vector offsetPos = cameraPos;
624 offsetPos -=
vector.Up * heightATL;
626 float traceDis =
GetTraceDis(offsetPos, cursorDir, cameraPos[1]);
630 worldPos = offsetPos + cursorDir * traceDis;
631 worldPos[1] = worldPos[1] + heightATL;
638 if (cursorDir[1] > 0)
655 traceDis =
GetTraceDis(cameraPos, cursorDir, cameraPos[1]);
665 traceDis =
Math3D.IntersectionRayBox(cameraPos, cameraPos + cursorDir,
Vector(-
float.
MAX, heightASL, -
float.
MAX),
Vector(
float.
MAX, heightASL,
float.
MAX));
671 worldPos = cameraPos + cursorDir * traceDis;
672 worldPos[1] = heightASL;
688 bool canTransform =
true;
689 bool instant =
false;
690 vector previewTransform[4];
712 float moveVertical =
m_InputManagerBase.GetActionValue(
"EditorTransformMoveVertical") * tDelta;
713 float rotateYaw =
m_InputManagerBase.GetActionValue(
"EditorTransformRotateYaw") * tDelta;
802 m_World =
game.GetWorld();
823 super.HandlerDeattached(w);
const int TRACE_LAYER_CAMERA
ArmaReforgerScripted GetGame()
ref array< string > angles
class SCR_AIPolar m_Target
override void HandlerAttachedScripted(Widget w)
void OnEditorTransformMoveVerticalModifierUp(float value, EActionTrigger reason)
EPreviewEntityEditorOperation m_Operation
SCR_PreviewEntityEditorComponent m_PreviewEntityManager
vector m_vClickPosWorldBase
ResourceName m_DirIndicatorPrefab
void ActivatePreviewContext()
void Rotate(float tDelta, out vector transform[4], float rotationValue)
bool MoveVertical(float tDelta, out vector transform[4], float moveVertical, EEditorTransformVertical verticalMode)
bool GetPreviewPosAboveGeometry(vector cameraPos, vector cursorDir, out vector worldPos, out EEditorTransformVertical verticalMode)
void OnEditorTransformRotationModifierUp(float value, EActionTrigger reason)
SCR_PlacingEditorComponent m_PlacingManager
void MoveVerticalTowardsCursor(float tDelta, out vector transform[4])
float m_fMinCameraVerticalOffset
float m_fDirIndicatorScale
SCR_EPreviewState GetPreviewStateToShow()
void OnHoverChange(EEditableEntityState state, set< SCR_EditableEntityComponent > entitiesInsert, set< SCR_EditableEntityComponent > entitiesRemove)
SCR_CameraEditorComponent m_CameraManagerBase
vector m_vClickTransformBase[4]
void SetClickPos(vector clickPos)
bool RotateInSlot(SCR_EditableEntityComponent slot, float rotationValue, out vector angles, out bool freeRotation)
bool m_bIsRotatingTowardsCursor
void OnEditorTransformMoveVerticalModifierDown(float value, EActionTrigger reason)
void OnEditorTransformRotationModifierDown(float value, EActionTrigger reason)
InputManager m_InputManagerBase
void RotateTowardsCursor(float tDelta, out vector transform[4])
void MoveHorizontalTowardsCursor(float tDelta, out vector transform[4], out bool canTransform, out EEditorTransformVertical verticalMode)
float GetTraceDis(vector pos, vector dir, float cameraHeight)
float m_fMoveVerticalCoef
void ProcessInput(float tDelta)
void OnEditorTransformSnapToSurface()
EPreviewEntityEditorOperation
vector m_vAnimatedTransform[4]
SCR_CursorEditorUIComponent m_CursorComponentBase
ref TraceParam m_RotationTrace
vector m_vTransformOrigin[4]
bool GetPreviewPosAboveSea(vector cameraPos, vector cursorDir, out vector worldPos, out EEditorTransformVertical verticalMode)
void UpdateDirIndicator(vector previewTransform[4])
SCR_HoverEditableEntityFilter m_HoverFilter
bool GetPreviewPosAboveTerrain(vector cameraPos, vector cursorDir, out vector worldPos, out EEditorTransformVertical verticalMode)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
override void HandlerDeattached(Widget w)
Object holding reference to resource. In destructor release the resource.
static SCR_BaseEditableEntityFilter GetInstance(EEditableEntityState state, bool showError=false)
bool GetTransform(out vector outTransform[4])
Network packet of variables for entity placing and transformation.
static SCR_EditorPreviewParams CreateParamsFromPreview(SCR_PreviewEntityEditorComponent previewManager, SCR_EditableEntityComponent parent=null, bool parentChanged=false)
void SetDirty(bool isDirty)
Contains various scripted 3D math functions.
static bool OrientToTerrain(out vector transform[4], BaseWorld world=null, bool noUnderwater=false, TraceParam trace=null)
static vector GetTerrainNormal(inout vector pos, BaseWorld world=null, bool noUnderwater=false, TraceParam trace=null)
EPhysicsLayerPresets
Enum is filled by C++ by data in project config PhysicsSettings.LayerPresets.
SCR_FieldOfViewSettings Attribute
EEditorTransformVertical
Vertical transformation mode.
enum EPreviewEntityEditorOperation MIN_CURSOR_DIS_TO_TRANSFORM
@ ROTATE
Camera is rotating.
proto native vector Vector(float x, float y, float z)