Files
o3de/Code/CryEngine/Cry3DEngine/TimeOfDay.h
T
2021-03-08 14:30:57 -08:00

130 lines
6.6 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
#ifndef CRYINCLUDE_CRY3DENGINE_TIMEOFDAY_H
#define CRYINCLUDE_CRY3DENGINE_TIMEOFDAY_H
#pragma once
#include <ITimeOfDay.h>
class CEnvironmentPreset;
//////////////////////////////////////////////////////////////////////////
// ITimeOfDay interface implementation.
//////////////////////////////////////////////////////////////////////////
class CTimeOfDay
: public ITimeOfDay
{
public:
CTimeOfDay();
~CTimeOfDay();
//////////////////////////////////////////////////////////////////////////
// ITimeOfDay
//////////////////////////////////////////////////////////////////////////
int GetPresetCount() const override { return m_presets.size(); }
bool GetPresetsInfos([[maybe_unused]] SPresetInfo* resultArray, [[maybe_unused]] unsigned int arraySize) const override { return false; }
bool SetCurrentPreset([[maybe_unused]] const char* szPresetName) override { return false; };
bool AddNewPreset([[maybe_unused]] const char* szPresetName) override { return false; };
bool RemovePreset([[maybe_unused]] const char* szPresetName) override { return false; };
bool SavePreset([[maybe_unused]] const char* szPresetName) const override { return false; };
bool LoadPreset([[maybe_unused]] const char* szFilePath) override { return false; };
void ResetPreset([[maybe_unused]] const char* szPresetName) override { };
bool ImportPreset([[maybe_unused]] const char* szPresetName, [[maybe_unused]] const char* szFilePath) override { return false; };
bool ExportPreset([[maybe_unused]] const char* szPresetName, [[maybe_unused]] const char* szFilePath) const override { return false; };
int GetVariableCount() const override { return ITimeOfDay::PARAM_TOTAL; };
bool GetVariableInfo(int nIndex, SVariableInfo &varInfo) const override;
void SetVariableValue(int nIndex, float fValue[3]) override;
bool InterpolateVarInRange([[maybe_unused]] int nIndex, [[maybe_unused]] float fMin, [[maybe_unused]] float fMax, [[maybe_unused]] unsigned int nCount, [[maybe_unused]] Vec3* resultArray) const override { return false; };
uint GetSplineKeysCount([[maybe_unused]] int nIndex, [[maybe_unused]] int nSpline) const override { return 0; };
bool GetSplineKeysForVar([[maybe_unused]] int nIndex, [[maybe_unused]] int nSpline, [[maybe_unused]] SBezierKey* keysArray, [[maybe_unused]] unsigned int keysArraySize) const override { return false; };
bool SetSplineKeysForVar([[maybe_unused]] int nIndex, [[maybe_unused]] int nSpline, [[maybe_unused]] const SBezierKey* keysArray, [[maybe_unused]] unsigned int keysArraySize) override { return false; };
bool UpdateSplineKeyForVar([[maybe_unused]] int nIndex, [[maybe_unused]] int nSpline, [[maybe_unused]] float fTime, [[maybe_unused]] float newValue) override { return false; };
void ResetVariables() override;
// Time of day is specified in hours.
void SetTime(float fHour, bool bForceUpdate = false, bool bEnvUpdate = true) override;
void SetSunPos(float longitude, float latitude) override;
float GetSunLatitude() override { return m_sunRotationLatitude; }
float GetSunLongitude() override { return m_sunRotationLongitude; }
float GetTime() override { return m_fTime; };
void SetPaused(bool paused) override { m_bPaused = paused; }
void SetAdvancedInfo(const SAdvancedInfo &advInfo) override;
void GetAdvancedInfo(SAdvancedInfo &advInfo) override;
float GetHDRMultiplier() const { return m_fHDRMultiplier; }
void Update(bool bInterpolate = true, bool bForceUpdate = false, bool bForceEnvUpdate = true) override;
void SetUpdateCallback(ITimeOfDayUpdateCallback* pCallback) override;
void Serialize(XmlNodeRef& node, bool bLoading) override;
void Serialize(TSerialize ser) override;
void SetTimer(ITimer * pTimer) override;
void NetSerialize(TSerialize ser, float lag, uint32 flags) override;
void Tick() override;
void SetEnvironmentSettings(const SEnvironmentInfo& envInfo) override;
void LerpWith(const ITimeOfDay& other, float lerpValue, ITimeOfDay& output) const override;
//////////////////////////////////////////////////////////////////////////
void BeginEditMode();
void EndEditMode();
private:
CTimeOfDay(const CTimeOfDay&);
CTimeOfDay(const CTimeOfDay&&);
CTimeOfDay& operator=(const CTimeOfDay&);
CTimeOfDay& operator=(const CTimeOfDay&&);
SVariableInfo& GetVar(ETimeOfDayParamID id);
void UpdateEnvLighting(bool forceUpdate);
void MigrateLegacyData(bool bSunIntensity, const XmlNodeRef& node);
void LoadValueFromXmlNode(ETimeOfDayParamID destId, const XmlNodeRef& varNode);
private:
typedef std::map<string, CEnvironmentPreset> TPresetsSet;
TPresetsSet m_presets;
CEnvironmentPreset* m_pCurrentPreset;
CEnvironmentPreset* m_defaultPreset;
SVariableInfo m_vars[ITimeOfDay::PARAM_TOTAL];
std::map<const char*, int, stl::less_strcmp<const char*> > m_varsMap;
float m_fTime;
float m_fEditorTime;
float m_sunRotationLatitude;
float m_sunRotationLongitude;
bool m_bEditMode;
bool m_bPaused;
bool m_bSunLinkedToTOD;
SAdvancedInfo m_advancedInfo;
ITimer* m_pTimer;
float m_fHDRMultiplier;
ICVar* m_pTimeOfDaySpeedCVar;
ITimeOfDayUpdateCallback* m_pUpdateCallback;
};
#endif // CRYINCLUDE_CRY3DENGINE_TIMEOFDAY_H