123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- class DayZPlayerImplementSwimming
- {
- DayZPlayer m_pPlayer;
- SHumanCommandSwimSettings m_pSettings;
- bool m_bWasSwimming = false; // important for shallow water, so we know if we should get back into swimming when other fullbody command (like damage) finished
- void DayZPlayerImplementSwimming(DayZPlayer pPlayer)
- {
- m_pPlayer = pPlayer;
- m_pSettings = pPlayer.GetDayZPlayerType().CommandSwimSettingsW();
- }
- float GetWaterDepth()
- {
- vector pp = m_pPlayer.PhysicsGetPositionWS();
- vector wl = HumanCommandSwim.WaterLevelCheck(m_pPlayer, pp);
- return wl[0];
- }
- float GetCharacterDepth()
- {
- vector pp = m_pPlayer.PhysicsGetPositionWS();
- vector wl = HumanCommandSwim.WaterLevelCheck(m_pPlayer, pp);
- return wl[1];
- }
- bool CheckSwimmingStart(out vector waterLevel)
- {
- return DayZPlayerUtils.CheckWaterLevel(m_pPlayer,waterLevel) == EWaterLevels.LEVEL_SWIM_START;
- }
- //! ha
- bool HandleSwimming(int pCurrentCommandID, HumanCommandMove pCMove, HumanMovementState pState)
- {
- if ( pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS || pCurrentCommandID == DayZPlayerConstants.COMMANDID_DAMAGE )
- return false;
-
- m_bWasSwimming = false;
- //! get water level
- if (pCurrentCommandID != DayZPlayerConstants.COMMANDID_SWIM)
- {
- vector wl;
- if (CheckSwimmingStart(wl))
- {
- m_pPlayer.StartCommand_Swim();
- m_bWasSwimming = true;
- return true;
- }
-
- //! now movement
- if ((pCurrentCommandID == DayZPlayerConstants.COMMANDID_MOVE) && (pCMove != null))
- {
- pCMove.SetCurrentWaterLevel(wl[1]);
- m_pPlayer.SetCurrentWaterLevel(wl[1]);
-
- if (wl[1] > m_pSettings.m_fToErectLevel && pState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_ERECT && pState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_RAISEDERECT )
- {
- if ( DayZPlayerUtils.PlayerCanChangeStance(m_pPlayer, DayZPlayerConstants.STANCEIDX_ERECT) )
- {
- pCMove.ForceStanceUp(DayZPlayerConstants.STANCEIDX_ERECT);
- }
- else
- {
- m_pPlayer.StartCommand_Swim();
- m_bWasSwimming = true;
- return true;
- }
- }
- else if (wl[1] > m_pSettings.m_fToCrouchLevel && (pState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_PRONE || pState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE))
- {
- if ( DayZPlayerUtils.PlayerCanChangeStance(m_pPlayer, DayZPlayerConstants.STANCEIDX_CROUCH) )
- {
- pCMove.ForceStanceUp(DayZPlayerConstants.STANCEIDX_CROUCH);
- }
- else
- {
- m_pPlayer.StartCommand_Swim();
- m_bWasSwimming = true;
- return true;
- }
- }
- }
- // not handled
- return false;
- }
- else // if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_SWIM)
- {
- if (GetWaterDepth() < m_pSettings.m_fWaterLevelOut)
- {
- if (DayZPlayerUtils.PlayerCanChangeStance(m_pPlayer, DayZPlayerConstants.STANCEIDX_ERECT, true))
- {
- HumanCommandSwim hcs = m_pPlayer.GetCommand_Swim();
- hcs.StopSwimming();
- m_bWasSwimming = false;
- return true;
- }
- }
-
- //! handled !
- m_bWasSwimming = true;
- return true;
- }
- }
- }
|