TrackViewEventNode.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include "EditorDefs.h"
  9. #include "TrackViewEventNode.h"
  10. // CryCommon
  11. #include <CryCommon/Maestro/Types/AnimParamType.h>
  12. CTrackViewEventNode::CTrackViewEventNode(IAnimSequence* pSequence, IAnimNode* pAnimNode, CTrackViewNode* pParentNode)
  13. : CTrackViewAnimNode(pSequence, pAnimNode, pParentNode)
  14. {
  15. if (GetAnimNode() && GetAnimNode()->GetSequence())
  16. {
  17. GetAnimNode()->GetSequence()->AddTrackEventListener(this);
  18. }
  19. }
  20. CTrackViewEventNode::~CTrackViewEventNode()
  21. {
  22. if (GetAnimNode() && GetAnimNode()->GetSequence())
  23. {
  24. GetAnimNode()->GetSequence()->RemoveTrackEventListener(this);
  25. }
  26. }
  27. void CTrackViewEventNode::OnTrackEvent([[maybe_unused]] IAnimSequence* pSequence, int reason, const char* event, void* pUserData)
  28. {
  29. ITrackEventListener::ETrackEventReason eReason = static_cast<ITrackEventListener::ETrackEventReason>(reason);
  30. switch (eReason)
  31. {
  32. case ITrackEventListener::eTrackEventReason_Renamed:
  33. RenameTrackEvent(event, static_cast<const char*>(pUserData));
  34. break;
  35. case ITrackEventListener::eTrackEventReason_Removed:
  36. RemoveTrackEvent(event);
  37. default:
  38. // do nothing for events we're not interested in
  39. break;
  40. }
  41. }
  42. void CTrackViewEventNode::RenameTrackEvent(const char* fromName, const char* toName)
  43. {
  44. CTrackViewTrackBundle eventTracks = GetTracksByParam(AnimParamType::TrackEvent);
  45. const uint numEventTracks = eventTracks.GetCount();
  46. for (uint i = 0; i < numEventTracks; ++i)
  47. {
  48. CTrackViewTrack* eventTrack = eventTracks.GetTrack(i);
  49. if (eventTrack)
  50. {
  51. // Go through all keys searching for match to the fromName and re-set these keys to use the toName
  52. CTrackViewKeyBundle allKeys = eventTrack->GetAllKeys();
  53. const uint numKeys = allKeys.GetKeyCount();
  54. for (uint k = 0; k < numKeys; ++k)
  55. {
  56. CTrackViewKeyHandle keyHandle = allKeys.GetKey(k);
  57. IEventKey eventKey;
  58. keyHandle.GetKey(&eventKey);
  59. if (strcmp(eventKey.event.c_str(), fromName) == 0)
  60. {
  61. // we have a match - re-set the eventKey with the toName
  62. eventKey.event = toName;
  63. keyHandle.SetKey(&eventKey);
  64. }
  65. }
  66. }
  67. }
  68. }
  69. void CTrackViewEventNode::RemoveTrackEvent(const char* removedEventName)
  70. {
  71. // rename the removedEventName keys to the empty string, which represents an unset event key
  72. RenameTrackEvent(removedEventName, "");
  73. }