Compare commits

...

5 Commits

Author SHA1 Message Date
6e1ef6d668 Normal, height and material maps generating 2018-06-08 15:45:34 +05:00
efdd4fdee4 Fix building and cleanup 2018-06-05 04:40:11 +05:00
915c031f52 Working with parallax test 2017-12-11 12:30:51 +03:00
f2e238ed5e Making antialiasing test 2017-12-04 14:14:14 +03:00
Vladislav Khorev Dev
ed4a0178da SSAA 4X demo 2017-12-02 15:25:02 +05:00
91 changed files with 33978 additions and 1067 deletions

1
.gitignore vendored
View File

@ -70,6 +70,7 @@ iOSInjectionProject/
/windows/DoubleHitBalls-win/DoubleHitBalls-win/Debug
/windows/DoubleHitBalls-win/DoubleHitBalls-win/Release
/windows/DoubleHitBalls-win/.vs/
/windows/DoubleHitBalls-win/**/*.user
/windows/DoubleHitBalls-win/DoubleHitBalls-win/log.txt
/windows/DoubleHitBalls-win/DoubleHitBalls-win/progress.txt
/windows/DoubleHitBalls-win/DoubleHitBalls-win/resources

BIN
assets/5f.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
assets/6f.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
assets/7f.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

19
assets/SSAA_4X.frag Executable file
View File

@ -0,0 +1,19 @@
precision mediump float;
uniform sampler2D Texture;
uniform vec2 samplesOffset[4];
varying vec2 texCoord;
void main()
{
vec3 color = vec3(0, 0, 0);
for (int i = 0; i < 4; ++i)
{
color += texture2D(Texture, texCoord + samplesOffset[i]).rgb;
}
color /= 4;
//gl_FragColor = vec4(texture2D(Texture, texCoord ), 1.0);
gl_FragColor = vec4(color, 1.0);
}

11
assets/SSAA_4X.vertex Executable file
View File

