123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- class Spotlight extends ItemBase
- {
- private bool m_IsFolded;
- private bool m_EvaluateDeployment;
- SpotlightLight m_Light;
-
- static vector m_LightLocalPosition;
- static vector m_LightLocalOrientation = "0 0 0";
-
- // Spotlight can be extended and compressed
- static const string SEL_REFLECTOR_COMP_U = "reflector";
- static const string SEL_CORD_FOLDED_U = "cord_folded";
- static const string SEL_CORD_PLUGGED_U = "cord_plugged";
- static const string SEL_CORD_PLUGGED_F = "spotlight_folded_cord_plugged";
- static const string SEL_CORD_FOLDED_F = "spotlight_folded_cord_folded";
-
- static const string SEL_INVENTORY = "inventory";
- static const string SEL_PLACING = "placing";
- static const string SEL_GLASS_F = "glass_folded";
- static const string SEL_GLASS_U = "glass_unfolded";
- static const string SEL_REFLECTOR_F = "reflector_folded";
- static const string SEL_REFLECTOR_U = "reflector_unfolded";
-
- static const int ID_GLASS_UNFOLDED = 3;
- static const int ID_REFLECTOR_UNFOLDED = 4;
- static const int ID_GLASS_FOLDED = 5;
- static const int ID_REFLECTOR_FOLDED = 6;
-
- static string LIGHT_OFF_GLASS = "dz\\gear\\camping\\Data\\spotlight_glass.rvmat";
- static string LIGHT_OFF_REFLECTOR = "dz\\gear\\camping\\Data\\spotlight.rvmat";
- static string LIGHT_ON_GLASS = "dz\\gear\\camping\\Data\\spotlight_glass_on.rvmat";
- static string LIGHT_ON_REFLECTOR = "dz\\gear\\camping\\Data\\spotlight_glass_on.rvmat";
-
- //sound
- const string SOUND_TURN_ON = "spotlight_turn_on_SoundSet";
- const string SOUND_TURN_OFF = "spotlight_turn_off_SoundSet";
-
- protected EffectSound m_SoundTurnOn;
- protected EffectSound m_SoundTurnOff;
- //Spotlight, folded and unfolded
- void Spotlight()
- {
- m_EvaluateDeployment = false;
- RegisterNetSyncVariableBool("m_IsFolded");
- }
-
- override bool IsElectricAppliance()
- {
- return true;
- }
-
- override void OnInitEnergy()
- {
- if (GetCompEM().IsPlugged())
- {
- if (!GetHierarchyRoot())
- Unfold();
- else
- Fold(true);
- }
- else
- Fold();
-
- UpdateAllSelections();
- }
-
- override void EOnInit(IEntity other, int extra)
- {
- if (!IsHologram())
- {
- UpdateAllSelections();
- HideSelection(SEL_CORD_FOLDED_F);
- }
- else
- {
- Unfold();
- }
- }
-
- //--- POWER EVENTS
- override void OnSwitchOn()
- {
- super.OnSwitchOn();
-
- SoundTurnOn();
- }
- override void OnSwitchOff()
- {
- super.OnSwitchOff();
-
- SoundTurnOff();
-
- if (m_Light)
- {
- m_Light.FadeOut(0.05);
- m_Light = null;
- }
- }
-
- override void OnWorkStart()
- {
- #ifndef SERVER
- m_Light = SpotlightLight.Cast(ScriptedLightBase.CreateLight(SpotlightLight, "0 0 0"));
- m_Light.AttachOnObject(this, m_LightLocalPosition, m_LightLocalOrientation);
- #endif
-
- UpdateAllSelections();
- }
- override void OnWorkStop()
- {
- #ifndef SERVER
- if (m_Light)
- m_Light.FadeOut();
- #endif
-
- UpdateAllSelections();
- }
-
- // Called when this device is picked up
- override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
- {
- super.OnItemLocationChanged(old_owner, new_owner);
-
- //skips folding of currently deployed spotlight
- if (m_EvaluateDeployment || IsBeingPlaced())
- {
- m_EvaluateDeployment = false;
- if (m_Light)
- {
- m_Light.AttachOnObject(this, m_LightLocalPosition, m_LightLocalOrientation);
- }
- Unfold();
- return;
- }
-
- // When the item is picked up by a player
- PlayerBase player = PlayerBase.Cast(new_owner);
- if (player && player.GetItemInHands() == this)
- {
- Fold(GetCompEM().IsPlugged());
- }
- }
- override void OnIsPlugged(EntityAI source_device)
- {
- Unfold();
- UpdateAllSelections();
- }
-
- protected void UpdateAllSelections()
- {
- bool isPlugged = GetCompEM().IsPlugged();
- PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
- bool isInHands = player && player.GetItemInHands() == this;
- HideAllSelections();
-
- m_LightLocalPosition = GetSelectionPositionLS("beamStart");
-
- if (IsFolded() || isInHands)
- {
- HideSelection(SEL_REFLECTOR_COMP_U);
-
- ShowSelection(SEL_INVENTORY);
- ShowSelection(SEL_GLASS_F);
- ShowSelection(SEL_REFLECTOR_F);
-
- if (isPlugged)
- {
- ShowSelection(SEL_CORD_PLUGGED_F);
- }
- else
- {
- ShowSelection(SEL_CORD_FOLDED_F);
- }
-
- if (!IsHologram())
- {
- if (GetCompEM().IsWorking())
- {
- SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_ON_GLASS);
- SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_ON_REFLECTOR);
- SetObjectMaterial(ID_GLASS_FOLDED, LIGHT_ON_GLASS);
- SetObjectMaterial(ID_REFLECTOR_FOLDED, LIGHT_ON_REFLECTOR);
- }
- else
- {
- SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_OFF_GLASS);
- SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_OFF_REFLECTOR);
- SetObjectMaterial(ID_GLASS_FOLDED, LIGHT_OFF_GLASS);
- SetObjectMaterial(ID_REFLECTOR_FOLDED, LIGHT_OFF_REFLECTOR);
- }
- }
- }
- else
- {
- ShowSelection(SEL_PLACING);
- ShowSelection(SEL_REFLECTOR_U);
- ShowSelection(SEL_GLASS_U);
- ShowSelection(SEL_REFLECTOR_COMP_U);
-
- if (isPlugged)
- {
- ShowSelection(SEL_CORD_PLUGGED_U);
- }
- else
- {
- ShowSelection(SEL_CORD_FOLDED_U);
- }
-
- if (!IsHologram())
- {
- if (GetCompEM().IsWorking())
- {
- SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_ON_GLASS);
- SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_ON_REFLECTOR);
- }
- else
- {
- SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_OFF_GLASS);
- SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_OFF_REFLECTOR);
- }
- }
- }
- }
-
- override void OnIsUnplugged(EntityAI last_energy_source)
- {
- Fold();
- UpdateAllSelections();
- }
- void Fold(bool keep_connected = false)
- {
- m_IsFolded = true;
- if (!keep_connected)
- {
- GetCompEM().SwitchOff();
- GetCompEM().UnplugThis();
- }
- UpdateAllSelections();
- SetSynchDirty();
- }
- void Unfold()
- {
- m_IsFolded = false;
- UpdateAllSelections();
- SetSynchDirty();
- }
- override void OnStoreSave(ParamsWriteContext ctx)
- {
- super.OnStoreSave(ctx);
-
- // Save folded/unfolded state
- ctx.Write(m_IsFolded);
- }
- override bool OnStoreLoad(ParamsReadContext ctx, int version)
- {
- if (!super.OnStoreLoad(ctx, version))
- return false;
-
- // Load folded/unfolded state
- bool b_is_folded = false;
- if (!ctx.Read(b_is_folded))
- b_is_folded = true;
-
- if (b_is_folded)
- {
- Fold();
- }
- else
- {
- Unfold();
- }
- return true;
- }
- override bool CanPutInCargo(EntityAI parent)
- {
- if (!super.CanPutInCargo(parent))
- return false;
-
- return !GetCompEM().IsPlugged();
- }
- override bool CanPutIntoHands(EntityAI parent)
- {
- if (!super.CanPutIntoHands(parent))
- {
- return false;
- }
- // Commented out so Reposition action is possible to execute
- return true;
- }
- bool IsFolded()
- {
- return m_IsFolded;
- }
- //================================================================
- // SOUNDS
- //================================================================
- protected void SoundTurnOn()
- {
- PlaySoundSet(m_SoundTurnOn, SOUND_TURN_ON, 0, 0);
- }
- protected void SoundTurnOff()
- {
- PlaySoundSet(m_SoundTurnOff, SOUND_TURN_OFF, 0, 0);
- }
- //================================================================
- // ADVANCED PLACEMENT
- //================================================================
- override void OnPlacementStarted(Man player)
- {
- super.OnPlacementStarted(player);
-
- array<string> selections = {
- SEL_CORD_PLUGGED_F,
- SEL_CORD_FOLDED_F
- };
-
- PlayerBase playerPB = PlayerBase.Cast(player);
- foreach (string selection : selections)
- {
- if (GetGame().IsMultiplayer() && GetGame().IsServer())
- playerPB.GetHologramServer().SetSelectionToRefresh(selection);
- else
- playerPB.GetHologramLocal().SetSelectionToRefresh(selection);
- }
- }
-
- override void OnPlacementComplete(Man player, vector position = "0 0 0", vector orientation = "0 0 0")
- {
- super.OnPlacementComplete(player, position, orientation);
-
- Unfold();
- m_EvaluateDeployment = true;
- }
-
- override void OnPlacementCancelled(Man player)
- {
- super.OnPlacementCancelled(player);
-
- Fold(true);
- }
-
- override bool IsDeployable()
- {
- return true;
- }
-
- override string GetDeploySoundset()
- {
- return "placeSpotlight_SoundSet";
- }
-
- override string GetLoopDeploySoundset()
- {
- return "spotlight_deploy_SoundSet";
- }
-
- override int GetViewIndex()
- {
- if (MemoryPointExists("invView2") && !m_IsFolded)
- {
- return 1;
- }
- return 0;
- }
-
- override void SetActions()
- {
- super.SetActions();
- RemoveAction(ActionTakeItemToHands);
-
- AddAction(ActionClapBearTrapWithThisItem);
- AddAction(ActionPlugIn);
- AddAction(ActionTogglePlaceObject);
- AddAction(ActionUnplugThisByCord);
- AddAction(ActionTurnOnSpotlight);
- AddAction(ActionTurnOffSpotlight);
- AddAction(ActionRepositionPluggedItem);
- AddAction(ActionDeployObject);
- AddAction(ActionTakeItemToHands);
- }
-
- //!DEPRECATED
- protected ref EffectSound m_DeployLoopSound; //DEPRECATED in favor of m_DeployLoopSoundEx
-
- void PlayDeployLoopSound(); //!DEPRECATED
- void StopDeployLoopSound(); //!DEPRECATED
- }
|