mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-11 23:54:09 +02:00
This commit is contained in:
35
src/lara.h
35
src/lara.h
@@ -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;
|
||||
|
@@ -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>
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user