Working on web examples

Reorganizing folders
Review examples
Work on makefile and loader.html
This commit is contained in:
Ray 2017-04-09 23:46:47 +02:00
parent 8374460c39
commit f7bebf9861
421 changed files with 103013 additions and 524979 deletions

View file

@ -0,0 +1,99 @@
/*******************************************************************************************
*
* raylib [models] example - Drawing billboards (adapted for HTML5 platform)
*
* This example has been created using raylib 1.3 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
#include "raylib.h"
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
// Define the camera to look into our 3d world
Camera camera = {{ 5.0f, 4.0f, 5.0f }, { 0.0f, 2.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
Texture2D bill; // Our texture billboard
Vector3 billPosition = { 0.0f, 2.0f, 0.0f }; // Position where draw billboard
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void); // Update and Draw one frame
//----------------------------------------------------------------------------------
// Main Enry Point
//----------------------------------------------------------------------------------
int main()
{
// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards");
bill = LoadTexture("resources/billboard.png"); // Our texture billboard
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadTexture(bill); // Unload texture
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void)
{
// Update
//----------------------------------------------------------------------------------
UpdateCamera(&camera); // Update internal camera and our camera
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
Begin3dMode(camera);
DrawBillboard(camera, bill, billPosition, 2.0f, WHITE);
DrawGrid(10, 1.0f); // Draw a grid
End3dMode();
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,239 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>raylib HTML5 GAME</title>
<meta name="title" content="raylib HTML5 GAME">
<meta name="description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="keywords" content="raylib, games, html5, programming, C, C++, library, learn, videogames">
<meta name="viewport" content="width=device-width">
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">
<style>
body {
font-family: arial;
margin: 0;
padding: none;
}
#header_part {
width: 100%;
height: 80px;
background-color: #888888;
}
#logo {
width:64px;
height:64px;
float:left;
position:relative;
margin:10px;
background-image:url(http://www.raylib.com/img/raylib_logo64x64.png);
}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; }
div.emscripten_border { border: 1px solid black; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; }
#emscripten_logo {
display: inline-block;
margin: 0;
}
.spinner {
height: 30px;
width: 30px;
margin: 0;
margin-top: 20px;
margin-left: 20px;
display: inline-block;
vertical-align: top;
-webkit-animation: rotation .8s linear infinite;
-moz-animation: rotation .8s linear infinite;
-o-animation: rotation .8s linear infinite;
animation: rotation 0.8s linear infinite;
border-left: 5px solid black;
border-right: 5px solid black;
border-bottom: 5px solid black;
border-top: 5px solid red;
border-radius: 100%;
background-color: rgb(245, 245, 245);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
#status {
display: inline-block;
vertical-align: top;
margin-top: 30px;
margin-left: 20px;
font-weight: bold;
color: rgb(40, 40, 40);
}
#progress {
height: 20px;
width: 30px;
}
#controls {
display: inline-block;
float: right;
vertical-align: top;
margin-top: 30px;
margin-right: 20px;
}
#output {
width: 100%;
height: 140px;
margin: 0 auto;
margin-top: 10px;
display: block;
background-color: black;
color: rgb(37, 174, 38);
font-family: 'Lucida Console', Monaco, monospace;
outline: none;
}
</style>
</head>
<body>
<div id="header_part">
<a id="logo" href="http://www.raylib.com"></a>
<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<span id='controls'>
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(false, false)"></span>
</span>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>
<textarea id="output" rows="8"></textarea>
<script type='text/javascript'>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
if (0) { // XXX disabled for safety typeof dump == 'function') {
dump(text + '\n'); // fast, straight to the real console
} else {
console.error(text);
}
},
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
if (text === Module.setStatus.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.style.display = 'none';
}
statusElement.innerHTML = text;
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
</script>
<script async type="text/javascript" src="models_billboard.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,152 @@
/*******************************************************************************************
*
* raylib [models] example - Detect basic 3d collisions (box vs sphere vs box) (adapted for HTML5 platform)
*
* This example has been created using raylib 1.3 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
#include "raylib.h"
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
// Define the camera to look into our 3d world
Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
Vector3 playerPosition = { 0.0f, 1.0f, 2.0f };
Vector3 playerSize = { 1.0f, 2.0f, 1.0f };
Color playerColor;
Vector3 enemyBoxPos = { -4.0f, 1.0f, 0.0f };
Vector3 enemyBoxSize = { 2.0f, 2.0f, 2.0f };
Vector3 enemySpherePos = { 4.0f, 0.0f, 0.0f };
float enemySphereSize = 1.5f;
bool collision = false;
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void); // Update and Draw one frame
//----------------------------------------------------------------------------------
// Main Enry Point
//----------------------------------------------------------------------------------
int main()
{
// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions");
playerColor = GREEN;
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void)
{
// Update
//----------------------------------------------------------------------------------
// Move player
if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f;
else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f;
else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f;
else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f;
collision = false;
// Check collisions player vs enemy-box
if (CheckCollisionBoxes(
(BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2,
playerPosition.y - playerSize.y/2,
playerPosition.z - playerSize.z/2 },
(Vector3){ playerPosition.x + playerSize.x/2,
playerPosition.y + playerSize.y/2,
playerPosition.z + playerSize.z/2 }},
(BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2,
enemyBoxPos.y - enemyBoxSize.y/2,
enemyBoxPos.z - enemyBoxSize.z/2 },
(Vector3){ enemyBoxPos.x + enemyBoxSize.x/2,
enemyBoxPos.y + enemyBoxSize.y/2,
enemyBoxPos.z + enemyBoxSize.z/2 }})) collision = true;
// Check collisions player vs enemy-sphere
if (CheckCollisionBoxSphere(
(BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2,
playerPosition.y - playerSize.y/2,
playerPosition.z - playerSize.z/2 },
(Vector3){ playerPosition.x + playerSize.x/2,
playerPosition.y + playerSize.y/2,
playerPosition.z + playerSize.z/2 }},
enemySpherePos, enemySphereSize)) collision = true;
if (collision) playerColor = RED;
else playerColor = GREEN;
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
Begin3dMode(camera);
// Draw enemy-box
DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY);
DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY);
// Draw enemy-sphere
DrawSphere(enemySpherePos, enemySphereSize, GRAY);
DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY);
// Draw player
DrawCubeV(playerPosition, playerSize, playerColor);
DrawGrid(10, 1.0f); // Draw a grid
End3dMode();
DrawText("Move player with cursors to collide", 220, 40, 20, GRAY);
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}

View file

@ -0,0 +1,239 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>raylib HTML5 GAME</title>
<meta name="title" content="raylib HTML5 GAME">
<meta name="description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="keywords" content="raylib, games, html5, programming, C, C++, library, learn, videogames">
<meta name="viewport" content="width=device-width">
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">
<style>
body {
font-family: arial;
margin: 0;
padding: none;
}
#header_part {
width: 100%;
height: 80px;
background-color: #888888;
}
#logo {
width:64px;
height:64px;
float:left;
position:relative;
margin:10px;
background-image:url(http://www.raylib.com/img/raylib_logo64x64.png);
}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; }
div.emscripten_border { border: 1px solid black; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; }
#emscripten_logo {
display: inline-block;
margin: 0;
}
.spinner {
height: 30px;
width: 30px;
margin: 0;
margin-top: 20px;
margin-left: 20px;
display: inline-block;
vertical-align: top;
-webkit-animation: rotation .8s linear infinite;
-moz-animation: rotation .8s linear infinite;
-o-animation: rotation .8s linear infinite;
animation: rotation 0.8s linear infinite;
border-left: 5px solid black;
border-right: 5px solid black;
border-bottom: 5px solid black;
border-top: 5px solid red;
border-radius: 100%;
background-color: rgb(245, 245, 245);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
#status {
display: inline-block;
vertical-align: top;
margin-top: 30px;
margin-left: 20px;
font-weight: bold;
color: rgb(40, 40, 40);
}
#progress {
height: 20px;
width: 30px;
}
#controls {
display: inline-block;
float: right;
vertical-align: top;
margin-top: 30px;
margin-right: 20px;
}
#output {
width: 100%;
height: 140px;
margin: 0 auto;
margin-top: 10px;
display: block;
background-color: black;
color: rgb(37, 174, 38);
font-family: 'Lucida Console', Monaco, monospace;
outline: none;
}
</style>
</head>
<body>
<div id="header_part">
<a id="logo" href="http://www.raylib.com"></a>
<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<span id='controls'>
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(false, false)"></span>
</span>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>
<textarea id="output" rows="8"></textarea>
<script type='text/javascript'>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
if (0) { // XXX disabled for safety typeof dump == 'function') {
dump(text + '\n'); // fast, straight to the real console
} else {
console.error(text);
}
},
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
if (text === Module.setStatus.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.style.display = 'none';
}
statusElement.innerHTML = text;
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
</script>
<script async type="text/javascript" src="models_box_collisions.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,115 @@
/*******************************************************************************************
*
* raylib [models] example - Cubicmap loading and drawing (adapted for HTML5 platform)
*
* This example has been created using raylib 1.3 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
#include "raylib.h"
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
// Define the camera to look into our 3d world
Camera camera = {{ 16.0f, 14.0f, 16.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
Texture2D cubicmap;
Model map;
Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void); // Update and Draw one frame
//----------------------------------------------------------------------------------
// Main Enry Point
//----------------------------------------------------------------------------------
int main()
{
// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "raylib [models] example - cubesmap loading and drawing");
Image image = LoadImage("resources/cubicmap.png"); // Load cubicmap image (RAM)
cubicmap = LoadTextureFromImage(image); // Convert image to texture to display (VRAM)
map = LoadCubicmap(image); // Load cubicmap model (generate model from image)
// NOTE: By default each cube is mapped to one part of texture atlas
Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture
map.material.texDiffuse = texture; // Set map diffuse texture
UnloadImage(image); // Unload cubesmap image from RAM, already uploaded to VRAM
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadTexture(cubicmap); // Unload cubicmap texture
UnloadTexture(texture); // Unload map texture
UnloadModel(map); // Unload map model
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void)
{
// Update
//----------------------------------------------------------------------------------
UpdateCamera(&camera); // Update internal camera and our camera
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
Begin3dMode(camera);
DrawModel(map, mapPosition, 1.0f, WHITE);
End3dMode();
DrawTextureEx(cubicmap, (Vector2){ screenWidth - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE);
DrawRectangleLines(screenWidth - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN);
DrawText("cubicmap image used to", 658, 90, 10, GRAY);
DrawText("generate map 3d model", 658, 104, 10, GRAY);
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -0,0 +1,239 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>raylib HTML5 GAME</title>
<meta name="title" content="raylib HTML5 GAME">
<meta name="description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="keywords" content="raylib, games, html5, programming, C, C++, library, learn, videogames">
<meta name="viewport" content="width=device-width">
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">
<style>
body {
font-family: arial;
margin: 0;
padding: none;
}
#header_part {
width: 100%;
height: 80px;
background-color: #888888;
}
#logo {
width:64px;
height:64px;
float:left;
position:relative;
margin:10px;
background-image:url(http://www.raylib.com/img/raylib_logo64x64.png);
}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; }
div.emscripten_border { border: 1px solid black; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; }
#emscripten_logo {
display: inline-block;
margin: 0;
}
.spinner {
height: 30px;
width: 30px;
margin: 0;
margin-top: 20px;
margin-left: 20px;
display: inline-block;
vertical-align: top;
-webkit-animation: rotation .8s linear infinite;
-moz-animation: rotation .8s linear infinite;
-o-animation: rotation .8s linear infinite;
animation: rotation 0.8s linear infinite;
border-left: 5px solid black;
border-right: 5px solid black;
border-bottom: 5px solid black;
border-top: 5px solid red;
border-radius: 100%;
background-color: rgb(245, 245, 245);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
#status {
display: inline-block;
vertical-align: top;
margin-top: 30px;
margin-left: 20px;
font-weight: bold;
color: rgb(40, 40, 40);
}
#progress {
height: 20px;
width: 30px;
}
#controls {
display: inline-block;
float: right;
vertical-align: top;
margin-top: 30px;
margin-right: 20px;
}
#output {
width: 100%;
height: 140px;
margin: 0 auto;
margin-top: 10px;
display: block;
background-color: black;
color: rgb(37, 174, 38);
font-family: 'Lucida Console', Monaco, monospace;
outline: none;
}
</style>
</head>
<body>
<div id="header_part">
<a id="logo" href="http://www.raylib.com"></a>
<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<span id='controls'>
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(false, false)"></span>
</span>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>
<textarea id="output" rows="8"></textarea>
<script type='text/javascript'>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
if (0) { // XXX disabled for safety typeof dump == 'function') {
dump(text + '\n'); // fast, straight to the real console
} else {
console.error(text);
}
},
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
if (text === Module.setStatus.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.style.display = 'none';
}
statusElement.innerHTML = text;
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
</script>
<script async type="text/javascript" src="models_cubicmap.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,102 @@
/*******************************************************************************************
*
* raylib [models] example - Draw some basic geometric shapes (cube, sphere, cylinder...) (adapted for HTML5 platform)
*
* This example has been created using raylib 1.0 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
#include "raylib.h"
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
// Define the camera to look into our 3d world
Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void); // Update and Draw one frame
//----------------------------------------------------------------------------------
// Main Enry Point
//----------------------------------------------------------------------------------
int main()
{
// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes");
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void)
{
// Update
//----------------------------------------------------------------------------------
// TODO: Update your variables here
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
Begin3dMode(camera);
DrawCube((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, RED);
DrawCubeWires((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, GOLD);
DrawCubeWires((Vector3){-4.0f, 0.0f, -2.0f}, 3.0f, 6.0f, 2.0f, MAROON);
DrawSphere((Vector3){-1.0f, 0.0f, -2.0f}, 1.0f, GREEN);
DrawSphereWires((Vector3){1.0f, 0.0f, 2.0f}, 2.0f, 16, 16, LIME);
DrawCylinder((Vector3){4.0f, 0.0f, -2.0f}, 1.0f, 2.0f, 3.0f, 4, SKYBLUE);
DrawCylinderWires((Vector3){4.0f, 0.0f, -2.0f}, 1.0f, 2.0f, 3.0f, 4, DARKBLUE);
DrawCylinderWires((Vector3){4.5f, -1.0f, 2.0f}, 1.0f, 1.0f, 2.0f, 6, BROWN);
DrawCylinder((Vector3){1.0f, 0.0f, -4.0f}, 0.0f, 1.5f, 3.0f, 8, GOLD);
DrawCylinderWires((Vector3){1.0f, 0.0f, -4.0f}, 0.0f, 1.5f, 3.0f, 8, PINK);
DrawGrid(10, 1.0f); // Draw a grid
End3dMode();
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}

View file

@ -0,0 +1,239 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>raylib HTML5 GAME</title>
<meta name="title" content="raylib HTML5 GAME">
<meta name="description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="keywords" content="raylib, games, html5, programming, C, C++, library, learn, videogames">
<meta name="viewport" content="width=device-width">
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">
<style>
body {
font-family: arial;
margin: 0;
padding: none;
}
#header_part {
width: 100%;
height: 80px;
background-color: #888888;
}
#logo {
width:64px;
height:64px;
float:left;
position:relative;
margin:10px;
background-image:url(http://www.raylib.com/img/raylib_logo64x64.png);
}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; }
div.emscripten_border { border: 1px solid black; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; }
#emscripten_logo {
display: inline-block;
margin: 0;
}
.spinner {
height: 30px;
width: 30px;
margin: 0;
margin-top: 20px;
margin-left: 20px;
display: inline-block;
vertical-align: top;
-webkit-animation: rotation .8s linear infinite;
-moz-animation: rotation .8s linear infinite;
-o-animation: rotation .8s linear infinite;
animation: rotation 0.8s linear infinite;
border-left: 5px solid black;
border-right: 5px solid black;
border-bottom: 5px solid black;
border-top: 5px solid red;
border-radius: 100%;
background-color: rgb(245, 245, 245);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
#status {
display: inline-block;
vertical-align: top;
margin-top: 30px;
margin-left: 20px;
font-weight: bold;
color: rgb(40, 40, 40);
}
#progress {
height: 20px;
width: 30px;
}
#controls {
display: inline-block;
float: right;
vertical-align: top;
margin-top: 30px;
margin-right: 20px;
}
#output {
width: 100%;
height: 140px;
margin: 0 auto;
margin-top: 10px;
display: block;
background-color: black;
color: rgb(37, 174, 38);
font-family: 'Lucida Console', Monaco, monospace;
outline: none;
}
</style>
</head>
<body>
<div id="header_part">
<a id="logo" href="http://www.raylib.com"></a>
<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<span id='controls'>
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(false, false)"></span>
</span>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>
<textarea id="output" rows="8"></textarea>
<script type='text/javascript'>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
if (0) { // XXX disabled for safety typeof dump == 'function') {
dump(text + '\n'); // fast, straight to the real console
} else {
console.error(text);
}
},
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
if (text === Module.setStatus.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.style.display = 'none';
}
statusElement.innerHTML = text;
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
</script>
<script async type="text/javascript" src="models_geometric_shapes.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,111 @@
/*******************************************************************************************
*
* raylib [models] example - Heightmap loading and drawing (adapted for HTML5 platform)
*
* This example has been created using raylib 1.3 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
#include "raylib.h"
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
// Define our custom camera to look into our 3d world
Camera camera = {{ 18.0f, 16.0f, 18.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
Texture2D texture;
Model map;
Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!)
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void); // Update and Draw one frame
//----------------------------------------------------------------------------------
// Main Enry Point
//----------------------------------------------------------------------------------
int main()
{
// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "raylib [models] example - heightmap loading and drawing");
Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM)
texture = LoadTextureFromImage(image); // Convert image to texture (VRAM)
map = LoadHeightmap(image, (Vector3){ 16, 8, 16 }); // Load heightmap model with defined size
map.material.texDiffuse = texture; // Set map diffuse texture
UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadTexture(texture); // Unload texture
UnloadModel(map); // Unload model
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void)
{
// Update
//----------------------------------------------------------------------------------
UpdateCamera(&camera); // Update internal camera and our camera
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
Begin3dMode(camera);
// NOTE: Model is scaled to 1/4 of its original size (128x128 units)
DrawModel(map, mapPosition, 1.0f, RED);
DrawGrid(20, 1.0f);
End3dMode();
DrawTexture(texture, screenWidth - texture.width - 20, 20, WHITE);
DrawRectangleLines(screenWidth - texture.width - 20, 20, texture.width, texture.height, GREEN);
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,239 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>raylib HTML5 GAME</title>
<meta name="title" content="raylib HTML5 GAME">
<meta name="description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="keywords" content="raylib, games, html5, programming, C, C++, library, learn, videogames">
<meta name="viewport" content="width=device-width">
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">
<style>
body {
font-family: arial;
margin: 0;
padding: none;
}
#header_part {
width: 100%;
height: 80px;
background-color: #888888;
}
#logo {
width:64px;
height:64px;
float:left;
position:relative;
margin:10px;
background-image:url(http://www.raylib.com/img/raylib_logo64x64.png);
}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; }
div.emscripten_border { border: 1px solid black; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; }
#emscripten_logo {
display: inline-block;
margin: 0;
}
.spinner {
height: 30px;
width: 30px;
margin: 0;
margin-top: 20px;
margin-left: 20px;
display: inline-block;
vertical-align: top;
-webkit-animation: rotation .8s linear infinite;
-moz-animation: rotation .8s linear infinite;
-o-animation: rotation .8s linear infinite;
animation: rotation 0.8s linear infinite;
border-left: 5px solid black;
border-right: 5px solid black;
border-bottom: 5px solid black;
border-top: 5px solid red;
border-radius: 100%;
background-color: rgb(245, 245, 245);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
#status {
display: inline-block;
vertical-align: top;
margin-top: 30px;
margin-left: 20px;
font-weight: bold;
color: rgb(40, 40, 40);
}
#progress {
height: 20px;
width: 30px;
}
#controls {
display: inline-block;
float: right;
vertical-align: top;
margin-top: 30px;
margin-right: 20px;
}
#output {
width: 100%;
height: 140px;
margin: 0 auto;
margin-top: 10px;
display: block;
background-color: black;
color: rgb(37, 174, 38);
font-family: 'Lucida Console', Monaco, monospace;
outline: none;
}
</style>
</head>
<body>
<div id="header_part">
<a id="logo" href="http://www.raylib.com"></a>
<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<span id='controls'>
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(false, false)"></span>
</span>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>
<textarea id="output" rows="8"></textarea>
<script type='text/javascript'>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
if (0) { // XXX disabled for safety typeof dump == 'function') {
dump(text + '\n'); // fast, straight to the real console
} else {
console.error(text);
}
},
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
if (text === Module.setStatus.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.style.display = 'none';
}
statusElement.innerHTML = text;
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
</script>
<script async type="text/javascript" src="models_heightmap.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,106 @@
/*******************************************************************************************
*
* raylib [models] example - Load and draw a 3d model (OBJ) (adapted for HTML5 platform)
*
* This example has been created using raylib 1.3 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
#include "raylib.h"
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
// Define the camera to look into our 3d world
Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
Model dwarf; // Declare OBJ model
Texture2D texture; // Declare model texture
Vector3 position = { 0.0f, 0.0f, 0.0f }; // Define model position
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void); // Update and Draw one frame
//----------------------------------------------------------------------------------
// Main Enry Point
//----------------------------------------------------------------------------------
int main()
{
// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "raylib [models] example - obj model loading");
dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model
texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture
dwarf.material.texDiffuse = texture; // Set dwarf model diffuse texture
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadTexture(texture); // Unload texture
UnloadModel(dwarf); // Unload model
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void)
{
// Update
//----------------------------------------------------------------------------------
//...
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
Begin3dMode(camera);
DrawModel(dwarf, position, 2.0f, WHITE); // Draw 3d model with texture
DrawGrid(10, 1.0f); // Draw a grid
DrawGizmo(position); // Draw gizmo
End3dMode();
DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, GRAY);
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,239 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>raylib HTML5 GAME</title>
<meta name="title" content="raylib HTML5 GAME">
<meta name="description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="keywords" content="raylib, games, html5, programming, C, C++, library, learn, videogames">
<meta name="viewport" content="width=device-width">
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">
<style>
body {
font-family: arial;
margin: 0;
padding: none;
}
#header_part {
width: 100%;
height: 80px;
background-color: #888888;
}
#logo {
width:64px;
height:64px;
float:left;
position:relative;
margin:10px;
background-image:url(http://www.raylib.com/img/raylib_logo64x64.png);
}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; }
div.emscripten_border { border: 1px solid black; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; }
#emscripten_logo {
display: inline-block;
margin: 0;
}
.spinner {
height: 30px;
width: 30px;
margin: 0;
margin-top: 20px;
margin-left: 20px;
display: inline-block;
vertical-align: top;
-webkit-animation: rotation .8s linear infinite;
-moz-animation: rotation .8s linear infinite;
-o-animation: rotation .8s linear infinite;
animation: rotation 0.8s linear infinite;
border-left: 5px solid black;
border-right: 5px solid black;
border-bottom: 5px solid black;
border-top: 5px solid red;
border-radius: 100%;
background-color: rgb(245, 245, 245);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
#status {
display: inline-block;
vertical-align: top;
margin-top: 30px;
margin-left: 20px;
font-weight: bold;
color: rgb(40, 40, 40);
}
#progress {
height: 20px;
width: 30px;
}
#controls {
display: inline-block;
float: right;
vertical-align: top;
margin-top: 30px;
margin-right: 20px;
}
#output {
width: 100%;
height: 140px;
margin: 0 auto;
margin-top: 10px;
display: block;
background-color: black;
color: rgb(37, 174, 38);
font-family: 'Lucida Console', Monaco, monospace;
outline: none;
}
</style>
</head>
<body>
<div id="header_part">
<a id="logo" href="http://www.raylib.com"></a>
<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<span id='controls'>
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(false, false)"></span>
</span>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>
<textarea id="output" rows="8"></textarea>
<script type='text/javascript'>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
if (0) { // XXX disabled for safety typeof dump == 'function') {
dump(text + '\n'); // fast, straight to the real console
} else {
console.error(text);
}
},
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
if (text === Module.setStatus.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.style.display = 'none';
}
statusElement.innerHTML = text;
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
</script>
<script async type="text/javascript" src="models_obj_loading.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,239 @@
/*******************************************************************************************
*
* raylib [models] example - Ray picking in 3d mode, ground plane, triangle, mesh
*
* This example has been created using raylib 1.7 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
* Example contributed by Joel Davis (@joeld42)
*
********************************************************************************************/
#include "raylib.h"
#include "raymath.h"
#include <stdio.h>
#include <float.h>
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 450;
Camera camera;
Vector3 cubePosition = { 0.0f, 1.0f, 0.0f };
Vector3 cubeSize = { 2.0f, 2.0f, 2.0f };
Ray ray; // Picking line ray
Model tower;
Texture2D texture;
Vector3 towerPos = { 0.0f, 0.0f, 0.0f };
BoundingBox towerBBox;
bool hitMeshBBox = false;
bool hitTriangle = false;
// Test triangle
Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 };
Vector3 tb = (Vector3){ -4.0, 2.5, 1.0 };
Vector3 tc = (Vector3){ -8.0, 6.5, 0.0 };
Vector3 bary = { 0.0f, 0.0f, 0.0f };
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void); // Update and Draw one frame
//----------------------------------------------------------------------------------
// Main Enry Point
//----------------------------------------------------------------------------------
int main()
{
// Initialization
//--------------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raylib [models] example - 3d ray picking");
// Define the camera to look into our 3d world
camera.position = (Vector3){ 10.0f, 8.0f, 10.0f }; // Camera position
camera.target = (Vector3){ 0.0f, 2.3f, 0.0f }; // Camera looking at point
camera.up = (Vector3){ 0.0f, 1.6f, 0.0f }; // Camera up vector (rotation towards target)
camera.fovy = 45.0f; // Camera field-of-view Y
tower = LoadModel("resources/tower.obj"); // Load OBJ model
texture = LoadTexture("resources/tower.png"); // Load model texture
tower.material.texDiffuse = texture; // Set model diffuse texture
towerBBox = CalculateBoundingBox(tower.mesh);
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadModel(tower); // Unload model from GPU
UnloadTexture(texture); // Unload texture from GPU
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
void UpdateDrawFrame(void)
{
// Update
//----------------------------------------------------------------------------------
UpdateCamera(&camera); // Update camera
// Display information about closest hit
RayHitInfo nearestHit;
char *hitObjectName = "None";
nearestHit.distance = FLT_MAX;
nearestHit.hit = false;
Color cursorColor = WHITE;
// Get ray and test against ground, triangle, and mesh
ray = GetMouseRay(GetMousePosition(), camera);
// Check ray collision aginst ground plane
RayHitInfo groundHitInfo = GetCollisionRayGround(ray, 0.0f);
if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance))
{
nearestHit = groundHitInfo;
cursorColor = GREEN;
hitObjectName = "Ground";
}
// Check ray collision against test triangle
RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, ta, tb, tc);
if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance))
{
nearestHit = triHitInfo;
cursorColor = PURPLE;
hitObjectName = "Triangle";
bary = Barycenter(nearestHit.hitPosition, ta, tb, tc);
hitTriangle = true;
}
else hitTriangle = false;
RayHitInfo meshHitInfo;
// Check ray collision against bounding box first, before trying the full ray-mesh test
if (CheckCollisionRayBox(ray, towerBBox))
{
hitMeshBBox = true;
// Check ray collision against mesh
meshHitInfo = GetCollisionRayMesh(ray, &tower.mesh);
if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance))
{
nearestHit = meshHitInfo;
cursorColor = ORANGE;
hitObjectName = "Mesh";
}
} hitMeshBBox = false;
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
Begin3dMode(camera);
// Draw the tower
DrawModel(tower, towerPos, 1.0, WHITE);
// Draw the test triangle
DrawLine3D(ta, tb, PURPLE);
DrawLine3D(tb, tc, PURPLE);
DrawLine3D(tc, ta, PURPLE);
// Draw the mesh bbox if we hit it
if (hitMeshBBox) DrawBoundingBox(towerBBox, LIME);
// If we hit something, draw the cursor at the hit point
if (nearestHit.hit)
{
DrawCube(nearestHit.hitPosition, 0.5, 0.5, 0.5, cursorColor);
DrawCubeWires(nearestHit.hitPosition, 0.5, 0.5, 0.5, YELLOW);
Vector3 normalEnd;
normalEnd.x = nearestHit.hitPosition.x + nearestHit.hitNormal.x;
normalEnd.y = nearestHit.hitPosition.y + nearestHit.hitNormal.y;
normalEnd.z = nearestHit.hitPosition.z + nearestHit.hitNormal.z;
DrawLine3D(nearestHit.hitPosition, normalEnd, YELLOW);
}
DrawRay(ray, MAROON);
DrawGrid(100, 1.0f);
End3dMode();
// Draw some debug GUI text
DrawText(FormatText("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK);
if (nearestHit.hit)
{
int ypos = 70;
DrawText(FormatText("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK);
DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f",
nearestHit.hitPosition.x,
nearestHit.hitPosition.y,
nearestHit.hitPosition.z), 10, ypos + 15, 10, BLACK);
DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f",
nearestHit.hitNormal.x,
nearestHit.hitNormal.y,
nearestHit.hitNormal.z), 10, ypos + 30, 10, BLACK);
if (hitTriangle) DrawText(FormatText("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK);
}
DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY);
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}

