Line data Source code
1 : /* Copyright (C) 2009 Wildfire Games.
2 : * This file is part of 0 A.D.
3 : *
4 : * 0 A.D. is free software: you can redistribute it and/or modify
5 : * it under the terms of the GNU General Public License as published by
6 : * the Free Software Foundation, either version 2 of the License, or
7 : * (at your option) any later version.
8 : *
9 : * 0 A.D. is distributed in the hope that it will be useful,
10 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 : * GNU General Public License for more details.
13 : *
14 : * You should have received a copy of the GNU General Public License
15 : * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16 : */
17 :
18 : #ifndef INCLUDED_BLENDSHAPES
19 : #define INCLUDED_BLENDSHAPES
20 :
21 : struct BlendShape4
22 : {
23 : public:
24 0 : BlendShape4() {}
25 4 : BlendShape4(int a,int b,int c,int d) {
26 4 : m_Data[0]=a; m_Data[1]=b; m_Data[2]=c; m_Data[3]=d;
27 4 : }
28 :
29 0 : int& operator[](int index) { return m_Data[index]; }
30 : const int& operator[](int index) const { return m_Data[index]; }
31 :
32 0 : bool operator==(const BlendShape4& lhs) const {
33 0 : return memcmp(m_Data,lhs.m_Data,sizeof(BlendShape4))==0;
34 : }
35 :
36 0 : void Rotate90(BlendShape4& dst) const {
37 0 : dst[0]=m_Data[3];
38 0 : dst[1]=m_Data[0];
39 0 : dst[2]=m_Data[1];
40 0 : dst[3]=m_Data[2];
41 0 : }
42 :
43 0 : void Rotate180(BlendShape4& dst) const {
44 0 : dst[0]=m_Data[2];
45 0 : dst[1]=m_Data[3];
46 0 : dst[2]=m_Data[0];
47 0 : dst[3]=m_Data[1];
48 0 : }
49 :
50 0 : void Rotate270(BlendShape4& dst) const {
51 0 : dst[0]=m_Data[1];
52 0 : dst[1]=m_Data[2];
53 0 : dst[2]=m_Data[3];
54 0 : dst[3]=m_Data[0];
55 0 : }
56 :
57 0 : void FlipU(BlendShape4& dst) const {
58 0 : dst[0]=m_Data[2];
59 0 : dst[1]=m_Data[1];
60 0 : dst[2]=m_Data[0];
61 0 : dst[3]=m_Data[3];
62 0 : }
63 :
64 0 : void FlipV(BlendShape4& dst) const {
65 0 : dst[0]=m_Data[0];
66 0 : dst[1]=m_Data[3];
67 0 : dst[2]=m_Data[2];
68 0 : dst[3]=m_Data[1];
69 0 : }
70 :
71 : private:
72 : int m_Data[4];
73 : };
74 :
75 :
76 : struct BlendShape8
77 : {
78 : public:
79 0 : BlendShape8() {}
80 44 : BlendShape8(int a,int b,int c,int d,int e,int f,int g,int h) {
81 44 : m_Data[0]=a; m_Data[1]=b; m_Data[2]=c; m_Data[3]=d;
82 44 : m_Data[4]=e; m_Data[5]=f; m_Data[6]=g; m_Data[7]=h;
83 44 : }
84 :
85 0 : int& operator[](size_t index) { return m_Data[index]; }
86 : const int& operator[](size_t index) const { return m_Data[index]; }
87 :
88 0 : bool operator==(const BlendShape8& lhs) const {
89 0 : return memcmp(m_Data,lhs.m_Data,sizeof(BlendShape8))==0;
90 : }
91 :
92 0 : void Rotate90(BlendShape8& dst) const {
93 0 : dst[0]=m_Data[6];
94 0 : dst[1]=m_Data[7];
95 0 : dst[2]=m_Data[0];
96 0 : dst[3]=m_Data[1];
97 0 : dst[4]=m_Data[2];
98 0 : dst[5]=m_Data[3];
99 0 : dst[6]=m_Data[4];
100 0 : dst[7]=m_Data[5];
101 0 : }
102 :
103 0 : void Rotate180(BlendShape8& dst) const {
104 0 : dst[0]=m_Data[4];
105 0 : dst[1]=m_Data[5];
106 0 : dst[2]=m_Data[6];
107 0 : dst[3]=m_Data[7];
108 0 : dst[4]=m_Data[0];
109 0 : dst[5]=m_Data[1];
110 0 : dst[6]=m_Data[2];
111 0 : dst[7]=m_Data[3];
112 0 : }
113 :
114 0 : void Rotate270(BlendShape8& dst) const {
115 0 : dst[0]=m_Data[2];
116 0 : dst[1]=m_Data[3];
117 0 : dst[2]=m_Data[4];
118 0 : dst[3]=m_Data[5];
119 0 : dst[4]=m_Data[6];
120 0 : dst[5]=m_Data[7];
121 0 : dst[6]=m_Data[0];
122 0 : dst[7]=m_Data[1];
123 0 : }
124 :
125 0 : void FlipU(BlendShape8& dst) const {
126 0 : dst[0]=m_Data[4];
127 0 : dst[1]=m_Data[3];
128 0 : dst[2]=m_Data[2];
129 0 : dst[3]=m_Data[1];
130 0 : dst[4]=m_Data[0];
131 0 : dst[5]=m_Data[7];
132 0 : dst[6]=m_Data[6];
133 0 : dst[7]=m_Data[5];
134 0 : }
135 :
136 0 : void FlipV(BlendShape8& dst) const {
137 0 : dst[0]=m_Data[0];
138 0 : dst[1]=m_Data[7];
139 0 : dst[2]=m_Data[6];
140 0 : dst[3]=m_Data[5];
141 0 : dst[4]=m_Data[4];
142 0 : dst[5]=m_Data[3];
143 0 : dst[6]=m_Data[2];
144 0 : dst[7]=m_Data[1];
145 0 : }
146 :
147 : private:
148 : int m_Data[8];
149 : };
150 :
151 : #endif
|