@ -0,0 +1,11 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
varying vec2 texCoord;
uniform mat4 ProjectionMatrix;
void main()
{
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
texCoord = vTexCoord;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 759 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1022 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

7
assets/color_fragment.txt Executable file
View File

@ -0,0 +1,7 @@
precision mediump float;
varying vec4 color;
void main()
{
gl_FragColor = color;
}

11
assets/color_vertex.txt Executable file
View File

@ -0,0 +1,11 @@
attribute vec3 vPosition;
attribute vec4 vColor;
varying vec4 color;
uniform mat4 ProjectionMatrix;
void main()
{
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
color = vColor;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
assets/fabric-height-map.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

BIN
assets/fabric-normal-map.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 KiB

BIN
assets/fabric-texture.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,33 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
255, 0, 0, 255
255, 40, 40, 255
255, 128, 128, 255
Colormap
111111111111
111111111111
111111111111
222222222222
222222222222
222222222222
222222222222
333333333333
333333333333
333333333333
000000000000
000000000000
000000000000
Brickmap
111111111111
111111111111
111111111111
000000000000
111111111111
111111111111
000000000000
111111111111
111111111111
000000000000
000000000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
255, 0, 190, 255
255, 0, 255, 255
Colormap
002222222200
002222222200
000222222000
000022220000
111002200111
111100001111
011110011110
001111111100
000111111000
000011110000
000001100000
000000000000
000000000000
Brickmap
002111111200
002211112200
000221122000
000022220000
111002200111
221100001122
022110011220
002211112200
000221122000
000022220000
000002200000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 255, 255, 255
0, 0, 0, 255
0, 237, 255, 255
0, 144, 255, 255
0, 59, 255, 255
Colormap
333333333333
333333333333
333333333333
000000000000
222220022222
222220022222
222220022222
000000000000
111110011111
111110011111
111110011111
000000000000
000000000000
Brickmap
111111111111
111111111111
222222222222
000000000000
111110011111
111110011111
222220022222
000000000000
111110011111
111110011111
333330033333
000000000000
000000000000

View File

@ -1,32 +0,0 @@
255, 128, 128, 255
0, 0, 0, 255
159, 240, 255, 255
0, 148, 255, 255
Colormap
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
Brickmap
000311113000
000311113000
333311113333
111111111111
111111111111
222221122222
333321123333
000321123000
000321123000
000322223000
000333333000
000000000000
000000000000

Binary file not shown.

View File

@ -1,32 +0,0 @@
255, 0, 0, 255
0, 0, 0, 255
0, 255, 255, 255
7, 255, 189, 255
Colormap
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
000000000000
Brickmap
111011110111
111011110111
222022220222
000000000000
111011110111
222022220222
000000000000
111000000111
222000000222
000000000000
222222222222
000000000000
000000000000

View File

@ -1,33 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
0, 151, 113, 255
7, 255, 189, 255
128, 143, 128, 255
Colormap
000000000000
033333333330
031111111130
031111111130
033333333330
000000000000
033330033330
032230032230
032230032230
033330033330
000000000000
000000000000
000000000000
Brickmap
000000000000
022222222220
021111111120
021111111120
022222222220
000000000000
022220022220
021120021120
021120021120
022220022220
000000000000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 0, 0, 255
0, 0, 0, 255
101, 97, 255, 255
5, 186, 255, 255
105, 201, 255, 255
Colormap
000000333333
000003333333
000033311111
333333133333
333331333333
333313333333
111133311111
333333100000
333331000000
333310000000
111100000000
000000000000
000000000000
Brickmap
000000111111
000001111111
000011133333
111111311111
111113111111
111131111111
333311133333
111111300000
111113000000
111130000000
333300000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
255, 0, 255, 255
0, 0, 0, 255
163, 255, 198, 255
0, 255, 182, 255
Colormap
000022220000
000222222000
000022220000
111000000111
111100001111
111110011111
111111111111
111111111111
111111111111
111111111111
000000000000
000000000000
000000000000
Brickmap
000033330000
000311113000
000033330000
111000000111
111100001111
111110011111
111111111111
111111111111
111111111111
222222222222
000000000000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 255, 255, 255
0, 0, 0, 255
255, 200, 5, 255
255, 153, 0, 255
255, 97, 0, 255
Colormap
000000000000
000333000333
000333000333
000333000333
222000222000
222000222000
222000222000
000111000111
000111000111
000111000111
000000000000
000000000000
000000000000
Brickmap
000000000000
000222000222
000212000212
000222000222
222000222000
212000212000
222000222000
000222000222
000212000212
000222000222
000000000000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 255, 0, 255
0, 0, 0, 255
230, 230, 230, 255
195, 195, 195, 255
150, 150, 150, 255
Colormap
333333333333
030030030030
030030030030
030030030030
222222222222
020020020020
020020020020
010010010010
010010010010
020020020020
000000000000
000000000000
000000000000
Brickmap
111111111111
010010010010
010010010010
010010010010
222222222222
010010010010
010010010010
010010010010
010010010010
020020020020
000000000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
217, 56, 62, 255
132, 56, 62, 255
Colormap
111111111111
111111111111
222211112222
000211112000
000211112000
022211112220
021111111120
021111111120
021111111120
022222222220
000000000000
000000000000
000000000000
Brickmap
111111111111
111111111111
222211112222
000211112000
000211112000
022211112220
021111111120
021111111120
021111111120
033333333330
000000000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
0, 255, 0, 255
0, 0, 0, 255
255, 221, 0, 255
255, 0, 0, 255
Colormap
222220022222
222220022222
222220022222
222220022222
000000000000
111111111111
111111111111
000000000000
111111111111
111111111111
000000000000
000000000000
000000000000
Brickmap
111110011111
111110011111
111110011111
222220022222
000000000000
111111111111
333333333333
000000000000
111111111111
222222222222
000000000000
000000000000
000000000000

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

33234
assets/lines.json Executable file

File diff suppressed because it is too large Load Diff

11
assets/lines6.json Executable file
View File

@ -0,0 +1,11 @@
{
"lines": [
{"start": [-500, -500], "end": [500, 500], "color": [0.25, 0, 0.4]},
{"start": [-500, 500], "end": [500, -500], "color": [0.1, 0.7, 0.4]},
{"start": [-400, -400], "end": [400, -400], "color": [0.3, 0.3, 0.0]},
{"start": [400, -400], "end": [400, 400], "color": [0.0, 0.3, 0.15]},
{"start": [400, 400], "end": [-400, 400], "color": [0.2, 0.6, 0.9]},
{"start": [-400, 400], "end": [-400, -400], "color": [0.5, 0.3, 0.1]}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

BIN
assets/owl-green-height.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
assets/owl-green-normal.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

BIN
assets/owl-green.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 819 KiB

69
assets/parallax_fragment.txt Executable file
View File

@ -0,0 +1,69 @@
precision mediump float;
uniform sampler2D Texture;
uniform sampler2D NormalMap;
uniform sampler2D HeightMap;
uniform sampler2D TransparencyMask;
precision highp float;
varying vec2 frag_uv;
varying vec3 ts_light_pos;
varying vec3 ts_view_pos;
varying vec3 ts_frag_pos;
const float num_layers = 16.0;
const float depth_scale = 0.002;
vec2 parallax_uv(vec2 uv, vec3 view_dir)
{
float layer_depth = 1.0 / num_layers;
float cur_layer_depth = 0.0;
vec2 delta_uv = view_dir.xy * depth_scale / (view_dir.z * num_layers);
vec2 cur_uv = uv;
float depth_from_tex = texture2D(HeightMap, cur_uv).r;
for (int i = 0; i < 32; i++) {
cur_layer_depth += layer_depth;
cur_uv -= delta_uv;
depth_from_tex = texture2D(HeightMap, cur_uv).r;
if (depth_from_tex < cur_layer_depth) {
break;
}
}
// Parallax occlusion mapping
vec2 prev_uv = cur_uv + delta_uv;
float next = depth_from_tex - cur_layer_depth;
float prev = texture2D(HeightMap, prev_uv).r - cur_layer_depth
+ layer_depth;
float weight = next / (next - prev);
return mix(cur_uv, prev_uv, weight);
}
void main(void)
{
vec3 light_dir = normalize(ts_light_pos - ts_frag_pos);
vec3 view_dir = normalize(ts_view_pos - ts_frag_pos);
// Only perturb the texture coordinates if a parallax technique is selected
vec2 uv = parallax_uv(frag_uv, view_dir);
//vec2 uv = frag_uv;
vec3 albedo = texture2D(Texture, uv).rgb;
vec3 ambient = 0.3 * albedo;
// Normal mapping
vec3 norm = normalize(texture2D(NormalMap, uv).rgb * 2.0 - 1.0);
float diffuse = max(dot(light_dir, norm), 0.0);
gl_FragColor = vec4(diffuse * albedo + ambient, texture2D(TransparencyMask, uv).a);
}

60
assets/parallax_vertex.txt Executable file
View File

@ -0,0 +1,60 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
uniform vec3 eye;
uniform mat4 ModelViewMatrix;
uniform mat3 NormalMatrix;
uniform mat4 ProjectionMatrix1;
uniform mat3 ModelViewMatrix3x3;
varying vec2 frag_uv;
varying vec3 ts_light_pos; // Tangent space values
varying vec3 ts_view_pos; //
varying vec3 ts_frag_pos; //
mat3 transpose(in mat3 inMatrix)
{
vec3 i0 = inMatrix[0];
vec3 i1 = inMatrix[1];
vec3 i2 = inMatrix[2];
mat3 outMatrix = mat3(
vec3(i0.x, i1.x, i2.x),
vec3(i0.y, i1.y, i2.y),
vec3(i0.z, i1.z, i2.z)
);
return outMatrix;
}
void main()
{
vec3 vert_norm = vec3(0, 1, 0);
vec3 vert_tang = vec3(1, 0, 0);
vec3 vert_bitang = vec3(0, 0, 1);
mat4 mvp = ProjectionMatrix1 * ModelViewMatrix;
gl_Position = mvp * vec4(vPosition.xyz, 1.0);
ts_frag_pos = vec3(ModelViewMatrix * vec4(vPosition.xyz, 1.0));
vec3 t = normalize((NormalMatrix) * vert_tang);
vec3 b = normalize((NormalMatrix) * vert_bitang);
vec3 n = normalize((NormalMatrix) * vert_norm);
mat3 tbn = transpose(mat3(t, b, n));
ts_light_pos = tbn * vec3(1,2,0);
//ts_view_pos = tbn * eye;
ts_view_pos = tbn * vec3(0,0,0);
ts_frag_pos = tbn * ts_frag_pos;
frag_uv = vTexCoord;
}

BIN
assets/pimgpsh.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 433 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 553 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

10
assets/transparency.fragment Executable file
View File

@ -0,0 +1,10 @@
precision mediump float;
uniform sampler2D Texture;
uniform sampler2D TransparencyMask;
varying vec2 texCoord;
void main() {
vec4 color = texture2D(Texture,texCoord).rgba;
gl_FragColor = vec4(color.rgb, texture2D(TransparencyMask, texCoord).a);
}

11
assets/transparency.vertex Executable file
View File

@ -0,0 +1,11 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
varying vec2 texCoord;
uniform mat4 ProjectionMatrix;
void main() {
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
texCoord = vTexCoord;
}

View File

@ -0,0 +1,11 @@
precision mediump float;
uniform sampler2D Texture;
uniform sampler2D TransparencyMask;
varying vec2 texCoord;
varying vec3 fragColor;
void main() {
vec3 color = normalize(texture2D(Texture,texCoord).rgb + fragColor);
gl_FragColor = vec4(color, texture2D(TransparencyMask, texCoord).a);
}

View File

@ -0,0 +1,14 @@
attribute vec3 vPosition;
attribute vec3 vColor;
attribute vec2 vTexCoord;
varying vec2 texCoord;
varying vec3 fragColor;
uniform mat4 ProjectionMatrix;
void main() {
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
texCoord = vTexCoord;
fragColor = vColor;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -426,6 +426,8 @@ void TBall::Update(size_t dt)
//===========================================
//===========================================
TRenderPair pair;
TRenderPair rect;
TGameLevel::TGameLevel()
{
@ -446,6 +448,44 @@ TGameLevel::TGameLevel()
BonusFloorPosY = 0.f;
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 320, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 320, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 320, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 0, 0));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 1, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 1, 0, 1));
pair.first.ShaderName = "ColorShader";
pair.second.RefreshBuffer();
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 320, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 320, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 320, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 0, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.first.ShaderName = "ColorShader";
rect.second.RefreshBuffer();
}
TGameLevel::~TGameLevel()
@ -735,10 +775,9 @@ void TGameLevel::Draw()
bool mustShowButtons = ((LevelState == CONST_LEVELSTATE_PAUSE) || (LevelState == CONST_LEVELSTATE_GO_TO_PAUSE));
bool pause = (mustShowButtons || (LevelState == CONST_LEVELSTATE_FINISHED));
bool renderBufferReady = RenderBufferReady;
bool pause = true || (mustShowButtons || (LevelState == CONST_LEVELSTATE_FINISHED));
if (pause && renderBufferReady)
{
@ -764,89 +803,96 @@ void TGameLevel::Draw()
Renderer->SwitchToFrameBuffer("LevelBuffer");
Renderer->SetProjectionMatrix(480.f, 320.f);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
CheckGlError();
}
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[BkgTexture]);
Renderer->DrawRect(Vector2f(0, 0), Vector2f(480.f, 320.f));
std::list<TBall>::iterator iBall;
Renderer->PushShader("BrickShader");
for (int i=0; i<CONST_BRICKMATRIX_WIDTH; i++)
{
for (int j=0; j<CONST_BRICKMATRIX_HEIGHT; j++)
{
BlockMatrix[i][j].TryDrawAppear(i,j); //Draws only appearing/disappearing blocks
}
}
RenderUniform1f("Transparency", 1.f);
// glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[BkgTexture]);
//Renderer->DrawRect(Vector2f(0, 0), Vector2f(480.f, 320.f));
//
//std::list<TBall>::iterator iBall;
//
//Renderer->PushShader("BrickShader");
//
//
//for (int i=0; i<CONST_BRICKMATRIX_WIDTH; i++)
// {
// for (int j=0; j<CONST_BRICKMATRIX_HEIGHT; j++)
// {
// BlockMatrix[i][j].TryDrawAppear(i,j); //Draws only appearing/disappearing blocks
// }
// }
//
// RenderUniform1f("Transparency", 1.f);
std::list<std::pair<PairColorTexture, TTriangleList>>::iterator colorBlockIterator;
for (colorBlockIterator = BlockInstansingList.ColorBlockList.begin(); colorBlockIterator != BlockInstansingList.ColorBlockList.end(); ++colorBlockIterator)
{
RenderUniform4fv("BrickColor", colorBlockIterator->first.first.data());
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[colorBlockIterator->first.second]);
Renderer->DrawTriangleList(colorBlockIterator->second);
}
std::list<TBonusFalling>::iterator iBonus;
for (iBonus = BonusFallingList.begin(); iBonus != BonusFallingList.end(); ++iBonus)
{
iBonus->Draw();
}
DrawBallInstancingList();
Renderer->PopShader();
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_REFLECTOR_TEXTURE]);
Renderer->DrawRect(Vector2f(-128.f, -16.f)+ReflectorPos, Vector2f(128.f, 16.f)+ReflectorPos);
const Vector2f wallUpPos1(240.f-256.f, 320.f-64.f);
const Vector2f wallUpPos2(240.f+256.f, 320.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_UP_TEXTURE]);
Renderer->DrawRect(wallUpPos1, wallUpPos2);
const Vector2f wallLeftPos1(0.f, 320.f - 512.f);
const Vector2f wallLeftPos2(32.f, 320.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_LEFT_TEXTURE]);
Renderer->DrawRect(wallLeftPos1, wallLeftPos2);
const Vector2f wallRightPos1(480.f-32.f, 320.f - 512.f);
const Vector2f wallRightPos2(480.f, 320.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_RIGHT_TEXTURE]);
Renderer->DrawRect(wallRightPos1, wallRightPos2);
// std::list<std::pair<PairColorTexture, TTriangleList>>::iterator colorBlockIterator;
// for (colorBlockIterator = BlockInstansingList.ColorBlockList.begin(); colorBlockIterator != BlockInstansingList.ColorBlockList.end(); ++colorBlockIterator)
// {
// RenderUniform4fv("BrickColor", colorBlockIterator->first.first.data());
// glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[colorBlockIterator->first.second]);
//
// Renderer->DrawTriangleList(colorBlockIterator->second);
// }
//
// std::list<TBonusFalling>::iterator iBonus;
//
// for (iBonus = BonusFallingList.begin(); iBonus != BonusFallingList.end(); ++iBonus)
// {
// iBonus->Draw();
// }
//
// DrawBallInstancingList();
//
// Renderer->PopShader();
//
//
// glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_REFLECTOR_TEXTURE]);
//Renderer->DrawRect(Vector2f(-128.f, -16.f)+ReflectorPos, Vector2f(128.f, 16.f)+ReflectorPos);
//
//
// const Vector2f wallUpPos1(240.f-256.f, 320.f-64.f);
// const Vector2f wallUpPos2(240.f+256.f, 320.f);
//glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_UP_TEXTURE]);
//Renderer->DrawRect(wallUpPos1, wallUpPos2);
//
//const Vector2f wallLeftPos1(0.f, 320.f - 512.f);
//const Vector2f wallLeftPos2(32.f, 320.f);
//glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_LEFT_TEXTURE]);
//Renderer->DrawRect(wallLeftPos1, wallLeftPos2);
//
//const Vector2f wallRightPos1(480.f-32.f, 320.f - 512.f);
//const Vector2f wallRightPos2(480.f, 320.f);
//glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_RIGHT_TEXTURE]);
//Renderer->DrawRect(wallRightPos1, wallRightPos2);
//
//if (BonusFloorTimer>0.f)
//{
//
// const Vector2f wallDownPos(240.f, BonusFloorPosY);
//
// glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_BONUS_TEXTURE]);
//
// Renderer->DrawRect(Vector2f(-256.f, -16.f)+wallDownPos, Vector2f(256.f, 16.f)+wallDownPos);
// }
//
//
// if (!pause)
// {
// RenderUniform1f("Transparency", 1.f);
// glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_BACK_BTN_TEXTURE]);
// const Vector2f BackBtnPos(240.f, 320.f - 32.f - 20.f);
// Renderer->DrawRect(Vector2f(-128.f, -32.f)+BackBtnPos, Vector2f(128.f, 32.f)+BackBtnPos);
// }
if (BonusFloorTimer>0.f)
{
const Vector2f wallDownPos(240.f, BonusFloorPosY);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_BONUS_TEXTURE]);
Renderer->DrawRect(Vector2f(-256.f, -16.f)+wallDownPos, Vector2f(256.f, 16.f)+wallDownPos);
}
if (!pause)
{
RenderUniform1f("Transparency", 1.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_BACK_BTN_TEXTURE]);
const Vector2f BackBtnPos(240.f, 320.f - 32.f - 20.f);
Renderer->DrawRect(Vector2f(-128.f, -32.f)+BackBtnPos, Vector2f(128.f, 32.f)+BackBtnPos);
}
TRenderParamsSetter params(pair.first);
Renderer->DrawTriangleList(pair.second);
}
CheckGlError();
if (pause && !renderBufferReady)
{
@ -905,29 +951,37 @@ void TGameLevel::DrawBallInstancingList()
void TGameLevel::DrawBuffer()
{
*SE::Console << "TGameLevel::DrawBuffer";
Renderer->PushShader("FrameShader");
float brightness;
if (CONST_LEVELSTATE_GO_TO_PAUSE)
{
brightness = 0.3f + 0.7f * StateTimer / CONST_PAUSE_APPEAR_TIME;
}
else
{
brightness = 0.3f;
}
RenderUniform1f("Brightness", brightness);
glBindTexture(GL_TEXTURE_2D,ResourceManager->FrameManager.GetFrameTexture("LevelBuffer"));
//Matrix switched to identity
//Vector2f RectPos = Vector2f(-1, -1);
//Vector2f RectSize = Vector2f(2, 2);
Vector2f RectPos = Vector2f(240.f, 160.f);
Vector2f RectSize = Vector2f(240.f, 160.f);
// Renderer->PushShader("FrameShader");
// float brightness;
// if (CONST_LEVELSTATE_GO_TO_PAUSE)
// {
// brightness = 0.3f + 0.7f * StateTimer / CONST_PAUSE_APPEAR_TIME;
// }
// else
// {
// brightness = 0.3f;
// }
//
// RenderUniform1f("Brightness", brightness);
// glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("LevelBuffer"));
//
////Matrix switched to identity
// //Vector2f RectPos = Vector2f(-1, -1);
// //Vector2f RectSize = Vector2f(2, 2);
//Vector2f RectPos = Vector2f(240.f, 160.f);
//Vector2f RectSize = Vector2f(240.f, 160.f);
Renderer->DrawRect(RectPos-RectSize, RectPos+RectSize);
// Renderer->DrawRect(RectPos-RectSize, RectPos+RectSize);
Renderer->PopShader();
// Renderer->PopShader();
{
TRenderParamsSetter params(rect.first);
glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("LevelBuffer"));
Renderer->DrawTriangleList(rect.second);
}
CheckGlError();
}

