diff --git a/css/login.css b/css/login.css
new file mode 100644
index 0000000..43e53f6
--- /dev/null
+++ b/css/login.css
@@ -0,0 +1,95 @@
+body {
+ background-image: url("../images/wool.jpg");
+}
+
+#login {
+ position: fixed;
+ width: 520;
+ background-color: floralwhite;
+ font-family: 'Electrolize', sans-serif;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ border-color: #35170B;
+ border-width: 5;
+ border-style: solid;
+}
+
+#register {
+ position: fixed;
+ width: 520;
+ background-color: floralwhite;
+ font-family: 'Electrolize', sans-serif;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ border-color: #35170B;
+ border-width: 5;
+ border-style: solid;
+}
+
+#login_button {
+ font-family: 'Electrolize', sans-serif;
+ background-color: #35170B;
+ color: white;
+ cursor: pointer;
+}
+
+#register_button {
+ font-family: 'Electrolize', sans-serif;
+ background-color: #35170B;
+ color: white;
+ cursor: pointer;
+}
+
+p {
+ display: block;
+ text-align: center;
+ font-size: 1.5em;
+ color: #35170B;
+}
+
+.change {
+ margin-top: 5px;
+ display: block;
+ text-align: center;
+ font-size: 1em;
+ color: #35170B;
+ cursor: pointer;
+}
+
+.change:hover {
+ display: block;
+ text-align: center;
+ font-size: 1em;
+ color: #FF6E35;
+}
+
+.form {
+ width: 400;
+ margin-left: 60;
+ font-size: 1.5em;
+ text-align: center;
+ border-color: #35170B;
+ border-width: 1;
+ border-style: solid;
+ color: #35170B;
+}
+
+.logo {
+ width: 500;
+ margin-left: 10;
+}
+
+body {
+ -webkit-touch-callout: none;
+ /* iOS Safari */
+ -webkit-user-select: none;
+ /* Safari */
+ -khtml-user-select: none;
+ /* Konqueror HTML */
+ -moz-user-select: none;
+ /* Firefox */
+ -ms-user-select: none;
+ /* Internet Explorer/Edge */
+ user-select: none;
+ /* Non-prefixed version, currently supported by Chrome and Opera */
+}
diff --git a/css/main.css b/css/main.css
index 695a581..a5ceea6 100644
--- a/css/main.css
+++ b/css/main.css
@@ -39,6 +39,14 @@ body {
padding: 4;
}
+#playerinfo {
+ position: fixed;
+ width: 100%;
+ text-align: right;
+ top: 0;
+ color: floralwhite;
+}
+
#selectItem {
position: fixed;
border: 1px, solid, black;
diff --git a/game.html b/game.html
index 9742be9..e2218b4 100644
--- a/game.html
+++ b/game.html
@@ -1,7 +1,7 @@
- Factory
+ Factory Master
@@ -53,7 +53,7 @@
??? Dollar
-
+ Last Save 10Min ago
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..34af667
--- /dev/null
+++ b/index.html
@@ -0,0 +1,93 @@
+
+
+
+ Factory Master
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
Username:
+
Password:
+
+
Register?
+
+
+

