MCPcopy Create free account
hub / github.com/ddnet/ddnet / RequestLoad

Method RequestLoad

src/game/client/components/skins.cpp:74–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72static_assert(MIN_REQUESTED_TIME_FOR_PENDING < MIN_UNLOAD_TIME_PENDING, "Unloading pending skins must take longer than adding more pending skins");
73
74void CSkins::CSkinContainer::RequestLoad()
75{
76 if(m_AlwaysLoaded)
77 {
78 return;
79 }
80
81 // Delay loading skins a bit after the load has been requested to avoid loading a lot of skins
82 // when quickly scrolling through lists or if a player with a new skin quickly joins and leaves.
83 if(m_State == EState::UNLOADED)
84 {
85 const std::chrono::nanoseconds Now = time_get_nanoseconds();
86 if(!m_FirstLoadRequest.has_value() ||
87 !m_LastLoadRequest.has_value() ||
88 Now - m_LastLoadRequest.value() > MAX_REQUESTED_TIME_FOR_PENDING)
89 {
90 m_FirstLoadRequest = Now;
91 m_LastLoadRequest = m_FirstLoadRequest;
92 }
93 else if(Now - m_FirstLoadRequest.value() > MIN_REQUESTED_TIME_FOR_PENDING)
94 {
95 m_State = EState::PENDING;
96 }
97 }
98 else if(m_State == EState::PENDING ||
99 m_State == EState::LOADING ||
100 m_State == EState::LOADED)
101 {
102 m_LastLoadRequest = time_get_nanoseconds();
103 }
104
105 if(m_State == EState::PENDING ||
106 m_State == EState::LOADED)
107 {
108 if(m_UsageEntryIterator.has_value())
109 {
110 m_pSkins->m_SkinsUsageList.erase(m_UsageEntryIterator.value());
111 }
112 m_pSkins->m_SkinsUsageList.emplace_front(Name());
113 m_UsageEntryIterator = m_pSkins->m_SkinsUsageList.begin();
114 }
115}
116
117CSkins::CSkinContainer::EState CSkins::CSkinContainer::DetermineInitialState() const
118{

Callers 2

FindContainerImplMethod · 0.80
RenderSettingsTeeMethod · 0.80

Calls 2

time_get_nanosecondsFunction · 0.85
beginMethod · 0.80

Tested by

no test coverage detected