744
game/main_code.cpp Normal file → Executable file
View File

@ -7,58 +7,50 @@
#include "include/Engine.h"
#include "menucode.h"
#include "main_code.h"
boost::signals2::signal<void (Vector2f)> OnTapUpSignal;
boost::signals2::signal<void (Vector2f)> OnTapUpAfterMoveSignal;
boost::signals2::signal<void (Vector2f)> OnTapDownSignal;
boost::signals2::signal<void (Vector2f)> OnFlingSignal;
boost::signals2::signal<void (Vector2f)> OnScrollSignal;
boost::signals2::signal<void ()> OnDrawSignal;
const std::string CONST_BLOCK_TEXTURE1 = "block1";
const std::string CONST_BLOCK_TEXTURE2 = "block2";
const std::string CONST_BLOCK_TEXTURE3 = "block3";
const std::string CONST_BONUS_GOTHROUGH_TEXTURE = "bonus_gothrough";
const std::string CONST_BONUS_MULTIPLIER_TEXTURE = "bonus_multiplier";
const std::string CONST_BONUS_FLOOR_TEXTURE = "bonus_floor";
const std::string CONST_BALL_TEXTURE = "ball";
const std::string CONST_BALLGLOW_TEXTURE = "ball_glow";
const std::string CONST_REFLECTOR_TEXTURE = "reflector";
const std::string CONST_WALL_LEFT_TEXTURE = "wall_left";
const std::string CONST_WALL_RIGHT_TEXTURE = "wall_right";
const std::string CONST_WALL_UP_TEXTURE = "wall_up";
const std::string CONST_WALL_BONUS_TEXTURE = "wall_bonus";
const std::string CONST_BACK_BTN_TEXTURE = "back_btn";
const std::string CONST_SLIDE_UP_BTN_TEXTURE = "slide_up_btn";
const std::string CONST_TAP_TO_CONTINUE_BTN_TEXTURE = "tap_to_continue_btn";
const std::string CONST_LOADING_TEXTURE = "loading";
const std::string CONST_LOGO_SMALL_TEXTURE = "logo_small";
const std::string CONST_LOADING_BACKGROUND_BLACK = "loading_background_black";
const std::string CONST_CREDITS_TEXTURE = "credits";
const float CONST_CREDITS_SHOW_TIME = 150.f;
TMyApplication* Application;
Matrix3f quatToMatrix(Vector4f q) {
Matrix3f result;
double sqw = q(3)*q(3);
double sqx = q(0)*q(0);
double sqy = q(1)*q(1);
double sqz = q(2)*q(2);
// invs (inverse square length) is only required if quaternion is not already normalised
double invs = 1 / (sqx + sqy + sqz + sqw);
result(0,0) = (sqx - sqy - sqz + sqw)*invs; // since sqw + sqx + sqy + sqz =1/invs*invs
result(1,1) = (-sqx + sqy - sqz + sqw)*invs;
result(2,2) = (-sqx - sqy + sqz + sqw)*invs;
double tmp1 = q(0)*q(1);
double tmp2 = q(2)*q(3);
result(1, 0) = 2.0 * (tmp1 + tmp2)*invs;
result(0, 1) = 2.0 * (tmp1 - tmp2)*invs;
tmp1 = q(0)*q(2);
tmp2 = q(1)*q(3);
result(2,0) = 2.0 * (tmp1 - tmp2)*invs;
result(0,2) = 2.0 * (tmp1 + tmp2)*invs;
tmp1 = q(1)*q(2);
tmp2 = q(0)*q(3);
result(2, 1) = 2.0 * (tmp1 + tmp2)*invs;
result(1, 2) = 2.0 * (tmp1 - tmp2)*invs;
return result;
}
void TMyApplication::InnerInit()
{
void TMyApplication::InnerInit() {
Application = this;
#ifdef TARGET_WIN32
#ifdef NDEBUG
ST::PathToResources = "resources/";
ST::PathToResources = "../../../assets/";
//ST::PathToResources = "resources/";
#else
ST::PathToResources = "../../../assets/";
#endif
@ -68,35 +60,257 @@ void TMyApplication::InnerInit()
ST::PathToResources = "assets/";
#endif
if (Console != NULL)
{
if (Console != NULL) {
*Console<<"APP INIT\n";
}
srand (static_cast<size_t>(time(NULL)));
GameState = CONST_GAMESTATE_PRELOADING;
StateTimer = 0.f;
ResourceManager->ShaderManager.AddShader("DefaultShader", "shader1vertex.txt", "shader1fragment.txt");
ResourceManager->ShaderManager.AddShader("FrameShader", "frameshader_vertex.txt", "frameshader_fragment.txt");
ResourceManager->ShaderManager.AddShader("BrickShader", "brickshader_vertex.txt", "brickshader_fragment.txt");
ResourceManager->ShaderManager.AddShader("ColorShader", "color_vertex.txt", "color_fragment.txt");
ResourceManager->ShaderManager.AddShader("SSAA_4X", "SSAA_4X.vertex", "SSAA_4X.frag");
ResourceManager->ShaderManager.AddShader("ParallaxShader", "parallax_vertex.txt", "parallax_fragment.txt");
ResourceManager->ShaderManager.AddShader("Transparency", "Transparency.vertex", "Transparency.fragment");
ResourceManager->ShaderManager.AddShader("TransparencyPlusColor", "transparencyPlusColor.vertex", "transparencyPlusColor.fragment");
Renderer->PushShader("DefaultShader");
ResourceManager->TexList.AddTexture(CONST_LOADING_BACKGROUND_BLACK + ".png", CONST_LOADING_BACKGROUND_BLACK);
ResourceManager->TexList.AddTexture(CONST_LOADING_TEXTURE + ".png", CONST_LOADING_TEXTURE);
ResourceManager->TexList.AddTexture(CONST_LOGO_SMALL_TEXTURE + ".png", CONST_LOGO_SMALL_TEXTURE);
ResourceManager->TexList.AddTexture("console_bkg.bmp");
ResourceManager->TexList.AddTexture("owl-green.jpg");
ResourceManager->TexList.AddTexture("owl-green-height.png");
ResourceManager->TexList.AddTexture("owl-green-normal.png");
ResourceManager->FrameManager.AddFrameRenderBuffer("LevelBuffer", 512, 512);
ResourceManager->TexList.AddTexture("pimgpsh.jpg");
ResourceManager->TexList.AddTexture("fabric-texture.jpg");
ResourceManager->TexList.AddTexture("fabric-normal-map.png");
ResourceManager->TexList.AddTexture("fabric-height-map.png");
ResourceManager->TexList.AddTexture("fabric-transparency-mask.png");
ResourceManager->TexList.AddTexture("5f.jpg");
ResourceManager->TexList.AddTexture("6f.jpg");
ResourceManager->TexList.AddTexture("7f.jpg");
{
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(-4096, 0, -4096));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(-4096, 0, 4096));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(4096, 0, 4096));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(-4096, 0, -4096));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(4096, 0, 4096));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(4096, 0, -4096));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 0));
rect.first.SamplerMap[CONST_STRING_TEXTURE_UNIFORM] = "pimgpsh.jpg";
rect.second.RefreshBuffer();
}
{
size_t const mapWidth = 2048;
size_t const mapHeight = 2048;
size_t const channelsCount = 4;
char *heightMap = new char[mapWidth * mapHeight * channelsCount];
char *material = new char[mapWidth * mapHeight * channelsCount];
char *normalMap = new char[mapWidth * mapHeight * channelsCount];
for(size_t z = 0; z < mapHeight; z++) {
for(size_t x = 0; x < mapWidth; x++) {
size_t index = channelsCount * (z * mapWidth + x);
heightMap[index + 0] = 0;
heightMap[index + 1] = 0;
heightMap[index + 2] = 0;
heightMap[index + 3] = 255;
material[index + 0] = 255;
material[index + 1] = 255;
material[index + 2] = 255;
material[index + 3] = 0;
normalMap[index + 0] = 128;
normalMap[index + 1] = 128;
normalMap[index + 2] = 255;
normalMap[index + 3] = 255;
}
}
double *heightMapF = new double[mapWidth * mapHeight];
const size_t threadsCount = 3;
const double threadWidth = 4.0;
const auto g = [this, mapWidth, mapHeight, channelsCount, threadWidth, threadsCount, heightMapF, material, normalMap](Vector2d start, Vector2d end, Vector3f &color) {
start = start + Vector2d(mapWidth / 2, mapHeight / 2);
end = end + Vector2d(mapWidth / 2, mapHeight / 2);
const auto length = (end - start).norm();
const Vector2d e0 = (end - start).normalized();
const Vector2d e1(-e0.y(), e0.x());
std::vector<Vector2d> corners;
corners.push_back(start + threadWidth * e1);
corners.push_back(start - threadWidth * e1);
corners.push_back(end + threadWidth * e1);
corners.push_back(end - threadWidth * e1);
auto minXf = corners[0].x();
auto maxXf = corners[0].x();
auto minYf = corners[0].y();
auto maxYf = corners[0].y();
for(auto corner: corners) {
if(corner.x() < minXf) {minXf = corner.x();}
if(corner.x() > maxXf) {maxXf = corner.x();}
if(corner.y() < minYf) {minYf = corner.y();}
if(corner.y() > maxYf) {maxYf = corner.y();}
}
const auto minX = floor(minXf);
const auto maxX = ceil(maxXf);
const auto minY = floor(minYf);
const auto maxY = floor(maxYf);
const double r = threadWidth / 2;
Matrix2d basisMatrix;
basisMatrix << e0.x(), e0.y(), e1.x(), e1.y();
for(auto x = minX; x <= maxX; x++) {
for(auto y = minY; y <= maxY; y++) {
if(x < 0 || x >= mapWidth || y < 0 || y >= mapHeight) {continue;}
Vector2d self = basisMatrix * Vector2d(x - start.x(), y - start.y());
if(self.x() >= 0 && self.x() <= length && self.y() >= -threadWidth && self.y() <= threadWidth) {
const double phase = 6 * pi * self.x() / length;
std::vector<Vector2d> centers;
auto maxH = -1.0f;
Vector3d normal;
for(size_t i = 0; i < threadsCount; i++) {
Vector2d center =
r * sin(phase + 2 * pi * i / threadsCount) * Vector2d(1, 0) +
r * cos(phase + 2 * pi * i / threadsCount) * Vector2d(0, 1);
auto temp = r * r - (self.y() - center.x()) * (self.y() - center.x());
if(temp < 0) {continue;}
float h = sqrt(temp) + center.y();
if(h > maxH) {
maxH = h;
Vector3d center3d =
self.x() * Vector3d(e0.x(), e0.y(), 0) +
center.x() * Vector3d(e1.x(), e1.y(), 0) +
center.y() * Vector3d(0, 0, 1);
Vector3d intersection3d =
self.x() * Vector3d(e0.x(), e0.y(), 0) +
self.y() * Vector3d(e1.x(), e1.y(), 0) +
maxH * Vector3d(0, 0, 1);
normal = (intersection3d - center3d).normalized();
}
}
size_t index = y * mapWidth + x;
if(heightMapF[index] > maxH / (2 * r)) {continue;}
heightMapF[index] = maxH / (2 * r);
material[4 * index] = 255 * color(0);
material[4 * index + 1] = 255 * color(1);
material[4 * index + 2] = 255 * color(2);
material[4 * index + 3] = 255;
normalMap[4 * index] = 255 * (normal.x() + 1) / 2;
normalMap[4 * index + 1] = 255 * (normal.y() + 1) / 2;
normalMap[4 * index + 2] = 255 * normal.z();
normalMap[4 * index + 3] = 255;
}
}
}
};
namespace pt = boost::property_tree;
pt::ptree root;
pt::read_json(ST::PathToResources + "lines.json", root);
size_t counter = 0;
for (auto line : root.get_child("lines")) {
std::vector<double> start;
std::vector<double> end;
std::vector<double> color;
for (auto value : line.second.get_child("start")) {
start.push_back(value.second.get_value<double>());
}
for (auto value : line.second.get_child("end")) {
end.push_back(value.second.get_value<double>());
}
for (auto value : line.second.get_child("color")) {
color.push_back(value.second.get_value<double>());
}
g(Vector2d(start[0] / 4, start[1] / 4), Vector2d(end[0] / 4, end[1] / 4), Vector3f(color[0], color[1], color[2]));
counter++;
//if(counter > 3000) {
// break;
//}
}
for(size_t i = 0; i < mapWidth; i++) {
for(size_t j = 0; j < mapHeight; j++) {
heightMap[4 * (i * mapWidth + j)] = 255 - 255 * heightMapF[i * mapWidth + j];
heightMap[4 * (i * mapWidth + j) + 1] = 255 - 255 * heightMapF[i * mapWidth + j];
heightMap[4 * (i * mapWidth + j) + 2] = 255 - 255 * heightMapF[i * mapWidth + j];
heightMap[4 * (i * mapWidth + j) + 3] = 255;
}
}
delete[] heightMapF;
SE::TTextureData heightMapTexture;
heightMapTexture.Width = mapWidth;
heightMapTexture.Height = mapHeight;
heightMapTexture.Format = "bmp32";
heightMapTexture.DataSize = mapWidth * mapHeight * channelsCount;
heightMapTexture.Data = boost::shared_array<char>(heightMap);
ResourceManager->TexList.AddTexture("HeightMapTexture", heightMapTexture);
SE::TTextureData materialTexture;
materialTexture.Width = mapWidth;
materialTexture.Height = mapHeight;
materialTexture.Format = "bmp32";
materialTexture.DataSize = mapWidth * mapHeight * channelsCount;
materialTexture.Data = boost::shared_array<char>(material);
ResourceManager->TexList.AddTexture("MaterialTexture", materialTexture);
SE::TTextureData normalMapTexture;
normalMapTexture.Width = mapWidth;
normalMapTexture.Height = mapHeight;
normalMapTexture.Format = "bmp32";
normalMapTexture.DataSize = mapWidth * mapHeight * channelsCount;
normalMapTexture.Data = boost::shared_array<char>(normalMap);
ResourceManager->TexList.AddTexture("NormalMapTexture", normalMapTexture);
}
{
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(-2048, 5, -2048));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(-2048, 5, 2048));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(2048, 5, 2048));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(-2048, 5, -2048));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(2048, 5, 2048));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(2048, 5, -2048));
pair.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
pair.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 1));
pair.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
pair.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
pair.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
pair.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 0));
pair.second.RefreshBuffer();
pair.first.ShaderName = "ParallaxShader";
pair.first.SamplerMap[CONST_STRING_TEXTURE_UNIFORM] = "MaterialTexture";
pair.first.SamplerMap["HeightMap"] = "HeightMapTexture";
pair.first.SamplerMap["NormalMap"] = "NormalMapTexture";
pair.first.SamplerMap["TransparencyMask"] = "MaterialTexture";
}
OnDrawSignal.connect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading)));
Inited = true;
Renderer->SetOrthoProjection();
Renderer->SetFullScreenViewport();
}
void TMyApplication::InnerDeinit()
@ -107,387 +321,91 @@ void TMyApplication::InnerDeinit()
{
*Console<<"APP DEINIT\n";
}
OnTapUpSignal.disconnect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnTapUpSignal.disconnect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.disconnect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.disconnect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnFlingSignal.disconnect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.disconnect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
OnScrollSignal.disconnect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
OnDrawSignal.disconnect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading)));
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
OnDrawSignal.disconnect(boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
OnDrawSignal.disconnect(boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
}
void TMyApplication::InnerOnTapDown(Vector2f p)
{
//-OnTapDownSignal(Vector2f(p.v[0], p.v[1]));
OnTapDownSignal(Vector2f(p(0), p(1)));
}
void TMyApplication::InnerOnTapDown(Vector2f p) {}
void TMyApplication::InnerOnTapUp(Vector2f p)
{
OnTapUpSignal(Vector2f(p(0), p(1)));
}
void TMyApplication::InnerOnTapUp(Vector2f p) {}
void TMyApplication::InnerOnTapUpAfterMove(Vector2f p)
{
OnTapUpAfterMoveSignal(Vector2f(p(0), p(1)));
}
void TMyApplication::InnerOnTapUpAfterMove(Vector2f p) {}
void TMyApplication::InnerOnMove(Vector2f p, Vector2f shift)
{
OnScrollSignal(Vector2f(shift(0), shift(1)));
phi += shift(1)*0.02f;
if (phi < pi/12)
{
phi = pi / 12;
}
if (phi > pi / 2)
{
phi = pi / 2;
}
alpha -= shift(0)*0.02f;
}
void TMyApplication::OnFling(Vector2f v)
{
}
void TMyApplication::ApplySignalsToMenu()
void TMyApplication::OnMouseWheel(short int delta)
{
OnTapUpSignal.connect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.connect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.connect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.connect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.connect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
distance += delta;
}
void TMyApplication::DisapplySignalsToMenu()
{
OnTapUpSignal.disconnect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.disconnect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.disconnect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.disconnect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
}
void TMyApplication::ApplySignalsToGame()
{
OnTapUpSignal.connect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnFlingSignal.connect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnScrollSignal.connect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
OnTapDownSignal.connect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
}
void TMyApplication::DisapplySignalsToGame()
{
OnTapUpSignal.disconnect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnFlingSignal.disconnect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnScrollSignal.disconnect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
}
void TMyApplication::ApplySignalsToCredits()
{
OnTapDownSignal.connect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
}
void TMyApplication::DisapplySignalsToCredits()
{
OnTapDownSignal.disconnect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
}
void TMyApplication::LoadResources()
{
TextureNamesToLoad.clear();
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("main_menu_bkg_left.png", "main_menu_bkg_left"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("main_menu_bkg_right.png", "main_menu_bkg_right"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("select_level.png", "select_level"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock1.png", "shutterstock1"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock2.png", "shutterstock2"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock3.png", "shutterstock3"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock4.png", "shutterstock4"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock5.png", "shutterstock5"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock6.png", "shutterstock6"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock7.png", "shutterstock7"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock8.png", "shutterstock8"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock9.png", "shutterstock9"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock10.png", "shutterstock10"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock11.png", "shutterstock11"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock12.png", "shutterstock12"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot1.png", "levelshot1"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot2.png", "levelshot2"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot3.png", "levelshot3"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot4.png", "levelshot4"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot5.png", "levelshot5"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot6.png", "levelshot6"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot7.png", "levelshot7"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot8.png", "levelshot8"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot9.png", "levelshot9"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot10.png", "levelshot10"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot11.png", "levelshot11"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot12.png", "levelshot12"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("game_end.png", "game_end"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE1 + ".png", CONST_BLOCK_TEXTURE1));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE2 + ".png", CONST_BLOCK_TEXTURE2));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE3 + ".png", CONST_BLOCK_TEXTURE3));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_GOTHROUGH_TEXTURE + ".png", CONST_BONUS_GOTHROUGH_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_MULTIPLIER_TEXTURE + ".png", CONST_BONUS_MULTIPLIER_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_FLOOR_TEXTURE + ".png", CONST_BONUS_FLOOR_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BALL_TEXTURE + ".png", CONST_BALL_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BALLGLOW_TEXTURE + ".png", CONST_BALLGLOW_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_LEFT_TEXTURE + ".png", CONST_WALL_LEFT_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_RIGHT_TEXTURE + ".png", CONST_WALL_RIGHT_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_UP_TEXTURE + ".png", CONST_WALL_UP_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_BONUS_TEXTURE + ".png", CONST_WALL_BONUS_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_REFLECTOR_TEXTURE + ".png", CONST_REFLECTOR_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BACK_BTN_TEXTURE + ".png", CONST_BACK_BTN_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_SLIDE_UP_BTN_TEXTURE + ".png", CONST_SLIDE_UP_BTN_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_TAP_TO_CONTINUE_BTN_TEXTURE + ".png", CONST_TAP_TO_CONTINUE_BTN_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_CREDITS_TEXTURE + ".png", CONST_CREDITS_TEXTURE));
#ifdef TARGET_IOS
ResourceManager->SoundManager.LoadMusicLooped("level1ogg.ogg");
#else
//ResourceManager->SoundManager.LoadMusic("level1ogg.ogg");
#endif
ResourceManager->FontManager.AddFont("droid_sans14", "droid_sans14_font_bitmap.png", "droid_sans14_font_charmap.txt");
ResourceManager->FontManager.PushFont("droid_sans14");
TryLoadSavedGame();
}
void TMyApplication::TryLoadSavedGame()
{
std::string fileName = GetFilePathUserData("progress.txt");
FILE* file = fopen(fileName.c_str(), "r");
if (file != NULL)
{
char line[100];
char* r;
r = fgets(line, 100, file);
if (r != NULL)
{
Menu.SetMenuItemCount(toint(r));
}
fclose(file);
}
}
void TMyApplication::TrySaveGame()
{
std::string fileName = GetFilePathUserData("progress.txt");
std::string s = tostr(Menu.GetMenuItemCount());
FILE* file = fopen(fileName.c_str(), "w");
if (file != NULL)
{
fputs(s.c_str(), file);
fflush(file);
fclose(file);
}
}
void TMyApplication::InnerDraw()
{
Renderer->SwitchToScreen();
Renderer->SetPerspectiveProjection(pi / 6, 10.f, 10000.f);
Renderer->SetFullScreenViewport();
Renderer->PushMatrix();
Renderer->TranslateMatrix(Vector3f(0, 0, -distance));
Vector4f quat1 = Vector4f(sin(phi / 2), 0, 0, cos(phi / 2));
Vector4f quat2 = Vector4f(0, sin(alpha / 2), 0, cos(alpha / 2));
Renderer->RotateMatrix(quat1);
Renderer->RotateMatrix(quat2);
glDisable(GL_DEPTH_TEST);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
CheckGlError("");
auto mat1 = quatToMatrix(quat1);
auto mat2 = quatToMatrix(quat2);
Vector3f lightPos = {0.f, 1.f, 1.f};
Vector3f eye = mat2 * (mat1 * Vector3f(0.0f, 0.f, -distance));
OnDrawSignal();
}
void TMyApplication::InnerUpdate(size_t dt)
{
if (GameState == CONST_GAMESTATE_PRELOADING)
{
*SE::Console << "1CONST_GAMESTATE_PRELOADING";
StateTimer += dt/1000.f;
if (StateTimer >= 1.f)
{
LoadResources();
GameState = CONST_GAMESTATE_LOADING;
StateTimer = 0.f;
}
}
else if (GameState == CONST_GAMESTATE_LOADING)
{
*SE::Console << "2CONST_GAMESTATE_LOADING";
StateTimer += dt/1000.f;
if (StateTimer >= 1.f)
{
StateTimer -= 1.f;
}
if (TextureNamesToLoad.size() != 0)
{
ResourceManager->TexList.AddTexture(TextureNamesToLoad.begin()->first, TextureNamesToLoad.begin()->second);
TextureNamesToLoad.erase(TextureNamesToLoad.begin());
}
else
{
GameState = CONST_GAMESTATE_MENU;
ApplySignalsToMenu();
OnDrawSignal.disconnect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading)));
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
StateTimer = 0.f;
Loaded = true;
}
}
else if (GameState == CONST_GAMESTATE_LEVEL)
{
*SE::Console << "3CONST_GAMESTATE_LEVEL";
GameLevel.Update(dt);
}
else if (GameState == CONST_GAMESTATE_MENU)
{
//*SE::Console << "4CONST_GAMESTATE_MENU";
Menu.Update(dt);
}
else if (GameState == CONST_GAMESTATE_FROM_MENU_TO_LEVEL)
{
*SE::Console << "5CONST_GAMESTATE_FROM_MENU_TO_LEVEL";
GameLevel.Update(dt);
if (GameLevel.IsLoaded())
{
//*SE::Console << "5CONST_GAMESTATE_FROM_MENU_TO_LEVEL";
GameState = CONST_GAMESTATE_LEVEL;
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
//CONNECT SLOT
DisapplySignalsToMenu();
ApplySignalsToGame();
}
}
else if (GameState == CONST_GAMESTATE_FROM_MENU_TO_CREDITS)
{
*SE::Console << "6CONST_GAMESTATE_FROM_MENU_TO_CREDITS";
Menu.Update(dt);
GameCredits.Update(dt);
StateTimer -= dt;
if (StateTimer <= 0.f)
{
GameState = CONST_GAMESTATE_CREDITS;
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
ApplySignalsToCredits();
StateTimer = 0.f;
}
}
else if (GameState == CONST_GAMESTATE_CREDITS)
{
//*SE::Console << "7CONST_GAMESTATE_CREDITS";
GameCredits.Update(dt);
}
else if (GameState == CONST_GAMESTATE_FROM_CREDITS_TO_MENU)
{
Menu.Update(dt);
GameCredits.Update(dt);
StateTimer -= dt;
if (StateTimer <= 0.f)
{
GameState = CONST_GAMESTATE_MENU;
StateTimer = 0.f;
ApplySignalsToMenu();
OnDrawSignal.disconnect(boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
}
}
TRenderParamsSetter params(rect.first);
Renderer->DrawTriangleList(rect.second);
}
{
TRenderParamsSetter params(pair.first);
RenderUniform3fv("eye", eye.data());
RenderUniform3fv("lightPos", lightPos.data());
Matrix3f normMatrix = Renderer->GetModelviewMatrix().inverse().transpose().block<3, 3>(0, 0);
RenderUniformMatrix3fv("NormalMatrix", false, normMatrix.data());
RenderUniformMatrix4fv("ModelViewMatrix", false, Renderer->GetModelviewMatrix().data());
RenderUniformMatrix3fv("ModelViewMatrix3x3", false, Renderer->GetModelviewMatrix().block<3, 3>(0, 0).data());
Renderer->DrawTriangleList(pair.second);
}
Renderer->PopMatrix();
CheckGlError("");
}
void TMyApplication::InnerUpdate(size_t dt) {}
void TMyApplication::GoFromMenuToGame(int level)
{
//#ifndef TARGET_IOS
// ResourceManager->SoundManager.PlayMusicLooped("level1ogg.ogg");
//#endif
GameLevel.FillWithFile(ST::PathToResources + "level"+tostr(level+1)+".txt");
GameLevel.SetLoading("shutterstock" + tostr(level+1), "levelshot"+tostr(level+1));
GameState = CONST_GAMESTATE_FROM_MENU_TO_LEVEL;
OnDrawSignal.connect(1, boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
DisapplySignalsToMenu();
}
void TMyApplication::GoFromGameToMenu()
{
//#ifndef TARGET_IOS
// ResourceManager->SoundManager.StopMusic("level1ogg.ogg");
//#endif
TrySaveGame();
DisapplySignalsToGame();
ApplySignalsToMenu();
GameState = CONST_GAMESTATE_MENU;
OnDrawSignal.disconnect(boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
}
void TMyApplication::GoFromMenuToCredits()
{
GameState = CONST_GAMESTATE_FROM_MENU_TO_CREDITS;
StateTimer = CONST_CREDITS_SHOW_TIME;
GameCredits.StartAppear();
OnDrawSignal.connect(1, boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
DisapplySignalsToMenu();
}
void TMyApplication::GoFromCreditsToMenu()
{
GameState = CONST_GAMESTATE_FROM_CREDITS_TO_MENU;
StateTimer = CONST_CREDITS_SHOW_TIME;
GameCredits.StartDisappear();
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
DisapplySignalsToCredits();
}
void TMyApplication::MarkSetGameLevelPause()
{
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
}
void TMyApplication::MarkReleaseGameLevelPause()
{
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
}
void TMyApplication::OpenNextLevel()
{
Menu.OpenNextLevel();
}
bool TMyApplication::IsLoaded()
{
bool TMyApplication::IsLoaded() {
return Loaded;
}
bool TMyApplication::IsInited()
{
bool TMyApplication::IsInited() {
return Inited;
}

104
game/main_code.h Normal file → Executable file
View File

@ -23,94 +23,24 @@
#include "include/Engine.h"
#include "boost/signals2.hpp"//Signal must be included after asio
#include "gamecode.h"
#include "menucode.h"
#include "creditscode.h"
#include "loadingcode.h"
#include "boost/property_tree/json_parser.hpp"
using namespace SE;
extern boost::signals2::signal<void(Vector2f)> OnTapUpSignal;
extern boost::signals2::signal<void(Vector2f)> OnTapUpAfterMoveSignal;
extern boost::signals2::signal<void(Vector2f)> OnTapDownSignal;
extern boost::signals2::signal<void(Vector2f)> OnFlingSignal;
extern boost::signals2::signal<void(Vector2f)> OnScrollSignal;
extern boost::signals2::signal<void()> OnDrawSignal;
extern const std::string CONST_BLOCK_TEXTURE1;
extern const std::string CONST_BLOCK_TEXTURE2;
extern const std::string CONST_BLOCK_TEXTURE3;
extern const std::string CONST_BONUS_GOTHROUGH_TEXTURE;
extern const std::string CONST_BONUS_MULTIPLIER_TEXTURE;
extern const std::string CONST_BONUS_FLOOR_TEXTURE;
extern const std::string CONST_BALL_TEXTURE;
extern const std::string CONST_BALLGLOW_TEXTURE;
extern const std::string CONST_WALL_LEFT_TEXTURE;
extern const std::string CONST_WALL_RIGHT_TEXTURE;
extern const std::string CONST_WALL_UP_TEXTURE;
extern const std::string CONST_WALL_BONUS_TEXTURE;
extern const std::string CONST_REFLECTOR_TEXTURE;
extern const std::string CONST_BACK_BTN_TEXTURE;
extern const std::string CONST_SLIDE_UP_BTN_TEXTURE;
extern const std::string CONST_TAP_TO_CONTINUE_BTN_TEXTURE;
extern const std::string CONST_BACK_BTN_TEXTURE;
extern const std::string CONST_SLIDE_UP_BTN_TEXTURE;
extern const std::string CONST_TAP_TO_CONTINUE_BTN_TEXTURE;
extern const std::string CONST_LOADING_TEXTURE;
extern const std::string CONST_LOGO_SMALL_TEXTURE;
extern const std::string CONST_LOADING_BACKGROUND_BLACK;
extern const std::string CONST_CREDITS_TEXTURE;
const int CONST_GAMESTATE_LEVEL = 1;
const int CONST_GAMESTATE_MENU = 0;
const int CONST_GAMESTATE_FROM_MENU_TO_LEVEL = 2;
const int CONST_GAMESTATE_FROM_MENU_TO_CREDITS = 3;
const int CONST_GAMESTATE_CREDITS = 4;
const int CONST_GAMESTATE_FROM_CREDITS_TO_MENU = 5;
const int CONST_GAMESTATE_LOADING = 6;
const int CONST_GAMESTATE_PRELOADING = 7;
class TMyApplication : public TApplication
{
protected:
TGameMenu Menu;
TGameLevel GameLevel;
TGameCredits GameCredits;
TGameLoading GameLoading;
int GameState;
float StateTimer;
void TryLoadSavedGame();
void TrySaveGame();
bool Inited;
std::vector<std::pair<std::string, std::string> > TextureNamesToLoad;
void ApplySignalsToMenu();
void DisapplySignalsToMenu();
void ApplySignalsToGame();
void DisapplySignalsToGame();
void ApplySignalsToCredits();
void DisapplySignalsToCredits();
public:
TRenderPair pair;
TRenderPair rect;
TRenderPair heightMapPair;
TRenderPair normalMapPair;
TRenderPair texturePair;
bool Loaded;
TMyApplication() : TApplication(), Loaded(false), Inited(false) { }
@ -123,20 +53,10 @@ public:
virtual void InnerUpdate(size_t dt);
void GoFromMenuToGame(int level);
void GoFromGameToMenu();
void GoFromMenuToCredits();
void GoFromCreditsToMenu();
void MarkSetGameLevelPause();
void MarkReleaseGameLevelPause();
void OpenNextLevel();
bool IsLoaded();
bool IsInited();
void LoadResources();
virtual void InnerOnTapDown(Vector2f p);
@ -148,6 +68,14 @@ public:
virtual void OnFling(Vector2f v);
virtual void OnMouseWheel(short int delta);
float distance = 2000;
float alpha = 0;
float phi = pi / 6;
};

View File

@ -22,6 +22,7 @@
<ProjectGuid>{1CC98EEE-BBCB-4D79-B6D7-8511789172C5}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>DoubleHitBallswin</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@ -48,7 +49,7 @@
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>NotSet</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -116,7 +117,7 @@
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/debug/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Debug</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/stage/x64/lib;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/debug/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Debug</AdditionalLibraryDirectories>
<AdditionalDependencies>libjpeg.lib;libpng.lib;Engine.lib;opengl32.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -146,11 +147,11 @@
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<Optimization>Disabled</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;TARGET_WIN32;_WIN32_WINNT=0x0501;WIN32_LEAN_AND_MEAN;EIGEN_DONT_ALIGN_STATICALLY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/release/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_67_0/;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4503</DisableSpecificWarnings>
</ClCompile>
<Link>
@ -158,25 +159,16 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/release/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Release</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_67_0/stage/lib;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Release</AdditionalLibraryDirectories>
<AdditionalDependencies>libjpeg.lib;libpng.lib;Engine.lib;opengl32.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\game\creditscode.cpp" />
<ClCompile Include="..\..\..\game\gamecode.cpp" />
<ClCompile Include="..\..\..\game\loadingcode.cpp" />
<ClCompile Include="..\..\..\game\main_code.cpp" />
<ClCompile Include="..\..\..\game\menucode.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\game\creditscode.h" />
<ClInclude Include="..\..\..\game\gamecode.h" />
<ClInclude Include="..\..\..\game\game_area_interface.h" />
<ClInclude Include="..\..\..\game\loadingcode.h" />
<ClInclude Include="..\..\..\game\main_code.h" />
<ClInclude Include="..\..\..\game\menucode.h" />
<ClInclude Include="main.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -1,60 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Файлы исходного кода">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Заголовочные файлы">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Файлы ресурсов">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\main_code.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\menucode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\creditscode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\gamecode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\loadingcode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="main.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\main_code.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\menucode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\creditscode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\game_area_interface.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\gamecode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\loadingcode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -8,8 +8,8 @@ int APIENTRY WinMain(HINSTANCE hCurrentInst, HINSTANCE hPreviousInst,
LPSTR lpszCmdLine, int nCmdShow)
{
int width = 480;
int height = 320;
int width = 512;
int height = 512;
if (CreateEngine(width, height))