+
Username:
+
Password:
+
Repeat Password:
+
+
Login?
+
+
+
+
+
diff --git a/js/game.js b/js/game.js
index 5400bf1..2a8fe25 100644
--- a/js/game.js
+++ b/js/game.js
@@ -5,6 +5,7 @@ var money = 100
var items = []
var time = 0
+var gametime = 0
var timestep = 1000 / 48
var delta = 0
var lastFrameTimeMs = 0
@@ -22,14 +23,21 @@ var mode = "none"
var renderItems = true
+var playername = "Player"
+var lastsave = 0
+
$(document).ready(function() {
- $("#save").click(function() {
+ $("#forcesave").click(function() {
save()
- $("#textarea").val(JSON.stringify(game))
})
- $("#load").click(function() {
- game = JSON.parse($("#textarea").val())
- loadGameData()
+ $("#logout").click(function() {
+ $.get("php/logout.php", function(data) {
+ window.location.replace("index.html")
+ })
+ })
+ $.get("php/playerdata.php", function(data) {
+ if (JSON.parse(data).status == "nologin")
+ window.location.replace("index.html")
})
loadGameData()
loadItems()
@@ -47,6 +55,7 @@ $(window).on("beforeunload", function() {
function save() {
game = {}
game.money = money
+ game.gametime = gametime
game.inventory = []
for (var i = 0; i < inventory.items.length; i++) {
game.inventory.push(inventory.items[i].id)
@@ -81,40 +90,64 @@ function save() {
}
}
Cookies.set("game", JSON.stringify(game))
+ $.ajax({
+ url: 'php/savegame.php',
+ type: 'POST',
+ data: {
+ gamedata: JSON.stringify(game),
+ "gametime": gametime
+ },
+ success: function(result) {
+ console.log(result)
+ if (JSON.parse(result).status == "succes") {
+ lastsave = new Date().getTime()
+ }
+ }
+ });
}
function loadGameData() {
+ lastsave = new Date().getTime()
//Keine Save Vorhanden
factorys.push(new Factory())
inventory = new Inventory()
//game = Cookies.get("game")
- if (game != 0) {
- //game = JSON.parse(game)
- money = game.money
- inventory = new Inventory()
- factorys = []
- for (var i = 0; i < game.inventory.length; i++) {
- inventory.addItem(new Item(game.inventory[i]))
+ $.get("php/playerdata.php", function(data) {
+ if (JSON.parse(data).gametime != undefined) {
+ game = JSON.parse(data)
+ } else {
+ game = 0
}
- for (var i = 0; i < game.factorys.length; i++) {
- factorys.push(new Factory)
- for (var x = 0; x < 25; x++) {
- for (var y = 0; y < 12; y++) {
- if (game.factorys[i].tiles[x][y] != 0) {
- var keys = Object.keys(game.factorys[i].tiles[x][y])
- factorys[i].tiles[x][y] = new tileClasses[game.factorys[i].tiles[x][y].i](game.factorys[i].tiles[x][y].x, game.factorys[i].tiles[x][y].y)
- factorys[i].tiles[x][y].factory = factorys[i]
- for (var key = 0; key < keys.length; key++) {
- if (keys[key] == "d")
- factorys[i].tiles[x][y].direction = d[game.factorys[i].tiles[x][y]["d"]]
- else
- factorys[i].tiles[x][y][keys[key]] = game.factorys[i].tiles[x][y][keys[key]]
+ if (game != 0) {
+ //game = JSON.parse(game)
+ console.log("Loading Game")
+ money = game.money
+ gametime = game.gametime
+ inventory = new Inventory()
+ factorys = []
+ for (var i = 0; i < game.inventory.length; i++) {
+ inventory.addItem(new Item(game.inventory[i]))
+ }
+ for (var i = 0; i < game.factorys.length; i++) {
+ factorys.push(new Factory)
+ for (var x = 0; x < 25; x++) {
+ for (var y = 0; y < 12; y++) {
+ if (game.factorys[i].tiles[x][y] != 0) {
+ var keys = Object.keys(game.factorys[i].tiles[x][y])
+ factorys[i].tiles[x][y] = new tileClasses[game.factorys[i].tiles[x][y].i](game.factorys[i].tiles[x][y].x, game.factorys[i].tiles[x][y].y)
+ factorys[i].tiles[x][y].factory = factorys[i]
+ for (var key = 0; key < keys.length; key++) {
+ if (keys[key] == "d")
+ factorys[i].tiles[x][y].direction = d[game.factorys[i].tiles[x][y]["d"]]
+ else
+ factorys[i].tiles[x][y][keys[key]] = game.factorys[i].tiles[x][y][keys[key]]
+ }
}
}
}
}
}
- }
+ });
}
function loadItems() {
@@ -177,6 +210,7 @@ var tick = []
function gametick(timestep) {
//time gibt an in den Wievielten von 40 Ticks man sich befindet
time++
+ gametime++
time = time % 48
//Wird 40 mal in einer Sekunde aufgerufen
for (var i = 0; i < factorys.length; i++) {
@@ -189,6 +223,9 @@ function gametick(timestep) {
tick = tick.splice(1)
$("#speed").text("Game Speed: " + ((tick[47] - tick[0] + 30) / 10) + "%")
}
+ if (Math.round((new Date().getTime() - lastsave) / 60000) > 5 && lastsave != 0) {
+ save()
+ }
}
function render() {
@@ -293,6 +330,7 @@ function render() {
if (mode == "showmore") {
drawBigInventory(inventory)
}
+ $('#lastsave').text("last save " + Math.round((new Date().getTime() - lastsave) / 60000) + "min ago")
}
function getItemFormId(id) {
diff --git a/js/tiles.js b/js/tiles.js
index 794a86f..519fd08 100644
--- a/js/tiles.js
+++ b/js/tiles.js
@@ -253,7 +253,7 @@ class Quarry extends Tile {
this.hasNoInventory = true
this.cost = [{
"id": 0,
- "count": 10000
+ "count": 5000
}, {
"id": 2,
"count": 50
diff --git a/js/userinterface.js b/js/userinterface.js
index 45eaf0e..9946e9d 100644
--- a/js/userinterface.js
+++ b/js/userinterface.js
@@ -12,7 +12,11 @@ $(document).ready(function() {
})
function style() {
- var screenMarginTop = window.innerHeight - 912
+ var top = 0
+ if (window.innerHeight < 910) {
+ top = 43
+ }
+ var screenMarginTop = window.innerHeight - 912 + top
var screenMarginLeft = (window.innerWidth - 1200) / 2
var itemCountMarginTop = screenMarginTop + 624
var infoMarginLeft = screenMarginLeft + 768
diff --git a/js/util.js b/js/util.js
index 450c1d6..fb5ddec 100644
--- a/js/util.js
+++ b/js/util.js
@@ -47,6 +47,8 @@ function infoDrawRotatedImage(image, x, y, angle) {
}
function formatCount(c) {
+ if (c == 0)
+ return 0
for (var pow = 0; pow < lang.numbers.length; pow++) {
if (c / Math.pow(10, pow * 3) >= 1 && c / Math.pow(10, pow * 3) < 1000) {
return round(c / Math.pow(10, pow * 3), 3) + lang.numbers[pow]
diff --git a/php/login.php b/php/login.php
index 5e343c2..781502f 100644
--- a/php/login.php
+++ b/php/login.php
@@ -1,7 +1,36 @@
connect_error) {
+ die("Connection failed: " . $conn->connect_error);
+ }
+ $sql = "SELECT password FROM users WHERE username='".$_GET['username']."'";
+ $result = $conn->query($sql);
+ if ($result->num_rows > 0) {
+ // output data of each row
+ while($row = $result->fetch_assoc()) {
+ if(password_verify($_GET['password'],$row["password"])){
+ $_SESSION["login"] = "true";
+ $_SESSION["username"] = $_GET['username'];
+ echo '{"status": "succes"}';
+ }else{
+ //Wrong PW
+ echo '{"status": "error"}';
+ }
+ }
+ } else {
+ //Wrong Username
+ echo '{"status": "error"}';
+ }
+} else {
+ echo '{"status": "error"}';
+}
?>
diff --git a/php/logout.php b/php/logout.php
new file mode 100644
index 0000000..0a0fc99
--- /dev/null
+++ b/php/logout.php
@@ -0,0 +1,5 @@
+
diff --git a/php/playerdata.php b/php/playerdata.php
new file mode 100644
index 0000000..1e00bcf
--- /dev/null
+++ b/php/playerdata.php
@@ -0,0 +1,24 @@
+connect_error) {
+ die("Connection failed: " . $conn->connect_error);
+ }
+ $sql = "SELECT gamedata FROM users WHERE username='".$_SESSION["username"]."'";
+ $result = $conn->query($sql);
+ if ($result->num_rows > 0) {
+ // output data of each row
+ while($row = $result->fetch_assoc()) {
+ echo $row["gamedata"];
+ }
+ }
+ }
+}else{
+ echo '{"status": "nologin"}';
+}
+
+?>
diff --git a/php/register.php b/php/register.php
new file mode 100644
index 0000000..90ba60a
--- /dev/null
+++ b/php/register.php
@@ -0,0 +1,48 @@
+ 15) {
+ echo '{"status":"username"}';
+ $error = true;
+}
+if(strlen($passwort) == 0 && !$error) {
+ echo '{"status":"password1"}';
+ $error = true;
+}
+if($passwort != $passwort2 && !$error) {
+ echo '{"status":"password2"}';
+ $error = true;
+}
+
+if(!$error) {
+ $statement = $pdo->prepare("SELECT * FROM users WHERE username = :username");
+ $result = $statement->execute(array('username' => $username));
+ $user = $statement->fetch();
+ if($user !== false) {
+ echo '{"status":"username"}';
+ $error = true;
+ }
+}
+if(!$error) {
+ $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
+
+ $statement = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
+ $result = $statement->execute(array('username' => $username, 'password' => $passwort_hash));
+
+ if($result) {
+ $_SESSION["login"] = "true";
+ $_SESSION["username"] = $_GET['username'];
+ echo '{"status":"succes"}';
+ } else {
+ echo '{"status":"error"}';
+ }
+}
+?>
diff --git a/php/savegame.php b/php/savegame.php
new file mode 100644
index 0000000..96f9a29
--- /dev/null
+++ b/php/savegame.php
@@ -0,0 +1,35 @@
+connect_error) {
+ die("Connection failed: " . $conn->connect_error);
+ }
+ $sql = "SELECT gametime FROM users WHERE username='".$_SESSION["username"]."'";
+ $result = $conn->query($sql);
+ if ($result->num_rows > 0) {
+ // output data of each row
+ while($row = $result->fetch_assoc()) {
+ if( intval($row["gametime"]) < intval($gametime) ){
+ $sql = "UPDATE users SET gamedata = '". $gamedata ."' WHERE username = '".$_SESSION["username"]."'";
+ $result = $conn->query($sql);
+ $sql = "UPDATE users SET gametime = '". $gametime ."' WHERE username = '".$_SESSION["username"]."'";
+ $result = $conn->query($sql);
+ echo '{"status": "succes"}';
+ die();
+ } else {
+ echo '{"status": "old"}';
+ }
+ }
+ } else {
+ //Wrong Username
+ echo '{"status": "error"}';
+ }
+ }
+}
+?>