16 [
Attribute(defvalue:
"1", uiwidget:
UIWidgets.CheckBox,
desc:
"Approximate time (in seconds) for the needle to reach a new direction",
params:
"0.1 10 0.1",
category:
"Compass")]
17 float m_fDirectionChangeTime;
20 float m_fDirectionOvershootPercentage;
23 float m_fShakeFrequency;
26 float m_fShakeOvershootPercentage;
29 float m_fShakeMaximumAngle;
34 [
Attribute(
"{72691366C26BD901}Prefabs/Items/Equipment/Compass/Compass_SY183_Map.et",
desc:
"Compass prefab used for display within 2D map",
category:
"Compass")]
38 bool m_bSignalInit =
false;
39 int m_iSignalNeedle = -1;
40 int m_iSignalShake = -1;
41 int m_iSignalInHand = -1;
42 int m_iSignalInMap = -1;
43 int m_iSignalClose = -1;
54 m_iSignalNeedle = signalMgr.FindSignal(
"Needle");
55 m_iSignalShake = signalMgr.FindSignal(
"Shake");
56 m_iSignalInHand = signalMgr.FindSignal(
"InHand");
57 m_iSignalInMap = signalMgr.FindSignal(
"InMap");
58 m_iSignalClose = signalMgr.FindSignal(
"Close");
60 if (m_iSignalNeedle != -1 && m_iSignalShake != -1 && m_iSignalInHand != -1)
68 static const float E = 2.71828182845904;
109 float northDirection = -
angles[0];
116 float cappedTimeSlice =
Math.Min(timeSlice, 1);
141 float cappedTimeSlice =
Math.Min(timeSlice, 1);
195 m_iMode = EGadgetMode.IN_HAND;
213 if (
System.IsConsoleApp())
236 else if (m_iMode != EGadgetMode.IN_SLOT)
259 float logOvershoot =
Math.Log2(
Math.Max(0.001, overshootPercentage / 100.0)) /
Math.Log2(E);
260 float zeta = -logOvershoot /
Math.Sqrt(
Math.PI *
Math.PI + logOvershoot * logOvershoot);
288 super.ModeSwitch(mode, charOwner);
290 if (mode == EGadgetMode.IN_HAND)
300 super.ModeClear(mode);
302 if (mode == EGadgetMode.IN_HAND)
304 m_bActivated =
false;
312 super.ActivateGadgetUpdate();
316 itemComponent.ActivateOwner(
true);
322 super.DeactivateGadgetUpdate();
326 itemComponent.ActivateOwner(
false);
332 return EGadgetType.COMPASS;
350 if (!super.RplSave(writer))
353 writer.WriteBool(m_bActivated);
361 if (!super.RplLoad(reader))
364 reader.ReadBool(m_bActivated);
381 super.OnPostInit(owner);
386 Print(
string.Format(
"Missing SingalsManagerComponent on compass entity: %1", owner),
LogLevel.WARNING);
ref array< string > angles
SCR_CharacterSoundComponentClass GetComponentData()
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
SCR_ECompassType
Compass type.
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
proto external Managed FindComponent(typename typeName)
proto external vector GetYawPitchRoll()
vector m_vPreviousFrameAngles
void UpdateNeedleShake(float timeSlice)
void CalculateConstants()
Init configurables.
override void ActivateGadgetUpdate()
float m_fShakeDragConstant
override void ModeClear(EGadgetMode mode)
override void OnPostInit(IEntity owner)
float m_fShakeAccelerationConstant
ResourceName GetMapPrefabResource()
override bool RplSave(ScriptBitWriter writer)
vector GetMapCamPosition()
Get compass in map UI camera position configuration.
void UpdateCompassState()
Update state of compass active/inactive.
override bool CanBeRaised()
override EGadgetType GetType()
override void DeactivateGadgetUpdate()
override void ModeSwitch(EGadgetMode mode, IEntity charOwner)
SignalsManagerComponent m_SignalManager
override bool RplLoad(ScriptBitReader reader)
void SetMapMode()
Activate in a map UI mode.
override bool IsUsingADSControls()
float m_fNeedleDragConstant
void DragMapCompass()
MapCompassUI drag activation, simulating movement.
void UpdateNeedleDirection(float timeSlice)
override void Update(float timeSlice)
void Init2DMapCompass()
Init for 2D map compass UI.
float GetDampingRatio(float overshootPercentage)
ref SCR_CompassComponentClass m_PrefabData
float m_fNeedleAccelerationConstant
static float fmod(float dividend, float divisor)
IEntity GetOwner()
Owner entity of the fuel tank.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
SCR_FieldOfViewSettings Attribute