1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 23:54:09 +02:00

#3 fix aiming; #23 fix sound volume; #8 remove alternative outfit select from web version

This commit is contained in:
XProger
2017-09-01 05:20:28 +03:00
parent 78fd04c061
commit 953e020a14
4 changed files with 64 additions and 48 deletions

View File

@@ -760,9 +760,9 @@ struct Lara : Character {
//int realFrameIndex = int(arms[i].animation.time * 30.0f / anim->frameRate) % ((anim->frameEnd - anim->frameStart) / anim->frameRate + 1);
if (anim.frameIndex != anim.framePrev) {
if (anim.frameIndex == 0) { //realFrameIndex < arms[i].animation.framePrev) {
if ((input & ACTION) && (!arm.tracking || arm.target)) {
if ((input & ACTION) && (!arm.tracking || arm.target))
armShot[i] = true;
} else
else
wpnSetAnim(arm, Weapon::IS_ARMED, Weapon::Anim::AIM, 0.0f, -1.0f, arm.target == NULL);
}
// shotgun reload sound
@@ -783,7 +783,6 @@ struct Lara : Character {
void doShot(bool rightHand, bool leftHand) {
int count = wpnCurrent == Weapon::SHOTGUN ? 6 : 2;
float nearDist = 32.0f * 1024.0f;
vec3 nearPos;
int shots = 0;
@@ -860,9 +859,6 @@ struct Lara : Character {
return;
}
updateTargets();
updateOverrides();
if (wpnNext != Weapon::EMPTY && emptyHands()) {
wpnSet(wpnNext);
wpnDraw();
@@ -1034,13 +1030,19 @@ struct Lara : Character {
}
virtual void lookAt(Controller *target) {
updateOverrides();
Character::lookAt(canLookAt() ? target : NULL);
if (!emptyHands()) {
updateTargets();
if (wpnCurrent == Weapon::SHOTGUN)
aimShotgun();
else
aimPistols();
}
}
void aimShotgun() {
quat rot;
@@ -1177,23 +1179,22 @@ struct Lara : Character {
vec3 from = pos - vec3(0, 650, 0);
for (int i = 0; i < level->entitiesCount; i++) {
TR::Entity &e = level->entities[i];
if (!e.flags.active || !e.isEnemy()) continue;
Character *enemy = (Character*)e.controller;
if (enemy->health <= 0) continue;
Controller *c = Controller::first;
while (c) {
if (level->entities[c->entity].isEnemy()) {
Character *enemy = (Character*)c;
if (enemy->health > 0) {
Box box = enemy->getBoundingBox();
vec3 p = box.center();
p.y = box.min.y + (box.max.y - box.min.y) / 3.0f;
vec3 v = p - pos;
if (dir.dot(v.normal()) <= 0.5f) continue; // target is out of sight -60..+60 degrees
if (dir.dot(v.normal()) > 0.5f) { // target is on sight -60..+60 degrees
float d = v.length();
if ((d > dist[0] && d > dist[1]) || !checkOcclusion(from, p, d))
continue;
if ((d < dist[0] || d < dist[1]) && checkOcclusion(from, p, d)) {
if (d < dist[0]) {
target2 = target1;
@@ -1205,6 +1206,12 @@ struct Lara : Character {
dist[1] = d;
}
}
}
}
}
c = c->next;
}
if (!target2 || dist[1] > dist[0] * 4)
target2 = target1;

View File

@@ -23,7 +23,6 @@
<meta charset="utf-8">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=854px, user-scalable=no">
</head>
<body>
<canvas class="game" id="canvas" width="854px" height="480px" oncontextmenu="event.preventDefault()"></canvas><br>
@@ -101,6 +100,19 @@
};
};
</script>
<audio autoplay loop><source src="05.ogg" type="audio/ogg"></audio>
<span id="info">
<input type="file" id="browseFile" style="display:none" accept=".phd,.psx" onchange="readLevel(event)" />
<!-- <label for="browseFile">Browse Level</label> -->
<input type="button" value="Browse Level" onclick="document.getElementById('browseFile').click();" /> (.PHD, .PSX)
<p style="margin:8px">
OpenLara on <a target="_blank" href="https://github.com/XProger/OpenLara">github</a> & <a target="_blank" href="https://www.facebook.com/OpenLaraTR">facebook</a><br>
<br><i>last update: 1.09.2017</i><br>
</p>
</span>
<script>
(function() {
var memoryInitializer = 'OpenLara.js.mem';
@@ -123,30 +135,27 @@
return "Really want to quit the game?";
};
var isMobile = false;
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) isMobile = true;})(navigator.userAgent||navigator.vendor||window.opera);
if (isMobile) {
canvasElement.className = "game_fs";
statusElement.style.display = 'none';
document.getElementById('info').style.display = 'none';
}
function readLevel(event, home) {
var reader = new FileReader();
reader.onload = function(){
var size = reader.result.byteLength;
var data = Module._malloc(size);
Module.writeArrayToMemory(new Uint8Array(reader.result), data);
Module.ccall('game_level_load', 'null', ['number', 'number', 'number'], [data, size, home]);
Module.ccall('game_level_load', 'null', ['number', 'number'], [data, size]);
};
reader.readAsArrayBuffer(event.target.files[0]);
}
</script>
<audio autoplay loop><source src="05.ogg" type="audio/ogg"></audio>
<span id="info">
<input type="file" id="browseFile" style="display:none" accept=".phd,.psx" onchange="readLevel(event, document.getElementById('isHome').checked)" />
<!-- <label for="browseFile">Browse Level</label> -->
<input type="button" value="Browse Level" onclick="document.getElementById('browseFile').click();" /> (.PHD, .PSX)
<input type="checkbox" id="isHome"><label>alternative model (home suit, gold etc.)</label>
<p style="margin:8px">
OpenLara on <a target="_blank" href="https://github.com/XProger/OpenLara">github</a> & <a target="_blank" href="https://www.facebook.com/OpenLaraTR">facebook</a><br>
</p>
</span>
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-60009035-1', 'auto');ga('send', 'pageview');</script>
</body>

View File

@@ -17,8 +17,8 @@ extern "C" {
Sound::fill(frames, count);
}
void EMSCRIPTEN_KEEPALIVE game_level_load(char *data, int size, int home) {
Game::startLevel(new Stream(data, size), NULL, false, home);
void EMSCRIPTEN_KEEPALIVE game_level_load(char *data, int size) {
Game::startLevel(new Stream(data, size));
}
}

View File

@@ -529,7 +529,7 @@ namespace Sound {
}
// apply volume
vec2 pan = getPan();
vec2 vol = vec2(1.0f);//pan * volume;
vec2 vol = pan * volume;
for (int j = 0; j < i; j++) {
if (volumeDelta != 0.0f) { // increase / decrease channel volume
volume += volumeDelta;