View file

@ -0,0 +1,554 @@
# Blender v2.78 (sub 0) OBJ File: 'lowpoly-tower.blend'
# www.blender.org
o Grid
v -4.000000 0.000000 4.000000
v -2.327363 0.000000 4.654725
v 0.000000 0.000000 4.654725
v 2.327363 0.000000 4.654725
v 4.000000 0.000000 4.000000
v -4.654725 0.955085 2.327363
v -2.000000 0.815050 2.000000
v 0.000000 0.476341 2.423448
v 2.000000 0.476341 2.000000
v 4.654725 0.000000 2.327363
v -4.654725 1.649076 0.000000
v -2.423448 1.092402 0.000000
v 2.423448 0.198579 0.000000
v 4.654725 0.000000 0.000000
v -4.654725 1.649076 -2.327363
v -2.000000 1.092402 -2.000000
v 0.000000 0.476341 -2.423448
v 2.000000 -0.012791 -2.000000
v 4.654725 0.000000 -2.612731
v -4.000000 0.955085 -4.000000
v -2.327363 0.955085 -4.654725
v 0.000000 0.955085 -4.654725
v 2.327363 0.000000 -4.654725
v 4.000000 0.000000 -4.000000
v 2.423448 0.682825 0.000000
v 2.000000 0.565423 -2.000000
v -4.654725 -0.020560 2.327363
v -4.654725 0.000000 0.000000
v -4.654725 0.000000 -2.327363
v -4.000000 0.000000 -4.000000
v -2.327363 0.000000 -4.654725
v 0.000000 -0.020560 -4.654725
v 0.000000 0.709880 -1.230535
v -0.000000 7.395413 0.000000
v 0.962071 0.709880 -0.767226
v -0.533909 0.709880 1.108674
v -1.199683 0.709880 0.273820
v -0.962071 0.709880 -0.767226
v 1.506076 0.859071 1.325337
v 1.199683 0.709880 0.273820
v 0.533909 0.709880 1.108674
v 0.000000 1.875340 -1.177842
v -0.000000 2.293973 -0.649884
v -0.000000 4.365648 -0.627970
v 0.000000 6.167194 -0.942957
v 0.000000 6.232434 -1.708677
v 1.335898 6.232434 -1.065343
v 0.737233 6.167195 -0.587924
v 0.490966 4.365648 -0.391533
v 0.508100 2.293973 -0.405196
v 0.920874 1.875340 -0.734372
v -0.741367 6.232434 1.539465
v -0.409133 6.167195 0.849574
v -0.272466 4.365648 0.565781
v -0.281974 2.293973 0.585526
v -0.511047 1.875340 1.061199
v -1.665837 6.232434 0.380217
v -0.919314 6.167195 0.209828
v -0.612225 4.365648 0.139736
v -0.633590 2.293973 0.144613
v -1.148311 1.875340 0.262095
v -1.335898 6.232434 -1.065343
v -0.737233 6.167195 -0.587924
v -0.490967 4.365648 -0.391533
v -0.508100 2.293973 -0.405196
v -0.920874 1.875340 -0.734372
v 1.665837 6.232434 0.380216
v 0.919315 6.167195 0.209828
v 0.612225 4.365648 0.139736
v 0.633590 2.293973 0.144613
v 1.148311 1.875340 0.262095
v 0.741367 6.232434 1.539465
v 0.409133 6.167195 0.849575
v 0.272466 4.365648 0.565781
v 0.281974 2.293973 0.585526
v 0.511046 1.875340 1.061199
v 0.000000 5.012550 -0.969733
v 0.758168 5.012550 -0.604618
v -0.420751 5.012550 0.873699
v -0.945419 5.012550 0.215786
v -0.758168 5.012550 -0.604618
v 0.945419 5.012550 0.215786
v 0.420751 5.012550 0.873699
vt 0.0523 0.5444
vt 0.1817 0.4284
vt 0.1641 0.5859
vt 0.0177 0.4451
vt 0.1526 0.3090
vt 0.0189 0.1737
vt 0.0188 0.3088
vt 0.0561 0.0762
vt 0.1757 0.1924
vt 0.3024 0.4534
vt 0.3071 0.5902
vt 0.3413 0.2459
vt 0.2906 0.1614
vt 0.4116 0.1801
vt 0.2834 0.3774
vt 0.1526 0.0362
vt 0.2917 0.1622
vt 0.4446 0.5865
vt 0.4443 0.2989
vt 0.3711 0.3021
vt 0.4396 0.0275
vt 0.4094 0.1829
vt 0.4219 0.4255
vt 0.5474 0.5381
vt 0.5811 0.4376
vt 0.5715 0.1505
vt 0.5811 0.2997
vt 0.5272 0.0533
vt 0.2208 0.2194
vt 0.3456 0.3610
vt 0.2878 0.0321
vt 0.2321 0.3392
vt 0.4432 0.0177
vt 0.7347 0.7934
vt 0.7382 0.7595
vt 0.8982 0.7768
vt 0.6169 0.7595
vt 0.6139 0.7879
vt 0.4951 0.7634
vt 0.1551 0.6832
vt 0.2925 0.6268
vt 0.2925 0.6832
vt 0.7795 0.6832
vt 0.6421 0.6268
vt 0.7795 0.6255
vt 0.5046 0.7241
vt 0.6421 0.7241
vt 0.3986 0.6268
vt 0.3986 0.6832
vt 0.5046 0.6268
vt 0.0177 0.6268
vt 0.1551 0.6255
vt 0.8856 0.6268
vt 0.1899 0.9579
vt 0.1194 0.8696
vt 0.2324 0.8696
vt 0.1899 0.7813
vt 0.0943 0.7595
vt 0.0177 0.8206
vt 0.0177 0.9186
vt 0.0943 0.9797
vt 0.2793 0.2349
vt 0.2304 0.2758
vt 0.6597 0.0177
vt 0.6954 0.0993
vt 0.6367 0.0768
vt 0.7558 0.0777
vt 0.7238 0.0440
vt 0.8840 0.1330
vt 0.7385 0.1141
vt 0.9157 0.0886
vt 0.9781 0.1232
vt 0.9224 0.1276
vt 0.2677 0.8141
vt 0.3463 0.8037
vt 0.3086 0.8339
vt 0.6387 0.3550
vt 0.7130 0.3801
vt 0.6596 0.4053
vt 0.7245 0.3245
vt 0.6919 0.3383
vt 0.8655 0.3566
vt 0.7351 0.3577
vt 0.9770 0.3365
vt 0.9078 0.3751
vt 0.9174 0.3282
vt 0.2677 0.9018
vt 0.3086 0.8821
vt 0.6803 0.2948
vt 0.6251 0.3035
vt 0.7194 0.2854
vt 0.8764 0.2832
vt 0.9221 0.2861
vt 0.3363 0.9565
vt 0.3464 0.9122
vt 0.6751 0.2482
vt 0.6178 0.2499
vt 0.7179 0.2431
vt 0.9823 0.2484
vt 0.9247 0.2452
vt 0.3935 0.9014
vt 0.6755 0.1996
vt 0.6164 0.1941
vt 0.7201 0.1992
vt 0.8793 0.2446
vt 0.9823 0.2060
vt 0.9257 0.2051
vt 0.4598 0.8580
vt 0.4144 0.8579
vt 0.6819 0.1498
vt 0.6222 0.1361
vt 0.7266 0.1555
vt 0.8831 0.1684
vt 0.9252 0.1659
vt 0.4218 0.7790
vt 0.3934 0.8145
vt 0.3363 0.7595
vt 0.8815 0.2060
vt 0.8720 0.3208
vt 0.8825 0.1012
vt 0.9735 0.0816
vt 0.9718 0.3817
vt 0.9807 0.2918
vt 0.4218 0.9370
vt 0.9810 0.1644
vn 0.1035 0.8806 0.4623
vn 0.0964 0.9481 0.3030
vn 0.0000 0.9780 0.2088
vn 0.0659 0.9835 0.1683
vn 0.2325 0.9320 0.2779
vn 0.0553 0.9960 -0.0702
vn 0.2827 0.9564 0.0728
vn 0.1873 0.9776 -0.0961
vn 0.2421 0.9703 0.0000
vn 0.0921 0.9772 -0.1913
vn -0.0277 0.9947 -0.0993
vn 0.2308 0.9274 -0.2944
vn 0.2771 0.9572 -0.0837
vn 0.3724 0.9074 0.1947
vn 0.0777 0.9770 -0.1985
vn -0.1094 0.9539 0.2794
vn 0.0364 0.9844 0.1721
vn 0.1683 0.9835 0.0659
vn 0.0674 0.9901 0.1230
vn 0.4338 0.8823 0.1829
vn 0.2845 0.9565 0.0649
vn 0.0886 0.9961 0.0000
vn 0.2000 0.9789 0.0424
vn 0.1417 0.9830 0.1171
vn 0.3021 0.9524 0.0412
vn -0.0193 0.9986 -0.0493
vn 0.0000 0.9777 0.2098
vn 0.0005 0.9781 -0.2083
vn 0.1879 0.9782 -0.0887
vn 0.2249 0.0000 0.9744
vn 0.9783 0.0000 -0.2071
vn 0.9783 0.0000 0.2071
vn 0.0000 0.0000 -1.0000
vn -1.0000 0.0000 0.0000
vn -0.3645 0.0000 -0.9312
vn -0.9312 0.0000 -0.3645
vn -0.9312 0.0000 0.3645
vn 0.2615 0.7979 -0.5431
vn 0.5877 0.7979 -0.1341
vn 0.4713 0.7979 0.3758
vn -0.0000 0.7979 0.6028
vn -0.4713 0.7979 0.3758
vn -0.5877 0.7979 -0.1341
vn -0.2615 0.7979 -0.5431
vn -0.1285 0.9864 -0.1025
vn 0.0929 0.8937 0.4389
vn -0.4335 0.0407 -0.9002
vn -0.2867 0.7507 -0.5952
vn -0.4339 0.0095 -0.9009
vn -0.4338 0.0209 -0.9008
vn -0.0408 -0.9956 -0.0848
vn -0.9741 0.0407 -0.2223
vn -0.6441 0.7507 -0.1470
vn -0.9749 0.0095 -0.2225
vn -0.9747 0.0209 -0.2225
vn -0.0918 -0.9956 -0.0209
vn -0.7812 0.0407 0.6230
vn -0.5165 0.7507 0.4119
vn -0.7818 0.0095 0.6235
vn -0.7817 0.0209 0.6234
vn -0.0736 -0.9956 0.0587
vn -0.0000 0.0407 0.9992
vn 0.0000 0.7507 0.6607
vn 0.0000 0.0095 1.0000
vn -0.0000 0.0209 0.9998
vn -0.0000 -0.9956 0.0941
vn 0.7812 0.0407 0.6230
vn 0.5165 0.7507 0.4119
vn 0.7818 0.0095 0.6235
vn 0.7817 0.0209 0.6234
vn 0.0736 -0.9956 0.0587
vn 0.9741 0.0407 -0.2223
vn 0.6441 0.7507 -0.1470
vn 0.9749 0.0095 -0.2225
vn 0.9747 0.0209 -0.2225
vn 0.0918 -0.9956 -0.0209
vn 0.4335 0.0407 -0.9002
vn 0.2867 0.7507 -0.5952
vn 0.4339 0.0095 -0.9009
vn 0.4338 0.0209 -0.9008
vn 0.0408 -0.9956 -0.0848
vn 0.3918 -0.4298 -0.8135
vn 0.8803 -0.4298 -0.2009
vn 0.7059 -0.4298 0.5630
vn -0.0000 -0.4298 0.9029
vn -0.7059 -0.4298 0.5630
vn -0.8803 -0.4298 -0.2009
vn -0.3918 -0.4298 -0.8135
vn 0.0210 0.9998 -0.0048
vn 0.0482 0.9981 -0.0385
vn -0.0166 0.9914 -0.1301
vn -0.0090 0.9904 -0.1379
vn 0.2820 0.9576 0.0597
vn -0.0000 0.9846 0.1749
vn -0.0921 0.9772 -0.1913
vn -0.1734 0.9794 0.1036
s off
f 1/1/1 7/2/1 6/3/1
f 2/4/2 8/5/2 7/2/2
f 4/6/3 8/5/3 3/7/3
f 5/8/4 9/9/4 4/6/4
f 6/3/5 12/10/5 11/11/5
f 35/12/6 25/13/6 26/14/6
f 7/2/7 37/15/7 12/10/7
f 10/16/8 13/17/8 9/9/8
f 12/10/9 15/18/9 11/11/9
f 35/12/10 17/19/10 33/20/10
f 13/17/11 19/21/11 18/22/11
f 16/23/12 20/24/12 15/18/12
f 17/19/13 21/25/13 16/23/13
f 17/19/14 23/26/14 22/27/14
f 26/14/15 24/28/15 23/26/15
f 1/1/16 2/4/16 7/2/16
f 2/4/3 3/7/3 8/5/3
f 4/6/17 9/9/17 8/5/17
f 5/8/18 10/16/18 9/9/18
f 6/3/19 7/2/19 12/10/19
f 25/13/20 39/29/20 9/9/20
f 38/30/21 12/10/21 37/15/21
f 10/16/22 14/31/22 13/17/22
f 12/10/23 16/23/23 15/18/23
f 8/5/24 36/32/24 7/2/24
f 38/30/25 17/19/25 16/23/25
f 13/17/22 14/31/22 19/21/22
f 16/23/26 21/25/26 20/24/26
f 17/19/27 22/27/27 21/25/27
f 17/19/28 26/14/28 23/26/28
f 26/14/29 19/33/29 24/28/29
f 26/34/30 18/35/30 19/36/30
f 26/34/31 13/37/31 18/35/31
f 25/38/32 9/39/32 13/37/32
f 22/40/33 31/41/33 21/42/33
f 6/43/34 28/44/34 27/45/34
f 15/46/34 28/44/34 11/47/34
f 21/42/35 30/48/35 20/49/35
f 20/49/36 29/50/36 15/46/36
f 22/40/33 23/51/33 32/52/33
f 6/43/37 27/45/37 1/53/37
f 46/54/38 34/55/38 47/56/38
f 47/56/39 34/55/39 67/57/39
f 67/57/40 34/55/40 72/58/40
f 72/58/41 34/55/41 52/59/41
f 52/59/42 34/55/42 57/60/42
f 57/60/43 34/55/43 62/61/43
f 62/61/44 34/55/44 46/54/44
f 40/62/45 41/63/45 39/29/45
f 39/29/46 8/5/46 9/9/46
f 38/64/47 42/65/47 33/66/47
f 65/67/48 42/65/48 66/68/48
f 65/67/49 44/69/49 43/70/49
f 81/71/50 45/72/50 77/73/50
f 62/74/51 45/75/51 63/76/51
f 37/77/52 66/78/52 38/79/52
f 60/80/53 66/78/53 61/81/53
f 60/80/54 64/82/54 65/83/54
f 58/84/55 81/85/55 80/86/55
f 57/87/56 63/76/56 58/88/56
f 56/89/57 37/77/57 36/90/57
f 55/91/58 61/81/58 56/89/58
f 54/92/59 60/80/59 55/91/59
f 79/93/60 58/84/60 80/86/60
f 52/94/61 58/88/61 53/95/61
f 76/96/62 36/90/62 41/97/62
f 75/98/63 56/89/63 76/96/63
f 75/98/64 54/92/64 55/91/64
f 73/99/65 79/93/65 83/100/65
f 73/101/66 52/94/66 53/95/66
f 71/102/67 41/97/67 40/103/67
f 70/104/68 76/96/68 71/102/68
f 70/104/69 74/105/69 75/98/69
f 68/106/70 83/100/70 82/107/70
f 67/108/71 73/101/71 68/109/71
f 51/110/72 40/103/72 35/111/72
f 50/112/73 71/102/73 51/110/73
f 49/113/74 70/104/74 50/112/74
f 78/114/75 68/106/75 82/107/75
f 47/115/76 68/109/76 48/116/76
f 42/65/77 35/111/77 33/66/77
f 43/70/78 51/110/78 42/65/78
f 44/69/79 50/112/79 43/70/79
f 45/72/80 78/114/80 77/73/80
f 46/117/81 48/116/81 45/75/81
f 44/69/82 78/114/82 49/113/82
f 49/113/83 82/107/83 69/118/83
f 82/107/84 74/105/84 69/118/84
f 83/100/85 54/92/85 74/105/85
f 79/93/86 59/119/86 54/92/86
f 80/86/87 64/82/87 59/119/87
f 64/120/88 77/73/88 44/69/88
f 35/12/89 40/62/89 25/13/89
f 7/2/90 36/32/90 37/15/90
f 35/12/91 26/14/91 17/19/91
f 25/13/92 40/62/92 39/29/92
f 38/30/93 16/23/93 12/10/93
f 8/5/94 41/63/94 36/32/94
f 38/30/95 33/20/95 17/19/95
f 26/34/31 25/38/31 13/37/31
f 22/40/33 32/52/33 31/41/33
f 6/43/34 11/47/34 28/44/34
f 15/46/34 29/50/34 28/44/34
f 21/42/35 31/41/35 30/48/35
f 20/49/36 30/48/36 29/50/36
f 39/29/96 41/63/96 8/5/96
f 38/64/47 66/68/47 42/65/47
f 65/67/48 43/70/48 42/65/48
f 65/67/49 64/120/49 44/69/49
f 81/71/50 63/121/50 45/72/50
f 62/74/51 46/117/51 45/75/51
f 37/77/52 61/81/52 66/78/52
f 60/80/53 65/83/53 66/78/53
f 60/80/54 59/119/54 64/82/54
f 58/84/55 63/122/55 81/85/55
f 57/87/56 62/74/56 63/76/56
f 56/89/57 61/81/57 37/77/57
f 55/91/58 60/80/58 61/81/58
f 54/92/59 59/119/59 60/80/59
f 79/93/60 53/123/60 58/84/60
f 52/94/61 57/87/61 58/88/61
f 76/96/62 56/89/62 36/90/62
f 75/98/63 55/91/63 56/89/63
f 75/98/64 74/105/64 54/92/64
f 73/99/65 53/123/65 79/93/65
f 73/101/66 72/124/66 52/94/66
f 71/102/67 76/96/67 41/97/67
f 70/104/68 75/98/68 76/96/68
f 70/104/69 69/118/69 74/105/69
f 68/106/70 73/99/70 83/100/70
f 67/108/71 72/124/71 73/101/71
f 51/110/72 71/102/72 40/103/72
f 50/112/73 70/104/73 71/102/73
f 49/113/74 69/118/74 70/104/74
f 78/114/75 48/125/75 68/106/75
f 47/115/76 67/108/76 68/109/76
f 42/65/77 51/110/77 35/111/77
f 43/70/78 50/112/78 51/110/78
f 44/69/79 49/113/79 50/112/79
f 45/72/80 48/125/80 78/114/80
f 46/117/81 47/115/81 48/116/81
f 44/69/82 77/73/82 78/114/82
f 49/113/83 78/114/83 82/107/83
f 82/107/84 83/100/84 74/105/84
f 83/100/85 79/93/85 54/92/85
f 79/93/86 80/86/86 59/119/86
f 80/86/87 81/85/87 64/82/87
f 64/120/88 81/71/88 77/73/88
‰PNG

