mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-13 08:34:32 +02:00
31
src/cache.h
31
src/cache.h
@@ -13,14 +13,6 @@
|
|||||||
//#define WATER_USE_GRID
|
//#define WATER_USE_GRID
|
||||||
#define UNDERWATER_COLOR "#define UNDERWATER_COLOR vec3(0.6, 0.9, 0.9)\n"
|
#define UNDERWATER_COLOR "#define UNDERWATER_COLOR vec3(0.6, 0.9, 0.9)\n"
|
||||||
|
|
||||||
const char DEPTH[] =
|
|
||||||
#include "shaders/depth.glsl"
|
|
||||||
;
|
|
||||||
|
|
||||||
const char SHADOW_MASK[] =
|
|
||||||
#include "shaders/shadow.glsl"
|
|
||||||
;
|
|
||||||
|
|
||||||
const char SHADER[] =
|
const char SHADER[] =
|
||||||
#include "shaders/shader.glsl"
|
#include "shaders/shader.glsl"
|
||||||
;
|
;
|
||||||
@@ -125,18 +117,16 @@ struct ShaderCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *passNames[] = { "DEPTH", "COMPOSE", "SHADOW", "COMPOSE", "AMBIENT", "WATER", "FILTER", "VOLUME", "GUI" };
|
const char *passNames[] = { "COMPOSE", "SHADOW", "AMBIENT", "WATER", "FILTER", "VOLUME", "GUI" };
|
||||||
const char *src = NULL;
|
const char *src = NULL;
|
||||||
const char *typ = NULL;
|
const char *typ = NULL;
|
||||||
switch (pass) {
|
switch (pass) {
|
||||||
case Core::passDepth :
|
|
||||||
case Core::passCompose :
|
case Core::passCompose :
|
||||||
case Core::passShadow :
|
case Core::passShadow :
|
||||||
case Core::passShadowMask :
|
|
||||||
case Core::passAmbient : {
|
case Core::passAmbient : {
|
||||||
static const char *typeNames[] = { "SPRITE", "FLASH", "ROOM", "ENTITY", "MIRROR" };
|
static const char *typeNames[] = { "SPRITE", "FLASH", "ROOM", "ENTITY", "MIRROR" };
|
||||||
|
|
||||||
src = (pass == Core::passDepth) ? DEPTH : SHADER;
|
src = SHADER;
|
||||||
typ = typeNames[type];
|
typ = typeNames[type];
|
||||||
int animTexRangesCount = game->getMesh()->animTexRangesCount;
|
int animTexRangesCount = game->getMesh()->animTexRangesCount;
|
||||||
int animTexOffsetsCount = game->getMesh()->animTexOffsetsCount;
|
int animTexOffsetsCount = game->getMesh()->animTexOffsetsCount;
|
||||||
@@ -680,9 +670,9 @@ struct WaterCache {
|
|||||||
Item &item = items[i];
|
Item &item = items[i];
|
||||||
if (!item.visible) continue;
|
if (!item.visible) continue;
|
||||||
|
|
||||||
|
|
||||||
// render mirror reflection
|
// render mirror reflection
|
||||||
Core::setTarget(reflect, true);
|
Core::setTarget(reflect, true);
|
||||||
|
Core::viewport = Core::viewportDef;
|
||||||
vec3 p = item.pos;
|
vec3 p = item.pos;
|
||||||
vec3 n = vec3(0, 1, 0);
|
vec3 n = vec3(0, 1, 0);
|
||||||
|
|
||||||
@@ -704,10 +694,10 @@ struct WaterCache {
|
|||||||
game->updateParams();
|
game->updateParams();
|
||||||
|
|
||||||
camera->reflectPlane = NULL;
|
camera->reflectPlane = NULL;
|
||||||
camera->setup(true);
|
|
||||||
|
|
||||||
Core::setTarget(NULL);
|
Core::setTarget(NULL);
|
||||||
|
|
||||||
|
camera->setup(true);
|
||||||
|
|
||||||
// render water plane
|
// render water plane
|
||||||
if (level->rooms[item.from].lightsCount) {
|
if (level->rooms[item.from].lightsCount) {
|
||||||
TR::Room::Light &light = level->rooms[item.from].lights[0];
|
TR::Room::Light &light = level->rooms[item.from].lights[0];
|
||||||
@@ -723,17 +713,8 @@ struct WaterCache {
|
|||||||
|
|
||||||
float sx = item.size.x * DETAIL / (item.data[0]->width / 2);
|
float sx = item.size.x * DETAIL / (item.data[0]->width / 2);
|
||||||
float sz = item.size.z * DETAIL / (item.data[0]->height / 2);
|
float sz = item.size.z * DETAIL / (item.data[0]->height / 2);
|
||||||
float offset, scale;
|
|
||||||
|
|
||||||
if (Core::eye != 0.0f) {
|
Core::active.shader->setParam(uTexParam, vec4(1.0f, 1.0f, sx, sz));
|
||||||
offset = -Core::eye * 0.25f + 0.25f;
|
|
||||||
scale = 0.5f;
|
|
||||||
} else {
|
|
||||||
offset = 0.0f;
|
|
||||||
scale = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::active.shader->setParam(uTexParam, vec4(offset, scale, sx, sz));
|
|
||||||
|
|
||||||
refract->bind(sDiffuse);
|
refract->bind(sDiffuse);
|
||||||
reflect->bind(sReflect);
|
reflect->bind(sReflect);
|
||||||
|
@@ -270,7 +270,7 @@ namespace Core {
|
|||||||
|
|
||||||
Texture *blackTex, *whiteTex;
|
Texture *blackTex, *whiteTex;
|
||||||
|
|
||||||
enum Pass { passDepth, passCompose, passShadow, passShadowMask, passAmbient, passWater, passFilter, passVolume, passGUI, passMAX } pass;
|
enum Pass { passCompose, passShadow, passAmbient, passWater, passFilter, passVolume, passGUI, passMAX } pass;
|
||||||
|
|
||||||
GLuint FBO;
|
GLuint FBO;
|
||||||
struct RenderTargetCache {
|
struct RenderTargetCache {
|
||||||
@@ -467,6 +467,7 @@ namespace Core {
|
|||||||
|
|
||||||
for (int i = 0; i < MAX_LIGHTS; i++)
|
for (int i = 0; i < MAX_LIGHTS; i++)
|
||||||
lightColor[i] = vec4(0, 0, 0, 1);
|
lightColor[i] = vec4(0, 0, 0, 1);
|
||||||
|
eye = 0.0f;
|
||||||
|
|
||||||
uint32 data = 0x00000000;
|
uint32 data = 0x00000000;
|
||||||
blackTex = new Texture(1, 1, Texture::RGBA, false, &data, false);
|
blackTex = new Texture(1, 1, Texture::RGBA, false, &data, false);
|
||||||
@@ -668,7 +669,8 @@ namespace Core {
|
|||||||
|
|
||||||
setViewport(int(viewportDef.x), int(viewportDef.y), int(viewportDef.z), int(viewportDef.w));
|
setViewport(int(viewportDef.x), int(viewportDef.y), int(viewportDef.z), int(viewportDef.w));
|
||||||
} else {
|
} else {
|
||||||
viewportDef = viewport;
|
if (active.target == NULL)
|
||||||
|
viewportDef = viewport;
|
||||||
GLenum texTarget = GL_TEXTURE_2D;
|
GLenum texTarget = GL_TEXTURE_2D;
|
||||||
if (target->cube)
|
if (target->cube)
|
||||||
texTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + face;
|
texTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + face;
|
||||||
@@ -699,6 +701,8 @@ namespace Core {
|
|||||||
|
|
||||||
void beginFrame() {
|
void beginFrame() {
|
||||||
memset(&active, 0, sizeof(active));
|
memset(&active, 0, sizeof(active));
|
||||||
|
setViewport(0, 0, Core::width, Core::height);
|
||||||
|
viewportDef = viewport;
|
||||||
setDepthTest(true);
|
setDepthTest(true);
|
||||||
active.blendMode = bmAlpha;
|
active.blendMode = bmAlpha;
|
||||||
active.cullMode = cfNone;
|
active.cullMode = cfNone;
|
||||||
|
@@ -24,7 +24,7 @@ namespace Game {
|
|||||||
Core::settings.ambient = true;
|
Core::settings.ambient = true;
|
||||||
Core::settings.lighting = true;
|
Core::settings.lighting = true;
|
||||||
Core::settings.shadows = true;
|
Core::settings.shadows = true;
|
||||||
Core::settings.water = false;//Core::support.texFloat || Core::support.texHalf;
|
Core::settings.water = Core::support.texFloat || Core::support.texHalf;
|
||||||
|
|
||||||
level = NULL;
|
level = NULL;
|
||||||
ui = NULL;
|
ui = NULL;
|
||||||
|
@@ -407,12 +407,12 @@ struct Lara : Character {
|
|||||||
|
|
||||||
if (level->extra.braid > -1)
|
if (level->extra.braid > -1)
|
||||||
braid = new Braid(this, vec3(-4.0f, 24.0f, -48.0f));
|
braid = new Braid(this, vec3(-4.0f, 24.0f, -48.0f));
|
||||||
|
reset(15, vec3(70067, -256, 29104), -0.68f); // level 2 (pool)
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
//reset(14, vec3(40448, 3584, 60928), PI * 0.5f, true); // gym (pool)
|
//reset(14, vec3(40448, 3584, 60928), PI * 0.5f, true); // gym (pool)
|
||||||
|
|
||||||
//reset(14, vec3(20215, 6656, 52942), PI); // level 1 (bridge)
|
//reset(14, vec3(20215, 6656, 52942), PI); // level 1 (bridge)
|
||||||
//reset(15, vec3(70067, -256, 29104), -0.68f); // level 2 (pool)
|
reset(15, vec3(70067, -256, 29104), -0.68f); // level 2 (pool)
|
||||||
//reset(61, vec3(27221, -1024, 29205), PI * 0.5f); // level 2 (blade)
|
//reset(61, vec3(27221, -1024, 29205), PI * 0.5f); // level 2 (blade)
|
||||||
//reset(43, vec3(31400, -2560, 25200), PI); // level 2 (reach)
|
//reset(43, vec3(31400, -2560, 25200), PI); // level 2 (reach)
|
||||||
//reset(16, vec3(60907, 0, 39642), PI * 3 / 2); // level 2 (hang & climb)
|
//reset(16, vec3(60907, 0, 39642), PI * 3 / 2); // level 2 (hang & climb)
|
||||||
@@ -424,7 +424,7 @@ struct Lara : Character {
|
|||||||
//reset(61, vec3(21987, -1024, 29144), PI * 3.0f * 0.5f); // level 2 (trap door)
|
//reset(61, vec3(21987, -1024, 29144), PI * 3.0f * 0.5f); // level 2 (trap door)
|
||||||
//reset(51, vec3(41015, 3584, 34494), -PI); // level 3a (t-rex)
|
//reset(51, vec3(41015, 3584, 34494), -PI); // level 3a (t-rex)
|
||||||
//reset(5, vec3(38643, -3072, 92370), PI * 0.5f); // level 3a (gears)
|
//reset(5, vec3(38643, -3072, 92370), PI * 0.5f); // level 3a (gears)
|
||||||
reset(43, vec3(64037, 6656, 48229), PI); // level 3b (movingblock)
|
//reset(43, vec3(64037, 6656, 48229), PI); // level 3b (movingblock)
|
||||||
//reset(0, vec3(40913, -1012, 42252), PI); // level 8c
|
//reset(0, vec3(40913, -1012, 42252), PI); // level 8c
|
||||||
//reset(10, vec3(90443, 11264 - 256, 114614), PI, true); // villa mortal 2
|
//reset(10, vec3(90443, 11264 - 256, 114614), PI, true); // villa mortal 2
|
||||||
#endif
|
#endif
|
||||||
|
73
src/level.h
73
src/level.h
@@ -92,36 +92,10 @@ struct Level : IGame {
|
|||||||
|
|
||||||
if (shadow) shadow->bind(sShadow);
|
if (shadow) shadow->bind(sShadow);
|
||||||
|
|
||||||
glDepthFunc(GL_LEQUAL);
|
|
||||||
Core::setDepthTest(true);
|
Core::setDepthTest(true);
|
||||||
Core::setDepthWrite(true);
|
Core::setDepthWrite(true);
|
||||||
// Core::setColorWrite(false, false, false, false);
|
|
||||||
Core::pass = Core::passCompose;
|
Core::pass = Core::passCompose;
|
||||||
renderScene(roomIndex);
|
renderScene(roomIndex);
|
||||||
// Core::setColorWrite(true, true, true, true);
|
|
||||||
/*
|
|
||||||
if (genShadowMask && false) {
|
|
||||||
renderShadowVolumes();
|
|
||||||
|
|
||||||
Core::setDepthWrite(false);
|
|
||||||
Core::setStencilTest(true);
|
|
||||||
|
|
||||||
glDepthFunc(GL_EQUAL);
|
|
||||||
|
|
||||||
Core::pass = Core::passShadowMask;
|
|
||||||
glStencilFunc(GL_NOTEQUAL, 128, ~0);
|
|
||||||
renderScene(roomIndex);
|
|
||||||
|
|
||||||
Core::pass = Core::passCompose;
|
|
||||||
glStencilFunc(GL_EQUAL, 128, ~0);
|
|
||||||
renderScene(roomIndex);
|
|
||||||
|
|
||||||
glDepthFunc(GL_LEQUAL);
|
|
||||||
|
|
||||||
Core::setStencilTest(false);
|
|
||||||
Core::setDepthWrite(true);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
//==============================
|
//==============================
|
||||||
|
|
||||||
@@ -611,7 +585,7 @@ struct Level : IGame {
|
|||||||
void setup() {
|
void setup() {
|
||||||
PROFILE_MARKER("SETUP");
|
PROFILE_MARKER("SETUP");
|
||||||
|
|
||||||
camera->setup(Core::pass == Core::passDepth || Core::pass == Core::passCompose || Core::pass == Core::passShadowMask);
|
camera->setup(Core::pass == Core::passCompose);
|
||||||
|
|
||||||
atlas->bind(sDiffuse);
|
atlas->bind(sDiffuse);
|
||||||
Core::whiteTex->bind(sNormal);
|
Core::whiteTex->bind(sNormal);
|
||||||
@@ -764,7 +738,7 @@ struct Level : IGame {
|
|||||||
if (colorShadow)
|
if (colorShadow)
|
||||||
Core::setClearColor(vec4(0.0f, 0.0f, 0.0f, 0.0f));
|
Core::setClearColor(vec4(0.0f, 0.0f, 0.0f, 0.0f));
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
void renderShadowVolumes() {
|
void renderShadowVolumes() {
|
||||||
getLight(lara->pos, lara->getRoomIndex());
|
getLight(lara->pos, lara->getRoomIndex());
|
||||||
|
|
||||||
@@ -805,7 +779,7 @@ struct Level : IGame {
|
|||||||
|
|
||||||
Core::setStencilTest(false);
|
Core::setStencilTest(false);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
void render() {
|
void render() {
|
||||||
Core::invalidateTarget(true, true);
|
Core::invalidateTarget(true, true);
|
||||||
params->clipHeight = NO_CLIP_PLANE;
|
params->clipHeight = NO_CLIP_PLANE;
|
||||||
@@ -819,60 +793,29 @@ struct Level : IGame {
|
|||||||
if (shadow)
|
if (shadow)
|
||||||
renderShadows(lara->getRoomIndex());
|
renderShadows(lara->getRoomIndex());
|
||||||
|
|
||||||
Core::setViewport(0, 0, Core::width, Core::height);
|
|
||||||
|
|
||||||
Core::setClearStencil(128);
|
Core::setClearStencil(128);
|
||||||
Core::setTarget(NULL, false);
|
Core::setTarget(NULL, true);
|
||||||
|
Core::setViewport(0, 0, Core::width, Core::height);
|
||||||
|
|
||||||
if (waterCache)
|
if (waterCache)
|
||||||
waterCache->checkVisibility = true;
|
waterCache->checkVisibility = true;
|
||||||
|
|
||||||
Core::clear(true, true, true);
|
|
||||||
camera->fov = 90.0f;
|
|
||||||
|
|
||||||
Core::setViewport(0, 0, Core::width / 2, Core::height);
|
|
||||||
Core::eye = -1.0f;
|
|
||||||
renderCompose(camera->getRoomIndex(), true);
|
|
||||||
Core::setViewport(Core::width / 2, 0, Core::width / 2, Core::height);
|
|
||||||
Core::eye = 1.0f;
|
|
||||||
renderCompose(camera->getRoomIndex(), true);
|
renderCompose(camera->getRoomIndex(), true);
|
||||||
|
|
||||||
if (waterCache) {
|
if (waterCache) {
|
||||||
waterCache->checkVisibility = false;
|
waterCache->checkVisibility = false;
|
||||||
if (waterCache->visible) {
|
if (waterCache->visible) {
|
||||||
Core::setViewport(0, 0, Core::width / 2, Core::height);
|
|
||||||
Core::eye = -1.0f;
|
|
||||||
camera->setup(true);
|
|
||||||
waterCache->renderMask();
|
waterCache->renderMask();
|
||||||
|
|
||||||
Core::setViewport(Core::width / 2, 0, Core::width / 2, Core::height);
|
|
||||||
Core::eye = 1.0f;
|
|
||||||
camera->setup(true);
|
|
||||||
waterCache->renderMask();
|
|
||||||
|
|
||||||
Core::setViewport(0, 0, Core::width, Core::height);
|
|
||||||
waterCache->getRefract();
|
waterCache->getRefract();
|
||||||
waterCache->simulate();
|
waterCache->simulate();
|
||||||
|
|
||||||
Core::setViewport(0, 0, Core::width / 2, Core::height);
|
|
||||||
Core::eye = -1.0f;
|
|
||||||
camera->setup(true);
|
|
||||||
waterCache->render();
|
|
||||||
|
|
||||||
Core::setViewport(Core::width / 2, 0, Core::width / 2, Core::height);
|
|
||||||
Core::eye = 1.0f;
|
|
||||||
camera->setup(true);
|
|
||||||
waterCache->render();
|
waterCache->render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Core::eye = 0.0f;
|
|
||||||
|
|
||||||
Core::setViewport(0, 0, Core::width, Core::height);
|
|
||||||
|
|
||||||
// Core::mViewInv = camera->mViewInv;
|
|
||||||
// Core::mView = Core::mViewInv.inverse();
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
// Core::mViewInv = camera->mViewInv;
|
||||||
|
// Core::mView = Core::mViewInv.inverse();
|
||||||
|
Core::setViewport(0, 0, Core::width, Core::height);
|
||||||
camera->setup(true);
|
camera->setup(true);
|
||||||
|
|
||||||
static int snd_index = 0;
|
static int snd_index = 0;
|
||||||
|
@@ -142,7 +142,6 @@ uniform sampler2D sNormal;
|
|||||||
}
|
}
|
||||||
|
|
||||||
vec4 compose() {
|
vec4 compose() {
|
||||||
return vec4(0.0);
|
|
||||||
vec4 value = texture2D(sNormal, vTexCoord);
|
vec4 value = texture2D(sNormal, vTexCoord);
|
||||||
|
|
||||||
vec3 normal = vec3(value.z, -sqrt(1.0 - dot(value.zw, value.zw)), value.w);
|
vec3 normal = vec3(value.z, -sqrt(1.0 - dot(value.zw, value.zw)), value.w);
|
||||||
@@ -156,11 +155,9 @@ return vec4(0.0);
|
|||||||
float spec = pow(max(0.0, dot(rv, lv)), 64.0) * 0.5;
|
float spec = pow(max(0.0, dot(rv, lv)), 64.0) * 0.5;
|
||||||
|
|
||||||
vec2 tc = vProjCoord.xy / vProjCoord.w * 0.5 + 0.5;
|
vec2 tc = vProjCoord.xy / vProjCoord.w * 0.5 + 0.5;
|
||||||
// vec2 rtc = vec2(tc.x * uTexParam.y + uTexParam.x, tc.y);
|
|
||||||
vec2 rtc = vProjCoord.xy / vProjCoord.w * 0.5 + 0.5;
|
|
||||||
|
|
||||||
vec4 refrA = texture2D(sDiffuse, uParam.xy * clamp(rtc + dudv * uParam.z, 0.0, 0.999) );
|
vec4 refrA = texture2D(sDiffuse, uParam.xy * clamp(tc + dudv * uParam.z, 0.0, 0.999) );
|
||||||
vec4 refrB = texture2D(sDiffuse, uParam.xy * (rtc) );
|
vec4 refrB = texture2D(sDiffuse, uParam.xy * tc );
|
||||||
vec4 refr = vec4(mix(refrA.xyz, refrB.xyz, refrA.w), 1.0);
|
vec4 refr = vec4(mix(refrA.xyz, refrB.xyz, refrA.w), 1.0);
|
||||||
vec4 refl = texture2D(sReflect, vec2(tc.x, 1.0 - tc.y) + dudv * uParam.w);
|
vec4 refl = texture2D(sReflect, vec2(tc.x, 1.0 - tc.y) + dudv * uParam.w);
|
||||||
|
|
||||||
|
22
src/ui.h
22
src/ui.h
@@ -5,7 +5,7 @@
|
|||||||
#include "controller.h"
|
#include "controller.h"
|
||||||
|
|
||||||
struct UI {
|
struct UI {
|
||||||
enum TouchButton { bWeapon, bWalk, bAction, bJump, bMAX };
|
enum TouchButton { bNone, bWeapon, bWalk, bAction, bJump, bMAX };
|
||||||
enum TouchZone { zMove, zLook, zButton, zMAX };
|
enum TouchZone { zMove, zLook, zButton, zMAX };
|
||||||
|
|
||||||
IGame *game;
|
IGame *game;
|
||||||
@@ -93,8 +93,10 @@ struct UI {
|
|||||||
if (checkTouchZone(zLook))
|
if (checkTouchZone(zLook))
|
||||||
Input::joy.R = vec2(0.0f);
|
Input::joy.R = vec2(0.0f);
|
||||||
|
|
||||||
if (checkTouchZone(zButton))
|
if (checkTouchZone(zButton)) {
|
||||||
touchSetDown(false);
|
touchSetDown(false);
|
||||||
|
btn = bNone;
|
||||||
|
}
|
||||||
|
|
||||||
if (doubleTap) {
|
if (doubleTap) {
|
||||||
doubleTap = false;
|
doubleTap = false;
|
||||||
@@ -127,7 +129,7 @@ struct UI {
|
|||||||
// set active touches as gamepad controls
|
// set active touches as gamepad controls
|
||||||
getTouchDir(touch[zMove], Input::joy.L);
|
getTouchDir(touch[zMove], Input::joy.L);
|
||||||
getTouchDir(touch[zLook], Input::joy.R);
|
getTouchDir(touch[zLook], Input::joy.R);
|
||||||
if (touch[zButton] != ikNone) {
|
if (touch[zButton] != ikNone && btn == bNone) {
|
||||||
getTouchButton(Input::touch[touch[zButton] - ikTouchA].pos);
|
getTouchButton(Input::touch[touch[zButton] - ikTouchA].pos);
|
||||||
touchSetDown(true);
|
touchSetDown(true);
|
||||||
}
|
}
|
||||||
@@ -135,9 +137,9 @@ struct UI {
|
|||||||
Input::setDown(ikJoyB, true);
|
Input::setDown(ikJoyB, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderControl(const vec2 &pos, const vec2 &size, const vec4 &color) {
|
void renderControl(const vec2 &pos, float size, bool active) {
|
||||||
Core::active.shader->setParam(uPosScale, vec4(pos, size * vec2(1.0f / 32767.0f)));
|
Core::active.shader->setParam(uPosScale, vec4(pos, vec2(size * (active ? 2.0f : 1.0f) / 32767.0f)));
|
||||||
Core::active.shader->setParam(uMaterial, color);
|
Core::active.shader->setParam(uMaterial, vec4(active ? 0.7f : 0.5f));
|
||||||
game->getMesh()->renderCircle();
|
game->getMesh()->renderCircle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,13 +159,13 @@ struct UI {
|
|||||||
vec2 pos = vec2(offset, Core::height - offset);
|
vec2 pos = vec2(offset, Core::height - offset);
|
||||||
if (Input::down[touch[zMove]]) {
|
if (Input::down[touch[zMove]]) {
|
||||||
Input::Touch &t = Input::touch[touch[zMove] - ikTouchA];
|
Input::Touch &t = Input::touch[touch[zMove] - ikTouchA];
|
||||||
renderControl(t.pos, vec2(btnRadius), vec4(0.5f));
|
renderControl(t.pos, btnRadius, true);
|
||||||
pos = t.start;
|
pos = t.start;
|
||||||
}
|
}
|
||||||
renderControl(pos, vec2(btnRadius), vec4(0.5f));
|
renderControl(pos, btnRadius, false);
|
||||||
|
|
||||||
for (int i = 0; i < bMAX; i++)
|
for (int i = bWeapon; i < bMAX; i++)
|
||||||
renderControl(btnPos[i], vec2(btnRadius), vec4(0.5f));
|
renderControl(btnPos[i], btnRadius, btn == i);
|
||||||
|
|
||||||
Core::setCulling(cfFront);
|
Core::setCulling(cfFront);
|
||||||
Core::setBlending(bmNone);
|
Core::setBlending(bmNone);
|
||||||
|
Reference in New Issue
Block a user