MCPcopy Create free account
hub / github.com/OneLoneCoder/olcPixelGameEngine / Update

Method Update

examples/TEST_Camera2D.cpp:194–245  ·  view source on GitHub ↗

Update camera, animating if necessary, obeying world boundary rules returns true if target is visible

Source from the content-addressed store, hash-verified

192 // Update camera, animating if necessary, obeying world boundary rules
193 // returns true if target is visible
194 inline virtual bool Update(const float fElapsedTime)
195 {
196 switch (m_nMode)
197 {
198 case Mode::Simple:
199 {
200 m_vPosition = GetTarget();
201 }
202 break;
203
204 case Mode::EdgeMove:
205 {
206 olc::vf2d vOverlap = GetTarget() - m_vPosition;
207 if (vOverlap.x > m_vEdgeTriggerDistance.x) m_vPosition.x += vOverlap.x - m_vEdgeTriggerDistance.x;
208 if (vOverlap.x < -m_vEdgeTriggerDistance.x) m_vPosition.x += vOverlap.x + m_vEdgeTriggerDistance.x;
209 if (vOverlap.y > m_vEdgeTriggerDistance.y) m_vPosition.y += vOverlap.y - m_vEdgeTriggerDistance.y;
210 if (vOverlap.y < -m_vEdgeTriggerDistance.y) m_vPosition.y += vOverlap.y + m_vEdgeTriggerDistance.y;
211 }
212 break;
213
214 case Mode::LazyFollow:
215 {
216 m_vPosition += (GetTarget() - m_vPosition) * m_fLazyFollowRate * fElapsedTime;
217 }
218 break;
219
220 case Mode::FixedScreens:
221 {
222 m_vPosition = olc::vf2d(olc::vi2d(GetTarget() / m_vScreenSize) * olc::vi2d(m_vScreenSize)) + (m_vViewSize * 0.5f);
223 }
224 break;
225
226 case Mode::SlideScreens:
227 {
228 olc::vf2d vScreen = olc::vf2d(olc::vi2d(GetTarget() / m_vScreenSize) * olc::vi2d(m_vScreenSize)) + (m_vViewSize * 0.5f);
229 m_vPosition += (vScreen - m_vPosition) * m_fLazyFollowRate * 2.0f * fElapsedTime;
230 }
231 break;
232 }
233
234 // Make camera target the middle of the view
235 m_vViewPos = m_vPosition - (m_vViewSize * 0.5f);
236
237 // Clamp to World Boundary (if in place)
238 if (m_bWorldBoundary)
239 {
240 m_vViewPos = m_vViewPos.max(m_vWorldBoundaryPos).min(m_vWorldBoundaryPos + m_vWorldBoundarySize - m_vViewSize);
241 }
242
243 return GetTarget().x >= m_vViewPos.x && GetTarget().x < (m_vViewPos.x + m_vViewSize.x) &&
244 GetTarget().y >= m_vViewPos.y && GetTarget().y < (m_vViewPos.y + m_vViewSize.y);
245 }
246
247 protected:
248 // Position of camera focus point in the world

Callers 2

OnUserUpdateMethod · 0.45
OnUserCreateMethod · 0.45

Calls 2

minMethod · 0.45
maxMethod · 0.45

Tested by

no test coverage detected