File: AnimSetMapping.h

package info (click to toggle)
jazz2-native 3.5.0-2
  • links: PTS, VCS
  • area: contrib
  • in suites: forky, sid
  • size: 16,912 kB
  • sloc: cpp: 172,557; xml: 113; python: 36; makefile: 5; sh: 2
file content (69 lines) | stat: -rw-r--r-- 2,052 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma once

#include "../../Main.h"
#include "JJ2Version.h"

#include "../../nCine/Base/HashMap.h"

#include <Containers/Pair.h>
#include <Containers/String.h>
#include <Containers/StringView.h>

using namespace Death::Containers;
using namespace Death::Containers::Literals;
using namespace nCine;

namespace Jazz2::Compatibility
{
	/** @brief Default palette for original animation */
	enum class JJ2DefaultPalette {
		Sprite,
		Menu
	};

	/** @brief Maps indices from original data file to organized entries */
	class AnimSetMapping
	{
	public:
		/** @{ @name Constants */

		/** @brief Specifies that the entry should be discarded */
		static constexpr char Discard[] = ":discard";

		/** @} */

		/** @brief Mapped entry */
		struct Entry {
			String Category;
			String Name;
			std::uint32_t Ordinal;

			JJ2DefaultPalette Palette;
			bool SkipNormalMap;
			bool AllowRealtimePalette;
		};

		Entry* Get(std::uint32_t set, std::uint32_t item);
		Entry* GetByOrdinal(std::uint32_t index);

		/** @brief Returns mapping of animations for the specified version */
		static AnimSetMapping GetAnimMapping(JJ2Version version);
		/** @brief Returns mapping of sounds for the specified version */
		static AnimSetMapping GetSampleMapping(JJ2Version version);

	private:
		JJ2Version _version;
		HashMap<std::uint32_t, Entry> _entries;
		std::uint32_t _currentItem;
		std::uint32_t _currentSet;
		std::uint32_t _currentOrdinal;

		AnimSetMapping(JJ2Version version);

		void DiscardItems(std::uint32_t advanceBy, JJ2Version appliesTo = JJ2Version::All);
		void SkipItems(std::uint32_t advanceBy = 1);
		void NextSet(std::uint32_t advanceBy = 1, JJ2Version appliesTo = JJ2Version::All);
		void Add(JJ2Version appliesTo, StringView category, StringView name, JJ2DefaultPalette palette = JJ2DefaultPalette::Sprite, bool skipNormalMap = false, bool allowRealtimePalette = false);
		void Add(StringView category, StringView name, JJ2DefaultPalette palette = JJ2DefaultPalette::Sprite, bool skipNormalMap = false, bool allowRealtimePalette = false);
	};
}