1//************************************ bs::framework - Copyright 2018 Marko Pintera **************************************//
2//*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********//
3#pragma once
4
5#include "Prerequisites/BsPrerequisitesUtil.h"
6
7namespace bs
8{
9 /** @addtogroup Math
10 * @{
11 */
12
13 /** A four dimensional vector with integer coordinates. */
14 struct BS_SCRIPT_EXPORT(m:Math,pl:true) Vector4I
15 {
16 INT32 x = 0;
17 INT32 y = 0;
18 INT32 z = 0;
19 INT32 w = 0;
20
21 constexpr Vector4I() = default;
22
23 constexpr Vector4I(INT32 x, INT32 y, INT32 z, INT32 w)
24 :x(x), y(y), z(z), w(w)
25 { }
26
27 INT32 operator[] (size_t i) const
28 {
29 assert(i < 4);
30
31 switch (i)
32 {
33 case 0: return x;
34 case 1: return y;
35 case 2: return z;
36 case 3: return w;
37 default: return 0;
38 }
39 }
40
41 INT32& operator[] (size_t i)
42 {
43 assert(i < 4);
44
45 switch (i)
46 {
47 case 0: return x;
48 case 1: return y;
49 case 2: return z;
50 case 3: return w;
51 default: return x;
52 }
53 }
54
55 bool operator== (const Vector4I& rhs) const
56 {
57 return x == rhs.x && y == rhs.y && z == rhs.z && w == rhs.w;
58 }
59
60 bool operator!= (const Vector4I& rhs) const
61 {
62 return !operator==(rhs);
63 }
64 };
65
66 /** @} */
67
68 BS_ALLOW_MEMCPY_SERIALIZATION(Vector4I)
69}
70