playback_rules.h 1.3 KB

12345678910111213141516171819202122232425262728
  1. #pragma once
  2. #include "ember_movies.h"
  3. namespace sunrise::client::hooks::ember_movies {
  4. // E15D50's normal gameplay choices -> E2EAE0's native movie presentation state.
  5. // Both cinematic states 21h/22h map to native UI category 4 at E2E9F0.
  6. constexpr int movie_ui_state(int requested,bool presenting) noexcept {
  7. return presenting && (requested==0x2B || requested==0x2D || requested==0x2F)
  8. ? 0x22 : requested;
  9. }
  10. constexpr bool can_chain_movies(Owner current,Owner next,Owner firstCompleted,
  11. unsigned previous,unsigned requested,Status state) noexcept {
  12. return current.session && current.generation && current==next && current==firstCompleted
  13. && previous==1 && requested==2 && state==Status::complete;
  14. }
  15. // A queued request and decoder preparation do not prove rendered playback.
  16. struct Playback {
  17. bool seen{};
  18. Status observe(bool exactAsset, int decoderState, bool busy) noexcept {
  19. if (!exactAsset) return seen ? Status::failed : Status::preparing;
  20. if (decoderState==5) seen=true;
  21. if (!busy) {
  22. if (decoderState!=0 && decoderState!=6) return Status::failed;
  23. return seen ? Status::complete : Status::preparing;
  24. }
  25. return seen ? Status::playing : Status::preparing;
  26. }
  27. };
  28. }