IHDRÃ>aËgAMA±<> üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  ÒÝ~ü`ÏIDATxÚíýw|ÕÕø<C395>¿ï<C2BF>Ù]­$Iî½q/˜^L %„<>FB³Mo JBË“'l“„¸H¶!<21>ƒ<>cŒ«Ü­.IVï[fæ~ÿ¸3³»lLyžäùü~çõ²µ;mïÜsîéç\±öÓ¥P(”R @ô÷K€@€!BH÷¯`óæ-ìܱó°÷:Ê@
‰aC ‘úŽÓùúÃÁ5×\û¥Æÿÿ*È/¼B?žg}¥9òâßöâ ¼ðoûíÿ$0<>ä"\ò;›öšå\ôs´ìóüs/?`~Á½‡A¾ø÷À¢… ¹êê«ÿ­cø"$.ô?ïSot:ßúƱ)ß3.\Ÿò}û=3üÏãæ­êt¿øBˆEûÁåi9©}+å;¤…‡l!»Fþ¦M¾”R`˜Æ×R$˜ß*$#߃d"èˆ|<"HF¾‰à EÀ%<25>¤²}Ló?{ÈOþ©}ïþü5~ü<>¥ÿͱR"¥Ôàk¬ü#Aì@2òAsÿ4è
ù‡;ÞºB~—sq¸“ÉÈ÷9×ÿœ¼Ú“¡+<>ÉOu4<10>¯œ#[­yØ<“÷O.z<>?Ïÿ Wÿ—…ŽÈ÷à?þ7 KÞqÕ{ìß#»=hBHÉè™à‡ZõHä°\ü¾MfzM)ÇÿOÿsÆào£p¸êlã<6C>{þoèß4HÑ1ß¹óMá½{gûŸ<C3BB>”ÏÚ·ˆÔ¾EZÎ>GHæ <03>žI¿ÞY‡ýñƒrðàÁCž*÷ À¡¥­”"c<>&À.MP¥X´Â扅¯ñä¢×yrÑëä½o'½è<ðŸÃ ºRøwü«ôY3ù$#»#Dj×%Ëþd¨Ú÷*%[ÿJ¿ÞYàÒ?u6!Ç¢­­½ËßÐȇÌp´ã! ×;Aú „EÒ¶÷íâ˜yá¾ä!߃ÿT"èø½£ÆŸ|¬+<2B>¿«c¦4$w,ŒSZaÓ w)åÛ_"@†Â¾5<00>e¿™Ñ=å
èÝ+ hN9^}°!ÊÑHó”¼gòÏ«*x…ŒAg»ŠƒJZýB€jEFë¾wõ!×·à—E¾ÿ)â #Òïz#Ãÿü‡ [»$ºBxG0ò”‰KÀNAö<41>q—R]]$Ÿ¬ ôÌè@mM 9½z±wž~`ä'Õ<C383>[,¹-¡v´´µ!…ÄŽOyt D…^ý"ˆR6®2é¤<C3A9>AýQ$Ÿ9ø;,^¡¸ú\þã`Ù²e\~ùå_xíŽÈØGÊüO—,è¼h_¹ÆHù~Á­IùþÖoOJù.ò·|¦®ÍsèÕ'D]«â@~-ÐYñK CÆ]Jey•ÿ=§W/ªö½J¸Ÿ^­í•+>áG”lý+=ží@sS#«WLKK O,|<7C>[®º<C2AE>EïEÉ ÷¤¥½T„Ö}º¿ Hï?åD2LÛ<4C> ‰ãŽ™NÛ<4E>5>d :<>@rõ¹©"¾¤ :{ÖU<C396>޽ÿþ
¥DZm'ÁÁ|1ä8؎²mP`;¶mƒJŒA&ÓDJ‰”R„!Àˆ³ïîrL W”Q^ÕÄ¡À#‚ŽÈïŠOST7+úåt£u 4—l cðÑ´îÝMûÁå)&à<>q—úŸ=Ö_KBùk¯\A¸ßÙ„û<E2809E>M¿ÞY>òö¯àŠÇÏfém&ݺ÷ ©9ñO-zCOÜ€ÓÈ÷ µ=BúÀ“iÛÿ1(EÛ<45><C39B>„û<E2809E>¸<C2A9>|¥´íÿûZQ”Z_A.·¹æ<Mtò<ßÉ` Þ~ûÒÓÓ\Ú(åh*ûR ¾Â=‡†½ë^ƒ¡3¾gI)ÕغvÃúvóOf >šŒÁG©~€êê:bÍøß#µoaE>ö¿{«4H™Š$Þ£Gw”£|… õÀjZÛ»¼áŒc Î<67>³§qáÙSùÎÙÇrþ¤8ÞÕb L­{ßäÏóÿ…D{¿Ì?„ÔÈÿ&@}¹àÙáàŠã"_ÿ!.H€¦â þ<>­kWÑmø4ÿ{·áÓ<C3A1>¡Rd¨”pŸs}½ ÌŒî<C592> PY]$ˆ Üïll.{LkóÙ99<39>½{
ˆÂ§…ôS÷ŸÌ…gO…$…N .;ÿÁy'<27>Þ¨JEiÝ÷>­{ߢmïÛ‰5 7qäÿ<C3BF>À76Ñð<C391>ÒÀ7<06>xâ„fñ݆O£¹$A2TJ<54>19@#˜Ý}¹ŸŒh*«ë©¬®÷<C2AE>9Iѳ‡V$3<06>KßÑ—è.§lÛÿ1m6¢TŒ3Æ88NçÙKUð%ˆ .Gðe±üñ¹¿!_êß7I‡Ã½ú
.î+û¾Óåñ+ú$ˆ¾£Â×Õ1±sÇ&uIžã#z 3غvN˜AiUs
)DÑ^YìdðÄ@òyïXF¿³q€Wî0Yºt)ÿø4“H 8QPqmû>åpö©ã.U©W½ …@š†ôl}xåÍO½×ÒÿDÂ,DÀ]7ÿˆ#CšôêÕ Ó4| ÚŽíæGpäJ ­° å€e[ÙIJ <4A>Ó@JÃ0S”@謯ø}'bR]°¾sd1Ÿ<HF¸Ç ¶®]å#ß»&søxÆŒêǦ<C387>ôÄw5<>ý3ýït<­­ Ü÷xþëôí¬ýl=ËVÅÉL롉@µ£œ(ÊiÓœ4Ê%wV“`0ˆ<30>š´¸ ¯oÐØ2 HZ÷½HbwÝüÃ#š˜pZYY9 ¶ÒVŽãš_´5à8NÂW¡Ò01¥Ä B`H#…ÜŸÖïßáûáàH‰À7Ê“9€‡t<E280A1>YûpêyûßW¿Sèn*Ü
ýOü åôçõ»ºñÞ»ZÙkÝ·ÖÄÛèWT
<Ö8b¼Vì•&XÜÂ0˜BaÛ¶Kÿ|g È|ÊiCÈL2Ç•­{_="ä‡itïÑÁ<C391>-ܙއ/ ‡ºE)Ò·o^{ý<>/$ ©«Þ[í W|iU3Yûøÿ@#}õ;…l; Wh¸ÿð”‡N95AÝGM ¨¢%å˜a˜¬®àú+ÎOL<E28099>äÑ{¸ß8-Þ“­c;‰–íMëÞ÷ÂtikÓQÅùùõßñ8]ÿ3¥I÷nÝéÙ³G—“•ð!|9L©ÇU§³ÿ£Êák¯>vÐ¥a\ZÕL·áÓÈšØE”ñBþ¹ºü½)Ÿ³'ö¿w5<>¢ŠŠ*Zè>j<6A>üý3i*Üê{å'ACc=RôF!³•>ð8Âýǃ˜†fõ†4&FÀè4fG)ÒûOñ¿·î_<C3AE>!R;„ÎX¶…eDZ,ÛqRð<52>”äôîM8>ì„ <b<2"P)SïñŸ!_6ÇòˆÁQ¼úêk‡<-<2D>NfŸ·Ú=d¯~§0…aü€§<><37>çžhd<68>ìŸéŸOýM…[ýãÖæf
P´2žNŸQßtÿ™†ðM>!µ ¨ßMéï^_±…Mú€´ì}<7D>½o$½©–—Úõ¬”ƒRR$,Ã<E28099>—ÌÒ1—ñQ— ƒä{õþÓâ…ã.¨C<11>Ô/¦?ä»ç£ˆ¦¬r<YŸ¼âO;o”/â­šÍoúèSÙÂW~¢‘]S[4N‡ŒAç“1è,2Ó{ÓÒÞ23úÓ^±…·VnaÕîäЮðqP¼»UˈöŠ|a2<06>é#¬«ÄS¥¶²µgÏQ„Ò„Ò¿ò=þ©¸ýB"PŠäÈ+€®ÃéB$!߃®ˆ@Ji Ã&áþ™‡eïÙ3~@ˆñBdOLöÄÁ)
 wï®ÂÊ”ðÄ@ÇÏuuu¾ÐvaPUøwíØÿ1ÕEï$f[Àê=6+w)¤¡ÍÁ7Vlä_ï­!Hp<> 2<06>ë³Õ«Ï1´¢Ã?¥Á´ =³Ÿ·àâÏOnM¦€/úJWs÷þý/ ߃ŽD`¦É«3M®ø0H[EêÅã„`À(¶Ð\au~â\2q$«ËßK¸ÿp™>ðï­~€<>ýP]]<5D>ã ·} ÷±óú³Fú€ãQ¶%·WlåŸ<15>[жëHx*Aë¾÷ɬã^\àP¹„ wï¾G<¯ZS¤ÀƒrßG p…£Àø¦Sãƒ|^}õ5.¾ø"¤i˜˜<CB9C>?ÏäýÛ‡ø%¯ð®ä¿'û“¯÷þfOœ"ï“?{0xÈ`ù×_Þ!nëj[ƒf€£[­d<C2AD>>ð$×Äa<> @Ѻo9B˜apÕ9]§­KCÒ«W/ä—E€Ò"Hüb™#eŽã …dÍš ¬ß°…Í›·}“1¢#B¾'ûö•(Ó0SdÓ<64>>P<>ôouCBö{Ÿ=sÐ;ï]Û^QâßÿΓSž··¼”wÞy‡ÖÖÖ”ãÏ/sÃÎJ镬â(ógYGþ }àÉNpx­ûWê¯2[‡ƒ»`Ý{ô ;+;1w¾0O\l¦OoÚÂT¼÷þ*„XE$Á²ºIW¥<e3aîÂad2MÓµ*$ß={Ò<>¼¶B/˜ŽŸ¦ïsŸuXGЗ@~2ˆÊ•!;[ƒg=VÞ‰<8qt<Ö^Q0ý:Àkÿú'ÅÅÅ<C385>'ÍQÌé]2} ” 8 :ëGAÆÀÓ@¦és¤uŸ&šŒ<C5A1>g€Hs5u¸úÜ$_~„3ÂôíݯÓï:h?R
!R¼÷þªNB ¥¤¡¡¥·Ïž<C38F>­l6®^IeU”ÂÖtÿz<C3BF>X¤”ôµ €âzƒ¬¬ž˜¦A0ÔA)?P!€æöå †‘I&ÆéÓ§øVÙÎWB>€ÙòÞ¿}ˆOÉîJö
²Æ $Ü7'j!\ßy2„Óºµ
)¸þŠóY¶*îê’Ö½ïº'ahŒÊPJž`ëþ•îÊ׎¥…Ëã "<22>úC!__"p€ï¯ö-„à¦ËNgóÚXS$]½M1ûÓyã¥W)h óè÷9aˆƒ<CB86>±¸æGÓq×uضE³eã8J»‡]¢8óøQ˜¦dùÇ»±,EckN“S<10>[†$É éÕÚµŸ˜8Nj0éØiSø2 ª*÷}!étÅ º"ˆŽÇþ2Cñ½DxùÛÚÔs'…>xÿ]òó;ë~˜O9,[eѺÿý”Óƒ¾å]ˆAZö¾î}ãÖë¾RJ#ÿœ$äýûõ#ìlî½»beÊwÇq<C387>R¢”âšKNbçç‰ÙÔÔ·SÞÖ;8Nc]Ÿï—8ŽBÊ„µm!ã{iñPÕ¥¢5„ãè¨f<ˆLF5{  ZÚ"Ô´÷ wz¦!Ù×<C399>¦ƒCîs Ãt‰Á3ǧá¯Ã¾2t„¿žÙY±Û¶PŽF~G"Xùþ{lÉÏïüƒBjVœÄþæ¿ô®|OYÔù€×|+¨¦´•âÛLbûG<C3BB>9ŠÑ£GÑÖÚJcS3¹yÁ0 #U4éîèÔ-`D÷6ÍÆ‡½­ÝÜÕ­¹@O»šòÖBŸU{«QÉèqªÚ¢ØÊ¡¾-ŒãØØ¶ƒãØŒÞ<>h4JÏî™Äí8Óà`kj>¥5IÇ…B>/Hó×ÐŽ„‰ÀC~WïŠÇÖŠL"¨>XAMÍA
Š(,êZHЃàùeËÉt.3ÏL Ì«LÉüí ÑÄСC»ôï·µ¶bÛ6õ <0A>45¶ø:@,#·<>B" Áªפp.¥ñ¸E4ᤧ£…£×±ä°ö³MþuÁ{Ÿ½ï¡Pˆ<50>Ù¦”Á I¿ǧ¼örêrº@À$
!…8t4ðKÁÅ_täðU@)…í8 -Øq8p œh¤=e õuõ”••¥G^j”tòê}}”^õGm­­457<11>ÛD"jjê|Ðï’—åXÄb1,+ŽmÙ8v(|îeÙ6ñXŒ¸'·ˆD¢DÛcØ
ÒÒÒHO ƒús0pxFg<46>-E·:B"ðüGTþu@kªýûЉ´·u9¸¬ì,²²³:t(5µµ444RZRê#ÿËB·ŒL&NOVvöß“žAzF"ç~ôè/ÿ®e¥¥´G¢Äc1ªkk©©IMŸóœˆíþÕ<51> ½ŠŽR|H<>t8,xȇÿA(//Ʋb8¶ƒeYGTÙëÀ¨‘#4W(.=¢ßëÞ³;ÙYYdf¤Ó§oÒÓ3Žè¾?=öÄW~ÇŸßþ³”ç$ï»ví¦©±ææÊö©½“XPI)qÁ[åžpX8 $#@|ºæ}<1D>Ã0éÑ#=¾Ø7ž 55UÔÖTaA¥ï—…úºzêêêinn¢¤´ŒáÆ&B¶f<>ìììCÆð_ñG
‡#¶mßAVÏž 8€Ý»öÐØÜLKS mû"À4 LÓÄ0ÍNp¨Œ Žâ ÄÊÞH¹Û³×¥<C397><02>P'¢8p œÖÖfâñ8ÿ—à釂#!†ŽPXPD}CH;iá0ñx !Œ#'ð‰ +äCÐåEID!ÿ#+ý
¾é×_¬…ýó¯t:wßìqþç9·ö]Ý(ø*Ä<> ¥¥e´4·Ð‰¹JöáQx¸´°#"€ÿKðeVùõ<17>¦WOíG¨iˆ¥ ÑC~MC¬Ó}Þu‡»ÿHáë@YY9ÑhÔ÷a$é§ž~Ø{¿Q%ð©§Ÿ#ùΕäÁÜvëO<C3AB>è‡Cà¡&뫬òäÕí!¹ãJî
ùá‹®ù"îÐqì_… †rÈsÕÕ•ô>„ë¾!ðøŸŸD†i¥ÜBåÇØº,ìøßù$¯ÞŽP”ŸHŽ9qÚ!Ÿ™ŒÐC!Øã<1E>t¼¦#‡éxþà Ép("øZàñ??é¶ûj}<04><„åoàýâîG|ßó¯t‰ìdHF¼÷ì÷<C3B7>Œ<EFBFBD>nuù_Ä9¾È¬ü²p(Nð•8@W,7y”Œ8 yÉ÷n"õìäs_Eþ~U¢:ܳŽd‡âJ‡o:Á—"€#•µÉÈ>ä%OÂáXöáîïøüÃý®g<>H”§w<ß×8«ÿ2×
Ùu®®û¦!™¾P
éGºzï;«öŽ<C3B6>œ8<C593>¿xÅv|Žç<E28093>‰£ãï{1râ4â ;ôëÿõîë(ÿ»ºîpc9kDSÊØ=ÄW”nN¹¿+ÝÂÃÅ×%„dq`ÌžuÙwuÑŸ{µk×ùƒ™6&‡ »¾íž±R²ûð?—Ô‡è+¥¾Jgz/髯ªHAÀ´19L“ãß ­<ö (%õ¡NÇë«*(©±aW<61>.™(Çæ<C387>åœÓÇûǽßeDVÔ÷†]u7yL
r<EFBFBD>´Þþ³½çt…ü¢ü ŒÈŠvùNÞ8¼s×_<šÆÊ­DÉöŸŸ És~ýÅ£ýÏk×®ãÄŽÿZDÐÖÖBFFfg<0E>¬Ø’µäŽ+̃¯#ŸµÊ“¶®¾ƒG|º8°Áûá8‰V5R=ÇvRß/Öç=äw¥Hv5ÎäEðEÜ£ã<&s…oTWW&t€;w<12>FرcõõuÄã©}G”Ì.5™‡R²ÎÑÔå}Þñ®®ïÉ_ uÝ¡®=gy×é˜;.œ#YH_•©‰G­« òò§ÇžèRq;ܤH)8c˜®žxÑýG<ޝ ?¿ýgßÈïtŒþoŒûëÂÿs®àÿ?9ôîÝïÏ0 ÝíâHëÕWÜw'/Î{ŒAƒ‡é²oÇáŠn'Þ=üƒ:Ôëýñç¿pëîðcîÿÆý)þãÀ³¾2˜†‰4 î}á ¦ï,6n\OmÁÎü<C38E>n§SJ$Ìž2Û,áñ«/gñÆ]‰ón»ÿá3&SS´ŸÌ<C5B8>1þ°æïÄ"QâÑ8Ç̘ÀÎíÛ¨/?È)œÙ)3RšŽ­Ó±¯<e$¿|öyêʪ8áìÓˆGcXѱöûwóû[ïÔ)gÿ?Jð³‡$-33 ˜žÆ“¿¹…ÜM;üóÓ¿wVÊõ+þþyÝÆÒÍE<C38D>{t€YS<59>!wc×EÁvc 8Žß@ ®¬ªS,Ü!5ôÊSFqý½ÏéŸu³jmËÂŽ[8Ž¢ÿÑÃùÙ³¿`øðü÷<C3BC>®¥¹¹å&¯þ»w1ùŸ†ŽžÀC@ZZ˜áÃ<C3A1>âÜ[/`ö”cX¼ig
ò“¡¶à ‘ñüê-Ü|Æq,\¿<>«¦<C2AB>!wãnfOÑfNu<4E>[<5B>*ÑÈw«n7o\ï×ýà8HÓàŠF²ôã" kh_¤!Ù¾mßzÑí2̤ÉS¸ò”ÜóÜ«d íK}YJ9„2Ói¨¨N¬K˜%%Eüúåçý0ꃗވFÛþŽºŠøà­¬P(ÌðáÚì¸ôÙû<C399>Àc×\ÉâMz¥Îš°Ws7íеtB3Z;^j €€§W®ã¦ÓÈݸYS<59>añ†íÌšz ½GöGNÜæêã&°pývPPSäA˲Éû¸)Û¡¾¬
a”­Ëª…)õg`UÙrVý+QAð¼X²¦(ñ¶nA…wEcE= M´·y`Ù3<xÙ dfvG)Ekkóÿ3„p¨h Øšÿ¹Bbš&ݺõÐ
œ€ß¯û³§Ãí š.¿çrF ¶àP]p SŸ™“¾5C϶ÜxÚò60kÊÑܾèEª *X6G+{¹wi|;[¶l¦º¨¥s~NÞÆ=Ìšv O¼³Æ/Ä@Jvn×+Þ ßõ¹Â'o® kX?êË*ɪ_²¾¬ŠùsoàÅÏËÁ<>]%~U<>m;ÒTÑ&<26>0¥À±m·vAñð•7éäK
E[[ËÿiB8\>€Ù£G"uÚKõúãú2{ê8oÚÉc×\Éí %8@Îè<~õ~š˜[]"˜:e*­ -~<7E>ÿ³«6rÓÓ¹mþjŠ+<>†æÓŽaÑçÛ~}¢ƒ@2sÊQ,ú\§`Í<u$yŸ”¸Èw@AÞÇEZ7N:ï ÓÀs k'*ƒ…Ð<E280A6>—÷î(Á0%¶­üÞ>zë˜|ÒtWö'W”ãpùoîw¯Ä¥ÿõ{Âá @ÑÞÖêZÿwápÈåeE©ú´<ºöo˜Á€O³§ŒãÖ¹ q°ÑÍ<C391>Y“ÇøDP<44>¤œtî Ý}Iòó·ÐTY¯kýæÜÍ¢<C38D>»´n°As€ÍÖSSP¡•=±KçÞI}«Vú®¿w~Êœ??÷r?LxŤ”ºžÏ<C5BE>|òÎ*”ã LÉóÞÀïs?Ðà(Š }$7UÔŠ ÇO¥´¬Dw¦stAGs•»CIï,ýõïñ;y¹¥ÚHî÷÷N_„ü. `Þê¿ ˜Áf0à#ù¶KAÀŸ=p<>çnÚ<6E>Â5ñ.õŸoi§¶¸Šd™l¤i•cÙÜ»Ám/hÎQSTŽF:À÷>J¯Ñý‰4¸½„KVÊ¡¾ü (½òÁÕ]\ÂÙµ{§¿³©pK¨šÔ¸mu?!„Ö?Åön9†ËÍZ6¢l1SuW“¹×ü,ùÞ_¥±Xä?Žù)pÙ“÷ø'Nœì¯ÄgGîæ]š\O<>2Õ/à$ Å
Ø´~ÊüR̽¥lîžÿþpý¹oÉë‰{îʇ¥ßÁâ »™=íh.¿÷<C2BF>€"ÞE8ù¼3ýn;wo§®ô >~ÁÙHt5®°}ûVw‰M%÷ê=‰ËFÙº'Ñ AƒÙµakBì<>U;fÊx¤!QŽbîµ·v‰|¿±RÄbÑ#+ØøC~
ˆmà®ç½ý0nüD¤”ÜxÚ±)D0eÒT¿bkÖ”±>Ø´q#¨.8€ÝeÁÜ[È[[€Mî§{˜uâhÂÁLr7ìfóæ<C3B3>ÔV°ì_à8ÁâM{ÀcÅõMìØ¦«‡<C2AB>9fœŸþüéòU à™‡®eÉGE¦ÉÇo­ð~Ê…çàÄãÄcqª
Ê)++E9ýû¶¥»ƒ¨Ð"«¿þTVUÒZÓ(ÌP<C38C>1S'h¢QŠy×ÝvHä'ÿ<>Å¢ÿv"ø2ÈO!€y«ÿÂÌ´ù—LãÇOG±»dO¢y“€)S¦ú„²qãÆÕ<> ,˜{3Br×ìÑ2Ö])ÁÌ0üCw¼^:÷~¾Coc;ÁʶùlµÞƒÀqãÆŽ÷ÙÌÎ]ÛýÏÂ<C38F>)^Á±cÇaÇ-¬hœX{„ƒ%(/+¥èÓ«<C393>«ÝkPYQ<59>RŠ~ýû M“ªÊ
ÚZ5q¬~]Gñ»~Þ%Â}Î<>´¡¶eYÿ6"ø²ÈïD€O(ÅÕ÷>™`ïá cÇ2|ïûÒ9w±xó.ÚZøð_ï„…snÁql¬-ÒÍ–]™ýñ»«X6÷.­ßÉUÇŽaÑú]Zv;ºfîóOÖ€£xøú YúI©­XóÞÊ”ž{Ž;J‰6禜r<Ñæ6â±8õû²Ÿn\Ñ»W­õ»]5ªÝ-ërzõF55RÐVßÊè‰cüVnŽãðè­w'íœî"ÝÇ}âs]}ÕÕ5Äb1úôéCŸ><3E>=þS<C3BE>®#È[ýykµf<C2B5>·f73O<Šìý|ìÖWbGc¼üè} $·-XJmaÂà/ιËõñëU5¼/õ%zo¡¼µEÌ:ñ(áê=ä ÜU¿Àå¶e# ÉÖm[|âZúq)ÊQ)صgÙƒûP·¯šçç\ÊaÉšR¶mÛBma%Žemi'<1E>Q·¿
'në>€‹ã(…²mª««ýδŽeQ}°ÊßàZÙ6±ö(FÀÀ±t|Á/ní€ð޽%Å%ìÚSH}m<>qãÇÒ»W/úôéMNNß4|òW¬xWû8”âÜsÏO9'ÊËŠTòêÏ[[ ÿ®Ùͪ×Þõ/TœþÝs<C39D>B÷ѹùôc¹má2ª µïŹ¿ðÝÄ
h«oþë=²†÷áw×~<7E>úıeóf$ &f(ˆ”ºËF]q¥&< ÒØÚée$а¿Æ·<gM¬-¶͛©+;Èøé“‰´´Ñ\]Oåþ~nNvÊQÔÔÖhö튣ì¬lêëëýÖtÂëÙï7…ÔË>oÞïIjí}<x°ŠWþú7]ßo0 Ì@ÃÜqÇ<71>ß8x°iÓ¤ÐÖ·eYXqH4í9¹\Ñ•LRéx)8ykvë¿k @J²‡õóqÆ÷ÏùO¯ZÏcW_†$ÁþgM« Ç놩'¨¾¤Šëî{Y'íÿ°0A“ú*ªvàµÅZ&×UðØ5?æáë.`îõ2÷ú i(;HÃÞjêöVã8ŠgºÆ'&+g[~¾ŽÚŠhk;±¶ûÐÖÐB[}3íu-ì+,eq‘†"<22>­DÚPŽ¢¶¶F—h;I<>L,wÒlÛKëóî?¥¹‚ãRвÒÔV:BHw¯"éö;<þç?ãˆ_¿~7¬?âë—/Oì*"ÊÊ
Õ#«^òÌ<ñ(ò>+Çñ9€θè[þ5žÌw”bwqµ…®˜û ”c#¤Ám pÔÐQlݾ €úJÕd<C395>臷ªæ^ýmr?* šì*ÚÀc×ü˜…ëvÑXUa˜(Çbö™c¸çù×@Aý^í 8õü³Èß²I·linǶlêÊ¢b:úgÇ,™izµ;*ÉœÓë6;+›ú†ä&ììlwÏ ­`ÖÕ×<C395>RääôB)øÓÝ÷p(xï½÷)(*ô9€4$†ašÍÂ00¤ Ó3«'á4¯+HbGÃp·Ž“RwH7B¾·ÔóÀ:
tÝR¾˜xpî¹çc^þä½þ<C2BD>ºb·Ï¯”äoË'{D?êŠ+9ã¢o¥ Ý (xø² ¸ÔWpÙ=¿óBÿ8
5¼ŸÛyIßfÛ6¿»öb®¾ç) ÃàºûæsÊygbÇl*·•‡P8nŸ>°m@0Èâ•{wÌx>~çýp)øèͺ5K$Žã8ØÑ8ʲôÙzw<7A>ì¬l•GÛè?d<>‡o²³r¨««u?gûÄ¡Ô×<55>HH¸
¥á¬>HAQa§ãRhõÔC¾aº×1R¹þ<C2B9>fãòåow¯zý½NŽ|×÷¨`üø‰ú£übþ?p”âŹ¿ð#ƒ¹v°qã¢-íÔ'šGÏøF,;FÞšz<>·´gÏm»š5´<35>ßH)¥÷R`[†i²m[>YCûø¦¨p”Eœ0}
íM-”aEc <ˆh{»vþ8YYÙÔ)E¬¹]ÿ†<08>.“qài†Bø@­ $õ,êöîÝ×ù ñ†HA¾ÞÖt_m[ÛoÌ?\§÷йkþß|yïƒ;Q¸î‡¾Ât×scÛ¶|7l«'å<>ˆö:þ¶£YSŽF90eÒTÖ­Y“˜T>Ü…Ô j
 ˜A+j¹s&xjùzÍ \:ܱS+—<>åÕ88H¯úØÖ~…É'K¤µÝm«ªh­i"+³§«ˆ$êçcÍîFÕ.këjñº£øà·öOhú½z÷ê|¾Ôvì$ÑûI<>tÛÑICbˆÄ>Gòk®~Ï2úZ<04>÷©»!xÄàMÔ®ÿykv'lýd¢•ß]ó¯Ù(fž0šÜ-»™9e4y[
7v<ùÑ8 ûjyaÎ<61>Xv”eŸ•<11>ÆõJêË ýY^+e»rÎÏ
r8ùÜE±s÷Nj ö³qõg3eV4޲Òº‡‰Çb®¦<C2AE>ÛÇÏ!Ø-L¬¹<1D>×óŸˆWxPW_çŸ9ü/PUU™Âþ¥kNJ<>B&<26>o®¬ï8<C3AF>_ù‡##Ý4ÛôÚŽ-YWÈ §j—oÀmd<÷Š }ŸÀb—PÆ<50>Ÿèß¼Ímò¨0!7àØ6[·mEM²†÷åîþ¡u†«.à¾ç_óçóù‡®eáÊÝìܹ<C39C>¬!}¨/;Hmq…¿1ƒ0 <>¼I²†Ö˜Rº$ݲqlöúVzdêžA]uϨ««%ÚÜN¨[˜hû·©<C2B7>Ц¶ÔŽÌnؘ^ åѲ;W@ïÜÕE¾¾§È¹«ßC¾p•:¤üD@Ç„8ùúÌqå8ˆ[>œ2CiÝ2Ù¸ÚõGïј:e*ï½¢·`q"@vL—:ç ë«#€R§oi/‹Ãï®ÿw?ÿw½aS2B”­ãöj(¯æ” Ï&<1E>ùr೫ýë½( ÖÛóó©Þ³Ÿ£Ç<C2A3>¥¥®<C2A5>½eå81ݺ»I¢êêR~:ÖÜNÿ¡Z¬«Oì^rMKâOù{ôî„Ò PSSÍ?^ýWÊ1C˜f3hƒ¤ƒCo 
¥Ñ½[f0˜¾/cØívGÐ÷yVèrýX,F{{{—V€r<6C>þ¦;.ˈ4·Pëfù¼8÷¼8ïôvÓ½6nÚHΨþäŒ@ï£Ð{Tz<7F>î<EFBFBD> bƒ<}ëuüåO÷Ò÷˜¡"<22>-Ì»îb}´y×|ן]Dz<C387>†À±,œX\­WÙG¯½Çå'ñ.tÐ e+Ž?ç4-çmå§|×—é|?oÿ>e;´Õ7k-¾¾Žúº:êêë|–™Õ#+±ÈýY=³ÉÊÊ!++‡ììbÍíZ_PPQºO_ïO^ê¶#»vw^ýz:…»Ñ•V®OÀ0Œ¯ÌþãpbýðµÕõ/xÈ·ãqÌüüÍ)Ï”¦ óò£÷³xÓðøÕWø¡àÇ®¾Ü߈ñ¶Kt§ÐnàÖnášã'0yÒd6oÙL´)BS[OÉ"oM<63>cÇ6<C387>8rè(¼È[<Ó”=Fñéò•Üò«\Ž;ãd®8m¿^¤÷è> <>;v¸ ÂÂç>=dmi§´¸«]A¨[˜ººZßå‰îìžÙ]¹³äÏVRz€¢ß<C2A2><C39F>ÔÕ×ùJã<4A>òý p9A2¬®a÷®Ý¤ÎVJæFц¿ë™Î†2 “RÇF¾"xDíH<C3AD>P†ÛFRH ¶î^.…ÀN¹'<27>ü¸mc>zÝ%̾çqrð“;æ/<2F>ÞOî¦nògbê<6F><C398>ðøÕ—sÙ½ðgôÚã'ðÂg[™uìQ %bqîûã¿;i"JÁž]; vOmàkÕ+ Ó`Ƕ­ôØÆ½5\~Ê~5_G ›ö×ù,Ü]À½Ñرц6¬h Dz ¤“&U,;+ÕÿknG•åûé7x`Êó’õÁ`·0ˆµF¨«ÓJáU÷þE®K¸¤¤Гì(IKá[€" <ù¤góÒG~Àt·ŠM²ºä_ Žkátl!*]%*YÏèˆ|+f!s?ÓÊ]î¼ÛÈÞŸ^#û“ãfîþøÎ‡ý§N<C2A7>
n_ø¢O}7ïâÅy¿@Çã 7ìDš&K6o<>¸=u8W)<29>TkjeHÿÁšý»ñv+naE£Zk·lº÷Ïâ¿^XŽr åÕD[;q<“Ž?égžÄä<13>eÚé'’Ö=L $<24>"<22> ѳgïª<C3AF>6·wB¾‡ØP7Ýl²¢|_¢K'PßXç{ÿPŠììÒzdø;J ©·‹‘¶oßáçEH!<21>BS<42>! }ë+´oZŠi˜ÂpW¾á¶}Ot)ÿ: ÷´Ùëø»Ÿ%ƒÞgÙÝaÝšºÉ¯òcñX´xí.&LšÈ¬ãŽbö}Oø,±½©<C2BD>O?–Åv<>d${$ÈâM;è=z ·>»„IS¦`L¼±ÔW<57>|¶üC²‡÷ó£r—<72>5”eïéÕH ¢”Þ<C383>»iÜ_x1GaEb´Õ6Ò«woö¬ÙB "-#LFv**`Ç,â­ºgtÃ1CºøÃ¶RŒºŠò}ô20iÇ.MàÅ~•åû“ªBß' 'ÇõøÃ¿Ôiìuµ¾(/ ¦»Ó© ´}ò,¦€ìsîÂ0Á ·ï±D}<03>6[!…ÛkØQ`$XBj·¬l@96V<<3C>|+niÈ]«C¸³O8šÜµ»é5¼¿ëÏÕ¡Ðg?ZOZfz2}±ióFÊ”µeÙÌ÷Ù¯³éå:¤¶é¥¡C¿¿}ö=† nc©¢¢Zkq,‡É§‡R…kói<C3B3>FéžÙ<C5BE>xLOT<§½©…Æê:ššš†DÙñ@š6i\÷tvVõ õþ*h3QHI}]!×<1F>L(ÊÝÔ1Ô-¬W¾Ç9„Dš þꉋªªªRÛnmB.—0Ü¿-ïÿ<C3AF><C3BF>€¬Ï%”¦Çë¸ÄöuÜÁÊq°ÓmYoø²À<C2B2>BÝ_ï%â@TAÔ<41>ÐI7bÙ. $³Ž?ŠÅkw1ûø£™ýêr5¬,I„„<E2809E>` ¼[øFb¹$í`ðè¬<31>?*î½ ƒiHâÑf €—aëùêKKŠQŽ"‰1á¸)Ôî­ tÓ®DÚ¹”ÇÑ™?.ïu,‡Œô š››êkkéÙ3Ëw)ƒ g<C2A0>žTíÓnâ:j}B".è?d ;‰zÅWìÝO´¹<C2B4>þCùéãÒ<C3A3>˜“ä@4E&InÃ]ñA 4 a÷´ xõ^3Ÿ¢½½Ý÷oã {€w<E282AC>PXNœÅ·’¾£GA1G<31>Ïro±X å(L/±3wí.¶nÍçÎ-ùäŒìÏ£×ýÈ•¥p÷ ¯ø?j¦§ù&Ñã×\Ém –€<~Õe,ܰ“oýðÛ\:q(wÌ…š"íKx纞aØQ#()*ı<1D>¢­ ûj5QØŽÎà9P­÷ÌñB³.çJo©÷ r0ý”,ACCƒGøþ²ö8€Fœ…Ñæ6—½p9ƒÂ0õ¶/iÝÓAéí_„¡moÃËŽöí"+‰bBOòθÛÈi¤ÇØJhŽÐ?¨YqkÞ-¨ï?âÛå]¡_#·kÂðR4¾òndŽ `íŠc¸Î ÃýívG@ Κùd;Kß“üàÚ¢
<14>;ïV¯Ýíûûkܬ€3¾ó-nœ1”Ãâ Úiû§Ù?fáçÛ¹rÊ(L3È Ÿnõ-<x#¹Ÿ2løâm<>AÑž”ãи¿?iÄÚ"8í®~oë|6i[¶ÞhQjdvëÞ!MM<4D> v.¼}æõx½ðnEùþĦÏBûç=BÓE¤ŠXkD#¤_aH¤”BÌPÐçr†»syQq‰V´<CA( ùŽË ÷ÆdƒÝî*b@ã+¿ôW¦áZµR$Dw\"ÈšýT
´<>¸ö¸4lWìÇè6-LC­E·£Ø{â8è1Ål-Ñ…ÐãÓbI¦rFöOP z O쮩€g?LèÊ) ®š>EŸïpwÐHXž†ÀQŠïŸÙŸ¿½·Ÿö¦ͪm<C2AA>šuûÍgðöšƒ(ÇÁŠÅ{ò$<24>Ä—»ƒÖÑ<JÏX÷î=<3D>RGÙ@@Ï=uÒ‰ìÁ£‡ƒRÔÖÕinÓç(©·lC@zV&í<>­(ÛÇ<C39B>£F`†Aá4_Çrl¼‰š<E280B0>ƶ­Í~“<>zUJF¬ˆ{ˆ8þFf…fÓ!b…‚åÅ&,¾™€ÔHxEB{\sGAÆø4,KÁÞ8jLÀÝQI?×TZ49àr¸$óS¸ wín?³Ç‹ÕUQSRåï˜iiõµýÛ.cц] uyð,¸ó…¿2ûÄQ¬« £l;n3tðPìxœÌ>=˜ÿò_¤xYéü.Áö¤á&=˜†iúÖf‰$ <09> ©¹Y#/-D(=<3D>@Z<>@Zˆ@8ˆ4 ÒÒÃÃ!Ò2Ó ¤¨k¬ÇÈìÓaJö—葉±ž´Óôsá4L3H]]=Ã$`˜nk'-Mpò©aN:3̉ç„ñöƒöø9—€)!œ©‘å!E¸¹'¡;—e…𑵼$@Ô-jñˆÃ­‰¥Û„4ºOJÃ0 ²Us0ÓÐD—ê.ašB\0`bfj, «÷w˜8i²¿‰¦<E280B0>î9GçzM˜8”bå¿c„Rä[?ü—NÆÌ{þä³ÿ«ï{m)(„r4h¥EŤô<C2A4>nøÉ±üí­bj÷Wmis}zäÒ0Ü>Ä .ä}÷²ˆµ}®‰¤±¹ #``¦…0p FÐtW­dÿ<64>ý´Ö4"Œ?åØHÃàÀ­¯(ËFM„´7´"M£SÐÆjkçÛÓN´i
èa*¦ž«9czº aí?Z9ó‡pà#<23>ìöF(<28>h„&
SèÏ„œ x¯$Ày#ã¾"únq€óGÆi™FtgÓÕ7R?£×ÄöŽ8{}ÄѲ¿ÙÖ2OÓý…Ä©¿ü±òV¾7¹ÈÞ<17>ÔAýòmÀQ,œs ÷.}Ã/ö©Ú¥S°?| ¹k ˜uÂhîxîe”uEûqlå·{I$Fè—íÕ=›Úý‰¶ºà^c˜¦»<C2BB>H0·ùƒ÷×¶÷ZƒPz˜æH+fZ@#SH†<48><1C>4$ÅE^øÛÖÈN\gIÃ`è°a!¤§QVZ
ÐT™ˆõ÷˜CU~ ß9îZ6äêãfå{H<ñ’ &NÏ@JÁªGª°hjš¨k®»Èw\«Á®½î.]S€)o8xÜO÷ú $ÀŒáqÚG§ÛA
Èœ˜æ­]²LøŽ8qŒQâ6ÄâPß­UZ7P@·3nG¬+ü›˜}<7D>NVÌÞßGp<47>ÛÌ!÷‘[ý=pAr÷ £¦è çÜÂ’Ï
¹ìØaüê¥w¨.Ú<>Š;,ž{?Ýå³sÛŠ³5 ŽRÔìÚ‡<15>úSQQP΀°ÑT]ç€aÈ€™<E282AC>IáZ/sW&¯P=û÷&gP_ÔTººÔ•Wã³åЭ_MI˜xÒ±H)1CAœ¸E0"QX\€ã(ÆŒËýç_É;ï¼ÁŽ<C381>»˜ë²lèfê•’úŸn„1ô%ooå㥭V—´"©èÆt T¼QàÛ#âü«(ÀwFÆy»8ÀE#ㄎ  ý0¡ ¨mQ ='ˆÅ@о=Ží@«m64zà,]ìb.^»›ÙÇÍ¢9?sY]b½ÏºçÏÚ"X³ËŸy¥¸î‡Ü5ÿ\qü|VÌÃW\Àuÿõ<æü”EkvúȰã 7aù·€R\ñý‰¼ÿi5JA¿~š´i­D†ÃDZZÝ]b¥Ÿ<1B>¢y8ž#BsÃ4Iï™I÷>Ùô1ˆíù[PJ3¢/Ò4ÁQŒ}v,{|'Ò<>ƒ5ú(Á
E0D 4MMÃ4!<21>¦ ¹z 8Ò] ’šÄm
v¼Q…R‰AþZ8õÊ gÀŠC8,Üì(ýÝ Àƒ÷ê7NpÊÍ™LiÕc:6; ˆïŒÐ¦À8P·9NE Œê¡9z,Ñ.üÎâæä|fŸt´6ÑžÁ;çÿ•ß_ýCr×îFx|ËVlݺ…ß_÷C­Ñ^D)$«^]Ž ,|èr?+pG%ñ¨.žÌ߸‰Ú¢
úôê<EFBFBD>Bh‰ÜÁþýûSUXî‰t°…E
@Jé!%é=2ÉЛ`8<>»gŸÎOJغi3f(ÈØñ°ã1½Õªƒo.®[µ”ƒ<E2809D>†ïxnÎ ,]S®ÝÛý¡ŽŸ “a2ò«p°Ùö÷X
Ò%= Žé, 4K¸ðv¨Þäš`6lüH‰'Ÿ=ÙTdâ`½W²!5—:þÚ sa6/jÑD" ¿\Wi<57>øô•?ÏúP
úž&º¦<C2BA>¸û;­®üo°|T“yÆíZ œuFºç
žuÂÑ(G»n[·æSSTÁŸ›”(غu35E•ÌpÓÅÛfÕëïú¬ìôï| Ã4Ù²E»Œ•å`Å-j÷ìÇŠ[Ñ65Ð_ˆ°G1¶m¥¬üŽÄ`šž3S`dõïE·ÞY>Çè7jkÞù€ìáýùýMßgá*MÜŽ¥³<C2A5>m+Žm;íÁA—ÅûöÚÜ«)®LÉ®¹tâi`hðqºu7èÞMðø¯Z'™U&pçã¬*ƒ!'¶Rº&ƒAǵ²Y—;tE„gÇïÜÄ 8Aו±ko€qCb¾[9æùýyϾ Ãξw2`†„pbŸµw´ùG€:K_\AÆÉ7{±€Ý!µùç~÷ó lGûìDEœðÔW7mJ 5õœáý5—p`ë¶-Úÿo~]¾ äŒÀÁ<C380>º€¢¢²þý$°éM^ @ -Hïá¨,ÜÛ)KÙ¿\yîb<C3AE>0éÑ'ÌœžºÒH¶¬YO0$ÒÐFãþjþ²i/·œ3•Eë4ךyì(m.ãý¾í'À&
>Ç3B&yÝÎâõšxzT
LÓ¤öãf$Œ;/;çfbHM0¡ Øtï®ó÷}<>P¾.ƒ lõMAÏGà¥8h~©ØV<64>˜ïÒ<C3AF>+—•+<2B>ø<EFBFBD>{ƒŒ¢w b[#ÚÂPšûÜÈÖ Ç=ßhéw X1Lßô&N˜˜²9±<39>PSêz'è'¯zõ<7A>$¬zu¹ž-GéŒ]a°àáq”âÚûŸq8)N<w<06>`Û±ÙÕdqà€N$©¨¬Hɼ4d0Á°î¦îžI $é¢I¤£t~<7E>ËúCaÒº§cLí>6%“Nš†ã(º÷ë‰íÀUÇÅ¢u{ÉUÇÅâõàhGºf̯»”ÅŸïÆ0 6mØ@mY%yÝNÞÆ º-<2D>«Á¬¨×.WÓ[‰ÚÏþœ~—ë/Q<10><10>+ž¾³E€® çà†˜÷ ر7¨d]V`%¦<>­åÁ„ûyr˜XLÑ#M<>‚¶ÏÛéÙ'€Èl'Ò’$ТÉVž×Q$¹‚XùêrrFö§¶¨œýýœ{<7B>>çýü¢¹·à1;ÛŽñ…ÿDÙŠÚ
ν…ÅŸîæòéÃÈÞeë"<22><>»vr̘c°¢1ßüÃ/³ÒüVZ÷À0 z@Åž²”J<18>'ý€Q83<38>Œ¬î„»wÓ .ûßòézüõ…<ð› tï—ÅmϼÌc7þ) ~þÂËx
…‡üG¯ý1K6b˜Fe!1Œ ß«°~_¶Ù—–·!%xnOƇL<E280A1>+Iv{Iš8ð_75rÙù·>žíœ4±¸¯„àØ°ãÕZ&þ(‡ÿ¬eÜ÷9 Þ;{°üµ6"u¦s\@`Z˜Ð´0Á@BÏp\N`´øÑé˜óÑë~À<>óÿªM@wžkŠ*|¦¼hÎϘ}Ÿn~¬­‚Ý\yü(ò>ÝÃÌ<13>bâøIZŽcsåq#Éû´<C3BB>y×|—ëîÎ-ËqÌXÍž <03>À¶-úôîã"U`¦¹øŒ¼ùIµÏ†Ó{dÊH#ÒÜÒ¥CJISsiÝ3À‰rÛ•cùÛò*ßVæüö»(åÐc@<0E>ûkiª¨gfÙŸ]7®LH yßFîúfO?š%
ÙðùçS·>ÇŸo¸EwÑPY<50>ݯqG#Ê”Zæ*ôg—9ù„áE{•Â<E280A2>Í+»_¯Ócu{N9Jsï)`Ç?ts»û×oh¢ëo(ÙœNh:¤M#%Ä6µÓ¶¡°† ÍÍÃ<C38D>ªTN Ðz“ï œu.ÜœåúrçÞêSš§ þþêï“÷Y3<>MÞg…~ý¼÷†«^{Ƕ<C387>Òà´ ÏÖ<C38F>8”bÛÖ|êËvÜ¡­¦eÙXÑ8Ã<38>¥“5„NIïÙÝ<C399>íâ5 I´=ƾíEØñ¸O<04>p', õÈðë„)¹ûº“¼ôÖ>ŠKŠ]~#GŽ¢¨¨ˆLš<äoÝìѼþRp 3ÈmÏ-C˜!ºÁÕ¥wÍå§g}ŸötOsY««|Aâïñn©…—œ¬løåM&?úfæ¦tWR¨YÂŒž¦Óå”rM—Rº9<C2BA>a“ÛØgêÕnÛšƒÄ6êP÷èKzpð<70>F¢Íš`Úl­?Tǵ%àÝO¹YóñY®öïAî¼[Éýl7¹k÷¸¬Úgf …ßGÀµíf¶Ì¸èrFô'{x_}©P§{éE<C3A9>½üR+„ ³OOVUQu°ªª*×Ço¸f<C2B8>òÙWZFÝûdÑÔÒLSS#½‡ä¾Îg챓A3B¸Ëï¿~û&?ù!Å%Å.•käÛ¶î ÖTYOÙ§;¸ê8Mð'Lö5÷;æ¿Ì þÊmÏ-`ò¤ÉœýýóÉqX.¿ï÷)šALCÛÿ^$Ï[ù†Ë¦ÿ ±šÍ}|w…‚î½ë>OÓæ¨û€Oצ¡€¸…;î»,Ú¤ÝÌÅ 7†Qh/_tS;Ñ<>혓µhÛÔH ¤ÓÖ,ˆ[µmûãMª ˜uüÑ \çÏ\M³Ž?šÜÏv£m÷£`„Iî¨
&<26>Í7Q[Råj´zV[‡vË$ÇÍ8ØSJyi)ÊVØq à <20>â<>ŸžÃKËK±âq7l«sÛöî/§½¾…´ìLî»ñL^yŸ®¾qƒCÖ6JKK@š+êüÉäáùËÛû±mýöe{KQŽÃ°¡Ã:y †ÛdZJ‰0[6mB˜“'Mvi^úbàû½'²kç.¢Ÿü„FfЀ´ ”m3rš^<5E>Ç^œd¼léƒuŒ®<C592>üû‡ý PÌͰ\‹Àñ¶ãæ$ÐL7±C$Ípº"²¹Ý·*V¸äØ8­ÍšF¨‰C<E280B0>.Ä"óä1 SGïm*!‰ÑkdfÝ«‰`ñg.Wðd&[·mõWµ£`ÒÄIlÉßB}IR
ι…Ã5÷>CöPF®-©ÄŽY|öÁ'æÉHi0dèPËÁ¶möïÛ‡cÙÓCüaÉ' ê;È_>(-/ÕNž^:þŸ‚|Wp#M‰º÷Ïöý÷ËÞØË á¥7;o
ÝüæúÈ]_ˆã8~¥íG6ãѸ>ù•Џûv¤1aZ™š<C5A1>á%¶õÁPë 6d kçœkzùר6x¾.!HAz (Ü„Z0MA4ªuñ‡e+G÷_­$Åä0€oý<‡à#ml+”œ~<7E>A[»"³NQÿiÄgê¦í¹š,‡Ù'Í<>[óé5²?³ïý3æüŒ¼u{øàË} à€®¾ï)@°²ø]—· Íý) ,xøF¬Þ…°Õvüæ mvýÆ6Â<36> 6”œA}).+ÁjPº·,%­É˜. Üý ^Y¹ŸKÎðÊÊÈHÊD9rÊQ+ESe½<65>|)%ñ˜ESEȯÜ
f¦ÐÅy?gñºÝÁ€ÎETp€»<E282AC>ÿ……{° ¥`à1„€òü0#§´ûÕdWÔæ±£Vø>ú4À€^5¸þ+zNË¢yc==§gQ»®SB÷iY´l¬G<1A>9Uv\4¦;'®ùh[€L'45Ý×= hЂöùÇßO¥µ~7ç\>“?ò“B€DJ@îg»™0i"[]ßÀì{žðŸ;÷V<C3B7>Ç&ï³Îý)¿˜ÿ7t_<74>…sÊ<7F>nQé#W—»_ø'ãÆ<C3A3>ÇŽÇu´ÍÑ)]5û*E[CŽm3ð˜<01><>˜cؾ)3`€Ò<E282AC>9LÓÐÖš”€`΂¹ÿú3˜»pµßôÁKÕ¾÷æÓxù<78>ý‰v°À/ï•É'«µô€A÷þÙ~âªW˜=2±Ã
`ÇâÁ€ß/±#(ûv¦}lÄ7Ýá4]M{[Ô¤ƒÈ-}°'è¦ÞÄ÷œEýúzßP÷y½ÏÒ[·ÔãmgÐôy}‚ý› Ï¡£4G1MMdÍëÛÈDÜß9Eç% µ¥<1F>Öc ½¶œ©Ç) š\Èß’¯#€I¡a<C2A1>rsçÝÊâOv1ó„£É][€<10>÷éÆ3ŽÕo~Àb7`ô‡ë~È<>ϾÂ/æÿ!«_;æ…Z%MûªÙT~<7E>ô~YL=å8̀ɕgŽbÉ…È€ŸŸêfèѣ)-+ÕZ¾¾µ0gþ*7ö/ü•ñëÎaá?w&8•Rtï—•R<E280A2>#„ð9Àä“§'¢•¶CIi)HÁ•÷=Æ<C386>Ü…mÅX_ÊUÓDzà³mÌ>öhçá6wðôc¯u 7±1Ë5å\G°µÕQ:J÷æŸÚ9å4hÚP<C39A>”°á“4¦<34>¬}ú=¦eÓ°®ÇJp”쳩_§Åší>3î€é¦þx™BÞyoL×g®å”k ¢±<C2A2>ÄãPS/|î!…Ô<04>pòÀÒGîÄvâ¾0ºó¹¿¢Åì“ǰxÍ.0óøÑä®-`ÛÎíþ}3OÍâ<C38D>w2iò„€•ÿÔÏì9¤ 剷´‘Þ§'ÒÍé»ú¼1†ÉOï_Ì“ÏàWóßöS°¥)™uþh^ú Ä<>NÈË+÷" Iaa<61>OJáwôA¤¥•˾=˜‡ž,¦¥²Žnýu9˜‚¢â"ºÈöµkÛvÜ.ɨ‘#<é(¶åçsÛsËøÓu?aöÔ£Èݸ å(­ÛÅÝ'Op+“•»Óšý›ön ”P²1ŒV¥b°½'ʉÁ®ž('<0E>±os€!Ý ÜÕê-9iP¶QAŠô)(ÛÒÝwqën•ë{˜
¡ÉéfB‡øäÉZÖî ðÝiqÊ_ÓîäV7)ÄJÖWnY6Wåço¦¶¨Å®ö?ó¸£È[·‡YÇͬ{ݦFnzX¯á®‡Ð·ð çþ”¼µ8ÅÌG“»F7•\ù÷·iÚ{<7B>Ì~ÙwΩÒ`í!~e«Æ<C2AB>Ö ž~p¿|üUF<55>Ý{hØ_Ë£¿¹„?(G9ކ? …º²é×<37>RŠöx ?±J ÷Þx2¯¼[J±yÍç€Û%Üm[ãe)¥°,ÓÆêØn2<>ûÐmÜ1ÿeÜô0[¶l$Vr5B
>Ë‹òí;õÄR`š Ï^ŸþALÓï¿…R`+‡y7U2àÇ?íÆËO6sé­ÝüöÒHÈv<C388> $ 5w1 ýþ¶®ö ¦¶,kõ™r2!ƒˆ»–ÛM1U±„@ܲl®ZùOÝ5jñ¼[AîÚ]¾·H§áŠüáºK¸kÁßpl‡ºÒ*^øí ,[_•ǻ}•"? íõÍ2Òp,‡ nÕ±­”¸ÎÎ];¨+Ó±†gºš¼ÕÅ!hoj¡ @Àóc}Pæ"Ü<>|¹”SP¸G럦A}y ±"WTèe2÷¡yùíý'6Ž1|D"µÚ½Î¶¤!(**¤×È ¤ë t)Ý÷¥ƒ<C2A5>£¾¾¡ò÷`+¶-o¥ë¸Ö@Àõ·O?Ï•÷ã j£þ{ílƒk<C692>µ5¢5÷ÆrC¼Ó®éƆ…Íçþ•À±×wcÃüfv7<–Ð'®½±Iá„Ê íl'Õ <20>6]P—lÞsê<73>™uüQ̾çq?+àŒï<C592>ÊI¤Š»J`îg»ùÃ5?ô»ˆ\û_ϱðaÝØ/ædÀĎƱ£qj÷V`Åâô5ÛŠëÄ WvJÃàéßÎfÉêb¤ÇÖÒ”wþ÷ËüéÁKYö¾Ž zý“³¨­<1D>à<EFBFBD>Ÿ<EFBFBD>΃O¬Í•õ¾á\Œ—ŽßúÆç,RR[ZEÖ°¾L7!]o¡ûsÕ«AÀ¦÷Z€Dñ‡Rpôºá((ü‡.X9°&“<>'·øî^<5E>v¥Høé-.dËÒä¶aa³OæëÏÊe¸~I€…ï  }fRÀ'êšfié%&𢼼X=²ú%f¹É»fâ²?^ûc~ªÍ;3``Åm@;‡jŠªHתøÓ?Áv, i²hù”²±ã6Žå<10>Dé;b0Ûvl¥¾ì Ï?|yù"‰âØ»wï¢q zðR–®(ãÊs†óâePS kúúöî£ÓÊ#1*++ õÈLŽ×Ÿ¦œ|>YG÷94¨óEþ ß ¿èÆ+ôŠ
iKவ_wþü§hùàw¬¨è†át¼ØÑÃw)6¿ÔLÈ€ã·}»Dà*e(<ð'ƒË§Ø)5 =ˆ^1‰·Ò󃘮œò‰akQÐËÏÅV:ÝËC<hqúè­1ýì¨ë<C2A8>¬<EFBFBD>C“ õnX1óä\uâXòÖíæO×ÿ„Y÷<æOž£Rÿ˜ã<C3A3>Ô}kŠô> ú©{½~ò5÷>ÍOÈ則f²äƒbÁ¥wñ ¨0ë?^CÃÞ]Z¸"M<>«<1F>Ätÿ_wf~þ«—P®Ú´úSÅBlË&-3]Ç ”¢wïÞL:ï¶|¾!#GŒv·”ÓYÆÓÏ:•x{<>¤¨¸È_Q#GŒ¤¨¨…¢é@å[÷0tòÑ~"¿o°;+¡® ê…Dℌ„ÏÞ<C38F>c¡a»NÍ2Ýsò=D¶—}OŸ»¹úáKˆb[ú¼Ppùoè*;…£ ºVÛý! WV<57>µO´èç+ýLËË+ð‡ÒV@Þ:íñË[·œQýýUÚî¿óù—-•¥AnݺUGÑæÝÎÂO¶ëèàZ]î•3¼/•ÛËøÙKyâ¡+xà©7t¯/ô«FÈD ùÕ%¼ô~9?8µ/°×cLìÎßæ²|­Ì¡€<C2A1>x+<2B>ƒ€B6Cn™´»¥ki×VEbaLOölZ«QŽbú™'<11>DiªÐ\AÁæOÖ<4F>R Ÿ>žHS ±hÔç(>ût'Q%Aò9€A§5Ó¸ö¯ÎôWç±91¶•˜®,7]exæoCX174.5QD£W> n9\úëkžnÑfŸm{ƒÔXŠqƒâ~È ;€Ÿf<08>æqÏŒt”ƒ‰Ì<îò>ßÍæ-©-¬ wÞíØ¶Eîº=˜†Á„ “µs°l;Ål´mE®ÛD
ã'N"ÒÒFÃÞj~ö@O>4 Û±p‡_?» qo RJ~ùð?øÓoÂÒ÷J˜yÁhz~RÄÛã„{¦£”âçW<C3A7>Ä?WVðƒsò÷w÷ûr»´¬D¿ )<29> .q; ¡k+iw¡7Ž<37>ƒâbz ì…rllËÁ ˜6ãDŠK
IÓþŒ@€Ò ;HëžÉšê5LÏ:6EÚeÄZˆ„»óýAM”ì ¢œ{ÊB8À D;í§&q#ï?ã²3xùÙV®øY/>ÙÊÌÛ3°b¶b+xaÁµ“l-ÃÝØ<C39D>­tÂȸÁ ä38ÆÚÒ™SÂþê7 ˆoj÷%劕¦¸V3 M<1C>`±o_©8÷ç³ü[4çg,ÝPÌåS‡“»v<C2BB>/÷“‰À4 Þûû[,xèf­ý'R ¥®‰µËWñäÜY,ý D'p$­ +na˜kßýG)ÿí¥üfÁ¾Ѱ·†Ç~{9uMµ¼üN¹ïóP¶æB%…:$=tè0½;hÌ"ÚÖNc´™Œ>=˜wËwyò¯\ÅTwÿ..)BÙ6<C399>ê8öŒ“ü±;ͦ<C38D>×u
ÂL9õx~óÃëBðÑêUìß¿_sÁ¥<C381>”Zö..¸ÖÄ B0 }”KlÌmÀQP_©Ã±Þj5Hdy«WÊLó >¶–™0$ÆÎ½AÆ Žé|BtzXµ¥8vHÜO˘ÆÌo÷W­‰§>µV"o1ý¬Ÿ'<<3C>ë¯-®BJƒ™ÓG“·n·NTfÀÀ¶lÜDM‰×Þÿ§]x³N<ŠÜµ€bÅËoê×ò2v“hölŠ@H·ré9¸ ûj¸ã¿_IÍù—i˜¬Ø%”æ{§öæo+ÝÄQÃÐ<C383>"ÓÀ±l~rÁ0þòV)e%º­}FŸžHÃà¾g^Ãq\{*¿þóû.Bl„iðèÜñÒ{ûAAQQ<51>NØÆý5‰J±é£Ï€æfáòIFÎ2q-MÒÒ`ÃßÚ<C39F>èlß|£†$ê÷¬¶DưNJ(!8:ÃxC¹F¾W`
KÜûl-ÛmÓ/0È´Á45[cD6¶Ó#<23>ø Ð9ˆ首ù¢ÁèšäÍ»ƒÜu;™yÜÑZ?pS¦,ÛæÃ½‹£‹æÜÀ]Ïý5µ ˆºÍöé¶îO<tÁ²Õå\yÆP½Sà;Y„a°{÷êË«yúá«xàù7A)êöêî_O=8 ! žùÇ&.9£?/½[N `Ï®]4VÖÓ£_þi·£ˆ<15>kn#”Ý<E2809D>œ¡}©+?¨]ÑB`¹IÝúgÑ\QßÉPn`ÚŒQÀÆUŸúóòúŸðâ‹:W õýGýã¦À/ õØuº¡'´×ð̆H´DõõõÎêõü^²‡G ÑÉ>ÑÜA¸¾îw 6CëI9†ö7ÔUÁ^¥QÄÑÉ 5VR¿³îLp€³~ðm_˜9ëûç',‚¤íÜ<t3?݃&NœÄÊWßõ3¬oÓöÇÓs4QÝ÷ô^>¹ï1óœ,û°!`÷î<C3B7>ZÇŒqw&kÞû<C39E>[~•‹'œÍó¯nFH<46>£ÍÕ<C38D>HCò«ŸžÍƒO®ÐŒ!`ºA'ƒgæÌ"oe){Óh€¨Û”ªû ^<5E>ghÚWÃÔ'êlçÙÈÛ¶nÁž†N¿•æUÆÂB.¸+ÎïÙgC{(Kgm, Ro+®»_+uÞÏ[np'ÓLÎ ,{(Îe÷ç=ãÚµ6-Û"<>36@Τ Öö
=.¯Q„÷ª^Bˆrlľ½%þ[^ö´nX[XÑ é>òçÜÂâ5ÚjHòŠmÛ·•;ÊyjÎL®Ò<C2AE>!%;wí@xø¦ Èû ”={vú "¥xvÎÕ,ù°8%áQÁÎÛhØ[À“ͦ%RÏož|¥M•uüáÁbÅ-½S†cYí) ÒÔN 3̳ó®fñ
ÝÂUºÞ-ë6д¿Æÿ<C386>i3N`ƒ»Ò¥˜~ÆI)Aý +uÏ㇮¹™-[¶ê-mphþP×íw3µýa™pÈxÕ¸­õ!š£ÊwéÎ|0@,ËŸmõC=Nb»©Û'Á}δÙäç¶úÄrƒÙ@ËQiH©«ƒ “Ķ·ûÙ@Q×ö·”Ö<è6ãVŒ;î¸ý¿½EÑZúõíÇϺˆ<C2BA>JJHÏîF{] þ) =vÔp¼½]k·0ôè~3¯¶oÇÚ-´7´àX6ž=‰IÃ{_Ú¨‰ªF'z~°¾€ºú:Êijã™y×±fÏ^Î:öh¶”Ö1ëÌQl)©ó½Š½ûô¥Åj'ÒÔÊ[+7³â£Ý´Õ7mi!x÷ƒœwöx¶5ôÈìACC=ñvÞúhƒGÓáf÷3iF ñ¹Ö€aƒiµ"ÄšÛ©(ÝÇ€áƒý‰ª(ÕæéÏ><3E>ÒÒR­£ °Ê×<11> ùt?ûI—ÀÎýnù}ˆãÎ5ºdÚÙq 6.h¥ÉÖÈö¼|¸÷˜®Žà% á'Ÿz-_ÐRe!«-Ò0ú˜Dò#~i¹×<C2B9>ÂFs<46>vGÎ<åfÇ9ÔîáŽæ@î¼;Èû|w¿;<3B>=¢_B!q3Xó·å“3L7…ªÜQŠ’¼÷‹}>8fÌXvíÞ<C3AD>4 æÜpŸ
ž÷¡^¡7ß¿<C39F>§¾Š¼•Ez§OËñ9€0 zéËœ¿ÍUÅHCÒ\Ý@AÑ÷×òÒ»:ÛÇ jSpè°an×}†fŸ5Š%û“€Pf˜Ù gÉ[e~2J1zÔh
\1<> o<±<>>×I¸+¾ç™·Ó¼ò1ÿ:/Ê&<26>= \ uøüÙVßOà)v=Lh¶´þ Ü•<C39C>n$ü Ê5ßPAH
lÇ!î(?O0® `€Ñ㈭¬Dø¸ÒÏVè`<60>âVÜ §ä/IfN?š;^xÉ·
ò>ß<><15>ub¬yc•¿VW¢€Ó/ú«^{7U”z£+g %oE±Öê¥ÁÃ×¼• ëÀQÖ—[î_ÄÓsôV0÷=û†¦6i¸¦£¾ßƒŒ^=H«É é@B
]Ðé&<26>Ã!0´÷î¦{rÒy3°-Gû Ü<>f¦åeàŠó³ôír
:!?ZÛÚH2jü ÐÚõ®ç_ -_oãïÎÆuÐÖ@3I…8.E¢Óˆ¶î hP^7P÷Û¿»öÀô!q¿~Pívª^â…Q
<>9€wËW—ªÇÆÉßO]q%9ö¨+®dõëï%öp•;÷ò̼Ùä½_ÌÌ3G<33>÷<EFBFBD>§h·ÛwG¿À§<> oeR
ÆŒËÎ;è9¤/7ÿjQÂvQŠgæ]ÃÒÕ%\qÚp|Xˆt—<74>Ç<EFBFBD>á—Ÿ;„eï”û<A“¡Ã‡Í€º²ƒºàÒ¸¸3wïS¯1çæ i<>Ö³ä­2HZùÓÎ8ÉÇß|ÿZÿsSSS'¢(ª øòúŒLºwÓ9{[ßmóëÿ¼Êo¯4Ë+!<21>»|?î*Œ{ü!á·˜;é<>ÇSj“w-±âÑxÇV†Á–?ü©Cb>qHXý^*X²jÛ¥è5B's:Ž"?³¿•L]I•íó`a9XëÝtÏbž™3 Ì<c÷?÷ŽËîŠNlBåm±=ÄÝÜQHêJ*¹éÞ…<=G†™gŒdéêb]b~únZ¾
Á/ç¾Æïïÿyo˜Ä•¢ª¦Šž}}BêîK<¼ð­O$f—CA8œF<C593>»y”<36>š´G`×Úv_”îŠKsCÄË|g”nÚ`+=ñ¡{
¬/×í÷¦ßö[ ) M¤Ð-eù¾ÿ®ëXèfÔ§üæ)¦nÖiÛ6eho‡¦&þí×ɯ®?{~€ªèfÞ÷˜ž3Ûî4q çê OÞg…¬zõ<1D>âV-þtÛ¶åmn§¾¼Ú¿GšRWFÁ3s®fé‡Å\qú}R®Ye³sÏN¿¸ã.ƲãÌ w?ùOÊ«Á³ó®eéÇ¥Ì<uVîa÷noB‡úR½ää¦éþƒJ±cS>ѶÒÝ”ÉQÏÌ»€%«ŠÙ¹sÇ3<33>;wmi§ÉíTêY<06>Ê^yå%êuWN”[bîиn1¶£È04ƒö|^ë— „âŠçŽÐíÛ¢Ž µìø¼<Èø[Äv-®®ÀÛª#ÐmããÄâ
‡€$0 Ÿâ±8íÑ6š[¨©®!<12>øÏQ¨\þTb7,ÇQÔH ÝýÁ¼5‰âoG±…ó~æ_õÚ»ÄÚ"xN<78>çæ]ƒ—Äqã=/0ÿw7<77>ûQWœ<Œ%«
Ù±kG
1Ϲé"­)EÅ-®8}J9Ü|ßB@1ÿw7·â!¹é¾ í¡N9y:»vìÀ‰ZÓ œ¥ƒ0õeyfÞÕ,ù°$•+¸ï¶sÇvªwïK!€dä<óìS>Ò•Û™S9Š<C5A0>K($Êïýc-Ë!aæTøöÈ8(ÁÖ½šÝOûÕ477cÅuë¯B+0 ¥%€E<fÑÞÞFcs3µÕµ)<04>Âνó*å{l`þ'Û}ž<12>=Ý`ÆÅçáØÛ¶çS¹½ Ìÿý<C3BF>,ùHgáØÍŽ<C38D>Ûit½{ºPÒP¶"kXæÜp÷¿ðÊv˜{ãE(KWqåé#q‡›ï[¿à sn¸CJlÇâþçߤ®ü ØV4Žc;DZ8÷]û¸æí•>Ìœ1Ü•…¾öïÁÇo¬@9ŠcgœÈ¯¿{uÊ»<XÅÛo¿MKKs
ò=hݸ<16>A·éƒ×N¢EAaE€óFÄÁ¶½N~è9b±Í­-Äc¶ã|e˜Bi¡ˆFõ¦ÍMMÔÖÖw"_è5¢/ÕºïOÞ§{ˆ:‰FÆ!#䱺‚™'ŒÖÎ!Ggì<;÷Z¯ÜÃì3<C3AC>"wu tZØضmu%•`žyèLÃÀvl|XèÆa°øƒÝ\yú(½m¬m“=¼u¥UÔ•T<1F>Üð]r?J¤y=róÅüòÙ¹Dì0¤Ï Ú[Ûº”ÿy«Š4MwèÓ5¬/ÊvøÍ÷®Mé °wo9ÍMM<4D>ï<> ØJ`ˆÄN¢^ìÝóD¬, <09>iNÿÍÓ:cXJ¤0<C2A4>¦ ˆÀkú¨w é¨3¨.÷ ôïõ>,½io?º<>þ¡iürÆ¥„dÀÿ×ø[É¡EƒD÷ÿõÙ²€ÜÕE(ËÆ0MlKç8{²þ™‡®á¥5¥(¥Xúq)Â4?~<Â<>X
|Xˆ²-®<}¤^õ®9ïúÈ]]ÄÌSF¤Œ©¡´Šº¢J~wó÷ÈÌîNz·ÄÞÏÌ»!$Wž>¼k¥7~ùÅïý¦“ÉÚvcCƒ»õŠê°gHRã4wµÇí{÷1Ç5ÑÙ9ão}<7D>+C9Ž»Â¥K ‡VB^§µŽÈ÷"¯Žr‰ «<C2A0>Eöí+UšBº^Ý<>¬z)‘ïä>0yOaÀW?xõMWH²ñì(ž™s-KW1ûŒ£ô*v54‰æsn¸Ð©1~òö*0óç^ïr|ñ$<24>+OÉ/Ÿy•ºòƒ<ýà,r?(ÆhÏÊÎ<C38A>;˜{óEä­*ÒD€V=ð«ó®LLœÛtÒqÓÉ”R,^¼<>ºúúÎïþܵlù  HsƒCeU®†åm†D´´4ÒÃaÂia<02>m<11>Åü8ƒ0¾„°}Á Þ£Ø¶'<1A>ÓÚÖJcc <0A> Ä¢±”±‡C>À/g\ŠW¦8oÕþŽ¢ÔWrõ½O<02>=´Ž»s§‡™z7ëwþ\NÕì^ËvŸ…w ú{Ÿ}<7D>±ÇŒí4¬a}¨ß[<5B>Âú ®pu ;wîH9³dUqÊ÷dä{ì5ˆp‡-[6PW[×å<ùÛ¶¸AÕAÓ<41> L¿ô&½CºRÒmŠõ7qptûY B}Éw(Hˆo,É·-<2D>y8äw„_θ”Ë]Å/<‚¨)<À³^Cî*<2A> òÉÛ+<01>|iÊUX|X„Hêþy$P_v¤`Ö©# r?*ÒŠ ¥AÞªÂäßûôk̽Y»¡—¬*æ<>ó®<äV°ÉDÐØØô…ÈW8¤<38>û!¥+ÿÉQßú¡kŽtSCŸWŽÀÛ¶p7ZÓ;<3B>„ÒÜj£#Ç…?N™è”š Þx¿¿bÛÖõª[÷ž‡¿Èëˆâü;´µðöùç½cŽãðÆïæû)[É“é,‰e‡¬B.ûÓ=A·Îé4Ž+ÿ|õ{«yû<79> QJ1gÅ)"Àvl۪Ǫà˜1ÇtZýsnº<6E>¡i'w[W ”âÝåo³~ÆÃ"ßñ
<03>€ijm< 
¥låo gJ<4A>áp˜p8ìÎoÒÜ¡ðæS
o“ª€<EFBFBD>x˲ˆÅb´´¶ÒÒÜÒ¥øÿÊ'«:NbZIEND®B`

View file

@ -0,0 +1,239 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>raylib HTML5 GAME</title>
<meta name="title" content="raylib HTML5 GAME">
<meta name="description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="keywords" content="raylib, games, html5, programming, C, C++, library, learn, videogames">
<meta name="viewport" content="width=device-width">
<!-- Facebook metatags for sharing -->
<meta property="og:title" content="raylib HTML5 GAME">
<meta property="og:image:type" content="image/png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta property="og:url" content="http://www.raylib.com/games">
<meta property="og:site_name" content="raylib.com">
<meta property="og:description" content="New hmtl5 videogame, developed using raylib videogames library">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@emegemegames">
<meta name="twitter:title" content="raylib HTML5 GAME">
<meta name="twitter:description" content="New HTML5 videogame, developed using raylib videogames library">
<meta name="twitter:image" content="http://www.raylib.com/img/raylib_logo.png">
<meta name="twitter:url" content="http://www.raylib.com/img/raylib_logo.png">
<!--<link rel="stylesheet" href="./Koala Seasons by emegeme_files/main.css">-->
<link rel="shortcut icon" href="http://www.raylib.com/favicon.ico">
<style>
body {
font-family: arial;
margin: 0;
padding: none;
}
#header_part {
width: 100%;
height: 80px;
background-color: #888888;
}
#logo {
width:64px;
height:64px;
float:left;
position:relative;
margin:10px;
background-image:url(http://www.raylib.com/img/raylib_logo64x64.png);
}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; }
div.emscripten_border { border: 1px solid black; }
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; }
#emscripten_logo {
display: inline-block;
margin: 0;
}
.spinner {
height: 30px;
width: 30px;
margin: 0;
margin-top: 20px;
margin-left: 20px;
display: inline-block;
vertical-align: top;
-webkit-animation: rotation .8s linear infinite;
-moz-animation: rotation .8s linear infinite;
-o-animation: rotation .8s linear infinite;
animation: rotation 0.8s linear infinite;
border-left: 5px solid black;
border-right: 5px solid black;
border-bottom: 5px solid black;
border-top: 5px solid red;
border-radius: 100%;
background-color: rgb(245, 245, 245);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
#status {
display: inline-block;
vertical-align: top;
margin-top: 30px;
margin-left: 20px;
font-weight: bold;
color: rgb(40, 40, 40);
}
#progress {
height: 20px;
width: 30px;
}
#controls {
display: inline-block;
float: right;
vertical-align: top;
margin-top: 30px;
margin-right: 20px;
}
#output {
width: 100%;
height: 140px;
margin: 0 auto;
margin-top: 10px;
display: block;
background-color: black;
color: rgb(37, 174, 38);
font-family: 'Lucida Console', Monaco, monospace;
outline: none;
}
</style>
</head>
<body>
<div id="header_part">
<a id="logo" href="http://www.raylib.com"></a>
<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<span id='controls'>
<span><input type="button" value="Fullscreen" onclick="Module.requestFullScreen(false, false)"></span>
</span>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>
<textarea id="output" rows="8"></textarea>
<script type='text/javascript'>
var statusElement = document.getElementById('status');
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var Module = {
preRun: [],
postRun: [],
print: (function() {
var element = document.getElementById('output');
if (element) element.value = ''; // clear browser cache
return function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(text);
if (element) {
element.value += text + "\n";
element.scrollTop = element.scrollHeight; // focus on bottom
}
};
})(),
printErr: function(text) {
if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
if (0) { // XXX disabled for safety typeof dump == 'function') {
dump(text + '\n'); // fast, straight to the real console
} else {
console.error(text);
}
},
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
if (text === Module.setStatus.text) return;
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
var now = Date.now();
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.style.display = 'none';
}
statusElement.innerHTML = text;
},
totalDependencies: 0,
monitorRunDependencies: function(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
</script>
<script async type="text/javascript" src="models_ray_picking.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

View file

@ -0,0 +1,456 @@
# Blender v2.78 (sub 0) OBJ File: 'lowpoly-tower.blend'
# www.blender.org
o Grid
v -4.000000 0.000000 4.000000
v -2.327363 0.000000 4.654725
v 0.000000 0.000000 4.654725
v 2.327363 0.000000 4.654725
v 4.000000 0.000000 4.000000
v -4.654725 0.955085 2.327363
v -2.000000 0.815050 2.000000
v 0.000000 0.476341 2.423448
v 2.000000 0.476341 2.000000
v 4.654725 0.000000 2.327363
v -4.654725 1.649076 0.000000
v -2.423448 1.092402 0.000000
v 2.423448 0.198579 0.000000
v 4.654725 0.000000 0.000000
v -4.654725 1.649076 -2.327363
v -2.000000 1.092402 -2.000000
v 0.000000 0.476341 -2.423448
v 2.000000 -0.012791 -2.000000
v 4.654725 0.000000 -2.612731
v -4.000000 0.955085 -4.000000
v -2.327363 0.955085 -4.654725
v 0.000000 0.955085 -4.654725
v 2.327363 0.000000 -4.654725
v 4.000000 0.000000 -4.000000
v 2.423448 0.682825 0.000000
v 2.000000 0.565423 -2.000000
v -4.654725 -0.020560 2.327363
v -4.654725 0.000000 0.000000
v -4.654725 0.000000 -2.327363
v -4.000000 0.000000 -4.000000
v -2.327363 0.000000 -4.654725
v 0.000000 -0.020560 -4.654725
v 0.000000 0.709880 -1.230535
v -0.000000 7.395413 0.000000
v 0.962071 0.709880 -0.767226
v -0.533909 0.709880 1.108674
v -1.199683 0.709880 0.273820
v -0.962071 0.709880 -0.767226
v 1.506076 0.859071 1.325337
v 1.199683 0.709880 0.273820
v 0.533909 0.709880 1.108674
v 0.000000 1.875340 -1.177842
v -0.000000 2.293973 -0.649884
v -0.000000 4.365648 -0.627970
v 0.000000 6.167194 -0.942957
v 0.000000 6.232434 -1.708677
v 1.335898 6.232434 -1.065343
v 0.737233 6.167195 -0.587924
v 0.490966 4.365648 -0.391533
v 0.508100 2.293973 -0.405196
v 0.920874 1.875340 -0.734372
v -0.741367 6.232434 1.539465
v -0.409133 6.167195 0.849574
v -0.272466 4.365648 0.565781
v -0.281974 2.293973 0.585526
v -0.511047 1.875340 1.061199
v -1.665837 6.232434 0.380217
v -0.919314 6.167195 0.209828
v -0.612225 4.365648 0.139736
v -0.633590 2.293973 0.144613
v -1.148311 1.875340 0.262095
v -1.335898 6.232434 -1.065343
v -0.737233 6.167195 -0.587924
v -0.490967 4.365648 -0.391533
v -0.508100 2.293973 -0.405196
v -0.920874 1.875340 -0.734372
v 1.665837 6.232434 0.380216
v 0.919315 6.167195 0.209828
v 0.612225 4.365648 0.139736
v 0.633590 2.293973 0.144613
v 1.148311 1.875340 0.262095
v 0.741367 6.232434 1.539465
v 0.409133 6.167195 0.849575
v 0.272466 4.365648 0.565781
v 0.281974 2.293973 0.585526
v 0.511046 1.875340 1.061199
v 0.000000 5.012550 -0.969733
v 0.758168 5.012550 -0.604618
v -0.420751 5.012550 0.873699
v -0.945419 5.012550 0.215786
v -0.758168 5.012550 -0.604618
v 0.945419 5.012550 0.215786
v 0.420751 5.012550 0.873699
vt 0.0523 0.5444
vt 0.1817 0.4284
vt 0.1641 0.5859
vt 0.0177 0.4451
vt 0.1526 0.3090
vt 0.0189 0.1737
vt 0.0188 0.3088
vt 0.0561 0.0762
vt 0.1757 0.1924
vt 0.3024 0.4534
vt 0.3071 0.5902
vt 0.3413 0.2459
vt 0.2906 0.1614
vt 0.4116 0.1801
vt 0.2834 0.3774
vt 0.1526 0.0362
vt 0.2917 0.1622
vt 0.4446 0.5865
vt 0.4443 0.2989
vt 0.3711 0.3021
vt 0.4396 0.0275
vt 0.4094 0.1829
vt 0.4219 0.4255
vt 0.5474 0.5381
vt 0.5811 0.4376
vt 0.5715 0.1505
vt 0.5811 0.2997
vt 0.5272 0.0533
vt 0.2208 0.2194
vt 0.3456 0.3610
vt 0.2878 0.0321
vt 0.2321 0.3392
vt 0.4432 0.0177
vt 0.7347 0.7934
vt 0.7382 0.7595
vt 0.8982 0.7768
vt 0.6169 0.7595
vt 0.6139 0.7879
vt 0.4951 0.7634
vt 0.1551 0.6832
vt 0.2925 0.6268
vt 0.2925 0.6832
vt 0.7795 0.6832
vt 0.6421 0.6268
vt 0.7795 0.6255
vt 0.5046 0.7241
vt 0.6421 0.7241
vt 0.3986 0.6268
vt 0.3986 0.6832
vt 0.5046 0.6268
vt 0.0177 0.6268
vt 0.1551 0.6255
vt 0.8856 0.6268
vt 0.1899 0.9579
vt 0.1194 0.8696
vt 0.2324 0.8696
vt 0.1899 0.7813
vt 0.0943 0.7595
vt 0.0177 0.8206
vt 0.0177 0.9186
vt 0.0943 0.9797
vt 0.2793 0.2349
vt 0.2304 0.2758
vt 0.6597 0.0177
vt 0.6954 0.0993
vt 0.6367 0.0768
vt 0.7558 0.0777
vt 0.7238 0.0440
vt 0.8840 0.1330
vt 0.7385 0.1141
vt 0.9157 0.0886
vt 0.9781 0.1232
vt 0.9224 0.1276
vt 0.2677 0.8141
vt 0.3463 0.8037
vt 0.3086 0.8339
vt 0.6387 0.3550
vt 0.7130 0.3801
vt 0.6596 0.4053
vt 0.7245 0.3245
vt 0.6919 0.3383
vt 0.8655 0.3566
vt 0.7351 0.3577
vt 0.9770 0.3365
vt 0.9078 0.3751
vt 0.9174 0.3282
vt 0.2677 0.9018
vt 0.3086 0.8821
vt 0.6803 0.2948
vt 0.6251 0.3035
vt 0.7194 0.2854
vt 0.8764 0.2832
vt 0.9221 0.2861
vt 0.3363 0.9565
vt 0.3464 0.9122
vt 0.6751 0.2482
vt 0.6178 0.2499
vt 0.7179 0.2431
vt 0.9823 0.2484
vt 0.9247 0.2452
vt 0.3935 0.9014
vt 0.6755 0.1996
vt 0.6164 0.1941
vt 0.7201 0.1992
vt 0.8793 0.2446
vt 0.9823 0.2060
vt 0.9257 0.2051
vt 0.4598 0.8580
vt 0.4144 0.8579
vt 0.6819 0.1498
vt 0.6222 0.1361
vt 0.7266 0.1555
vt 0.8831 0.1684
vt 0.9252 0.1659
vt 0.4218 0.7790
vt 0.3934 0.8145
vt 0.3363 0.7595
vt 0.8815 0.2060
vt 0.8720 0.3208
vt 0.8825 0.1012
vt 0.9735 0.0816
vt 0.9718 0.3817
vt 0.9807 0.2918
vt 0.4218 0.9370
vt 0.9810 0.1644
vn 0.1035 0.8806 0.4623
vn 0.0964 0.9481 0.3030
vn 0.0000 0.9780 0.2088
vn 0.0659 0.9835 0.1683
vn 0.2325 0.9320 0.2779
vn 0.0553 0.9960 -0.0702
vn 0.2827 0.9564 0.0728
vn 0.1873 0.9776 -0.0961
vn 0.2421 0.9703 0.0000
vn 0.0921 0.9772 -0.1913
vn -0.0277 0.9947 -0.0993
vn 0.2308 0.9274 -0.2944
vn 0.2771 0.9572 -0.0837
vn 0.3724 0.9074 0.1947
vn 0.0777 0.9770 -0.1985
vn -0.1094 0.9539 0.2794
vn 0.0364 0.9844 0.1721
vn 0.1683 0.9835 0.0659
vn 0.0674 0.9901 0.1230
vn 0.4338 0.8823 0.1829
vn 0.2845 0.9565 0.0649
vn 0.0886 0.9961 0.0000
vn 0.2000 0.9789 0.0424
vn 0.1417 0.9830 0.1171
vn 0.3021 0.9524 0.0412
vn -0.0193 0.9986 -0.0493
vn 0.0000 0.9777 0.2098
vn 0.0005 0.9781 -0.2083
vn 0.1879 0.9782 -0.0887
vn 0.2249 0.0000 0.9744
vn 0.9783 0.0000 -0.2071
vn 0.9783 0.0000 0.2071
vn 0.0000 0.0000 -1.0000
vn -1.0000 0.0000 0.0000
vn -0.3645 0.0000 -0.9312
vn -0.9312 0.0000 -0.3645
vn -0.9312 0.0000 0.3645
vn 0.2615 0.7979 -0.5431
vn 0.5877 0.7979 -0.1341
vn 0.4713 0.7979 0.3758
vn -0.0000 0.7979 0.6028
vn -0.4713 0.7979 0.3758
vn -0.5877 0.7979 -0.1341
vn -0.2615 0.7979 -0.5431
vn -0.1285 0.9864 -0.1025
vn 0.0929 0.8937 0.4389
vn -0.4335 0.0407 -0.9002
vn -0.2867 0.7507 -0.5952
vn -0.4339 0.0095 -0.9009
vn -0.4338 0.0209 -0.9008
vn -0.0408 -0.9956 -0.0848
vn -0.9741 0.0407 -0.2223
vn -0.6441 0.7507 -0.1470
vn -0.9749 0.0095 -0.2225
vn -0.9747 0.0209 -0.2225
vn -0.0918 -0.9956 -0.0209
vn -0.7812 0.0407 0.6230
vn -0.5165 0.7507 0.4119
vn -0.7818 0.0095 0.6235
vn -0.7817 0.0209 0.6234
vn -0.0736 -0.9956 0.0587
vn -0.0000 0.0407 0.9992
vn 0.0000 0.7507 0.6607
vn 0.0000 0.0095 1.0000
vn -0.0000 0.0209 0.9998
vn -0.0000 -0.9956 0.0941
vn 0.7812 0.0407 0.6230
vn 0.5165 0.7507 0.4119
vn 0.7818 0.0095 0.6235
vn 0.7817 0.0209 0.6234
vn 0.0736 -0.9956 0.0587
vn 0.9741 0.0407 -0.2223
vn 0.6441 0.7507 -0.1470
vn 0.9749 0.0095 -0.2225
vn 0.9747 0.0209 -0.2225
vn 0.0918 -0.9956 -0.0209
vn 0.4335 0.0407 -0.9002
vn 0.2867 0.7507 -0.5952
vn 0.4339 0.0095 -0.9009
vn 0.4338 0.0209 -0.9008
vn 0.0408 -0.9956 -0.0848
vn 0.3918 -0.4298 -0.8135
vn 0.8803 -0.4298 -0.2009
vn 0.7059 -0.4298 0.5630
vn -0.0000 -0.4298 0.9029
vn -0.7059 -0.4298 0.5630
vn -0.8803 -0.4298 -0.2009
vn -0.3918 -0.4298 -0.8135
vn 0.0210 0.9998 -0.0048
vn 0.0482 0.9981 -0.0385
vn -0.0166 0.9914 -0.1301
vn -0.0090 0.9904 -0.1379
vn 0.2820 0.9576 0.0597
vn -0.0000 0.9846 0.1749
vn -0.0921 0.9772 -0.1913
vn -0.1734 0.9794 0.1036
s off
f 1/1/1 7/2/1 6/3/1
f 2/4/2 8/5/2 7/2/2
f 4/6/3 8/5/3 3/7/3
f 5/8/4 9/9/4 4/6/4
f 6/3/5 12/10/5 11/11/5
f 35/12/6 25/13/6 26/14/6
f 7/2/7 37/15/7 12/10/7
f 10/16/8 13/17/8 9/9/8
f 12/10/9 15/18/9 11/11/9
f 35/12/10 17/19/10 33/20/10
f 13/17/11 19/21/11 18/22/11
f 16/23/12 20/24/12 15/18/12
f 17/19/13 21/25/13 16/23/13
f 17/19/14 23/26/14 22/27/14
f 26/14/15 24/28/15 23/26/15
f 1/1/16 2/4/16 7/2/16
f 2/4/3 3/7/3 8/5/3
f 4/6/17 9/9/17 8/5/17
f 5/8/18 10/16/18 9/9/18
f 6/3/19 7/2/19 12/10/19
f 25/13/20 39/29/20 9/9/20
f 38/30/21 12/10/21 37/15/21
f 10/16/22 14/31/22 13/17/22
f 12/10/23 16/23/23 15/18/23
f 8/5/24 36/32/24 7/2/24
f 38/30/25 17/19/25 16/23/25
f 13/17/22 14/31/22 19/21/22
f 16/23/26 21/25/26 20/24/26
f 17/19/27 22/27/27 21/25/27
f 17/19/28 26/14/28 23/26/28
f 26/14/29 19/33/29 24/28/29
f 26/34/30 18/35/30 19/36/30
f 26/34/31 13/37/31 18/35/31
f 25/38/32 9/39/32 13/37/32
f 22/40/33 31/41/33 21/42/33
f 6/43/34 28/44/34 27/45/34
f 15/46/34 28/44/34 11/47/34
f 21/42/35 30/48/35 20/49/35
f 20/49/36 29/50/36 15/46/36
f 22/40/33 23/51/33 32/52/33
f 6/43/37 27/45/37 1/53/37
f 46/54/38 34/55/38 47/56/38
f 47/56/39 34/55/39 67/57/39
f 67/57/40 34/55/40 72/58/40
f 72/58/41 34/55/41 52/59/41
f 52/59/42 34/55/42 57/60/42
f 57/60/43 34/55/43 62/61/43
f 62/61/44 34/55/44 46/54/44
f 40/62/45 41/63/45 39/29/45
f 39/29/46 8/5/46 9/9/46
f 38/64/47 42/65/47 33/66/47
f 65/67/48 42/65/48 66/68/48
f 65/67/49 44/69/49 43/70/49
f 81/71/50 45/72/50 77/73/50
f 62/74/51 45/75/51 63/76/51
f 37/77/52 66/78/52 38/79/52
f 60/80/53 66/78/53 61/81/53
f 60/80/54 64/82/54 65/83/54
f 58/84/55 81/85/55 80/86/55
f 57/87/56 63/76/56 58/88/56
f 56/89/57 37/77/57 36/90/57
f 55/91/58 61/81/58 56/89/58
f 54/92/59 60/80/59 55/91/59
f 79/93/60 58/84/60 80/86/60
f 52/94/61 58/88/61 53/95/61
f 76/96/62 36/90/62 41/97/62
f 75/98/63 56/89/63 76/96/63
f 75/98/64 54/92/64 55/91/64
f 73/99/65 79/93/65 83/100/65
f 73/101/66 52/94/66 53/95/66
f 71/102/67 41/97/67 40/103/67
f 70/104/68 76/96/68 71/102/68
f 70/104/69 74/105/69 75/98/69
f 68/106/70 83/100/70 82/107/70
f 67/108/71 73/101/71 68/109/71
f 51/110/72 40/103/72 35/111/72
f 50/112/73 71/102/73 51/110/73
f 49/113/74 70/104/74 50/112/74
f 78/114/75 68/106/75 82/107/75
f 47/115/76 68/109/76 48/116/76
f 42/65/77 35/111/77 33/66/77
f 43/70/78 51/110/78 42/65/78
f 44/69/79 50/112/79 43/70/79
f 45/72/80 78/114/80 77/73/80
f 46/117/81 48/116/81 45/75/81
f 44/69/82 78/114/82 49/113/82
f 49/113/83 82/107/83 69/118/83
f 82/107/84 74/105/84 69/118/84
f 83/100/85 54/92/85 74/105/85
f 79/93/86 59/119/86 54/92/86
f 80/86/87 64/82/87 59/119/87
f 64/120/88 77/73/88 44/69/88
f 35/12/89 40/62/89 25/13/89
f 7/2/90 36/32/90 37/15/90
f 35/12/91 26/14/91 17/19/91
f 25/13/92 40/62/92 39/29/92
f 38/30/93 16/23/93 12/10/93
f 8/5/94 41/63/94 36/32/94
f 38/30/95 33/20/95 17/19/95
f 26/34/31 25/38/31 13/37/31
f 22/40/33 32/52/33 31/41/33
f 6/43/34 11/47/34 28/44/34
f 15/46/34 29/50/34 28/44/34
f 21/42/35 31/41/35 30/48/35
f 20/49/36 30/48/36 29/50/36
f 39/29/96 41/63/96 8/5/96
f 38/64/47 66/68/47 42/65/47
f 65/67/48 43/70/48 42/65/48
f 65/67/49 64/120/49 44/69/49
f 81/71/50 63/121/50 45/72/50
f 62/74/51 46/117/51 45/75/51
f 37/77/52 61/81/52 66/78/52
f 60/80/53 65/83/53 66/78/53
f 60/80/54 59/119/54 64/82/54
f 58/84/55 63/122/55 81/85/55
f 57/87/56 62/74/56 63/76/56
f 56/89/57 61/81/57 37/77/57
f 55/91/58 60/80/58 61/81/58
f 54/92/59 59/119/59 60/80/59
f 79/93/60 53/123/60 58/84/60
f 52/94/61 57/87/61 58/88/61
f 76/96/62 56/89/62 36/90/62
f 75/98/63 55/91/63 56/89/63
f 75/98/64 74/105/64 54/92/64
f 73/99/65 53/123/65 79/93/65
f 73/101/66 72/124/66 52/94/66
f 71/102/67 76/96/67 41/97/67
f 70/104/68 75/98/68 76/96/68
f 70/104/69 69/118/69 74/105/69
f 68/106/70 73/99/70 83/100/70
f 67/108/71 72/124/71 73/101/71
f 51/110/72 71/102/72 40/103/72
f 50/112/73 70/104/73 71/102/73
f 49/113/74 69/118/74 70/104/74
f 78/114/75 48/125/75 68/106/75
f 47/115/76 67/108/76 68/109/76
f 42/65/77 51/110/77 35/111/77
f 43/70/78 50/112/78 51/110/78
f 44/69/79 49/113/79 50/112/79
f 45/72/80 48/125/80 78/114/80
f 46/117/81 47/115/81 48/116/81
f 44/69/82 77/73/82 78/114/82
f 49/113/83 78/114/83 82/107/83
f 82/107/84 83/100/84 74/105/84
f 83/100/85 79/93/85 54/92/85
f 79/93/86 80/86/86 59/119/86
f 80/86/87 81/85/87 64/82/87
f 64/120/88 81/71/88 77/73/88

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB