diff --git a/styles.css b/css/styles.css similarity index 52% rename from styles.css rename to css/styles.css index 0cc1d8178..3bcc21127 100644 --- a/styles.css +++ b/css/styles.css @@ -4,28 +4,54 @@ margin: 0; padding: 0; font-size: 16px; - font-family: Calibri, Arial, Helvetica; + font-family: 'Lucida Console', 'Lucida Sans Unicode', 'Fira Mono', 'Consolas', 'Times New Roman'; + background-color: #252527; + background-color: black; } -/* A border around the main container for the game */ -#container { - width: 800px; - height: 600px; - border: 1px solid black; +p { + color: #66ff33; } -/* Progress bar */ -#idleprogress { - width: 100%; - height: 16px; - background-color: #444 +.mainmenu { + list-style-type: none; + margin: 0; + padding: 0; + width: 10%; + position: fixed; + height: 100%; + overflow: auto; + + border: 0; + border-bottom: 1px solid #000000; + border-radius: 0; + background-color: #333; } -#progressvalue { - /* Start at 0% */ - width: 0%; - height: 16px; - background-color: #A1D490; +.mainmenu>li a { + display: block; + color: #e6e6e6; + background-color: #333; + padding: 16px; + text-decoration: none; +} + +.mainmenu>li a.active { + background-color: #4CAF50; + color: white; +} + +.mainmenu>li a:hover:not(.active) { + background-color: #555; + color: white; +} + +#character-container { + position: fixed; + padding-top: 10px; + padding-left: 10px; + margin-left: 10%; + width: 99%; } /* Style all the buttons */ @@ -48,13 +74,6 @@ input[type=button]:hover { h1 { padding: 8px; } -#hackingskill { - font-size: 24px; - color: green; -} -#hackbutton { - margin-left: 8px; -} /** add the same margin to the save button **/ #save { diff --git a/css/terminal.css b/css/terminal.css new file mode 100644 index 000000000..c91de6ea0 --- /dev/null +++ b/css/terminal.css @@ -0,0 +1,32 @@ +#terminal-container { + position: fixed; + margin-left: 10%; + width: 99%; +} + +#terminal { + padding-top: 10px; + padding-left: 10px; + height: auto; + font-size: 16px; +} + +#terminal-input { + background-color: black; + color: #66ff33; + transition: height 1s; +} + +.terminal-input { + display: table-cell; + padding: 0px !important; + margin: 0px !important; + border: 0px; + background-color: black; + font-size: 16px; + outline: none; + color: #66ff33; +} + + + diff --git a/engine.js b/engine.js deleted file mode 100644 index bddcd1a76..000000000 --- a/engine.js +++ /dev/null @@ -1,177 +0,0 @@ - -var Engine = { - - //Clickable objects - Clickables: { - hackButton: null, - - //Load, save, and delete - saveButton: null, - loadButton: null, - deleteButton: null - }, - - //Display objects - Display: { - //Progress bar - progress: null, - - //Display for status text (such as "Saved" or "Loaded") - statusText: null, - - hackingSkill: null, - }, - - //Player objects - Player: { - hackingSkill: 0, - money: 0, - strength: 0, - defense: 0, - agility: 0, - dexterity: 0, - }, - - //Time variables (milliseconds unix epoch time) - _timeThen: new Date().getTime(), - _timeNow: new Date().getTime(), - - _ticks: 0, //Total ticks - _idleSpeed: 200, //Speed (in ms) at which the main loop is updated - - //Display a status update text - _lastStatus: null, - displayStatusText: function(text) { - Engine.Display.statusText.innerHTML = text; - - clearTimeout(Engine._lastStatus); - //Wipe status message after 3 seconds - Engine._lastStatus = setTimeout(function() { - Engine.Display.statusText.innerHTML = ""; - }, 3000); - }, - - //Save function - saveFile: function() { - var tempSaveFile = JSON.stringify(Engine.Player); - - window.localStorage.setItem("netburnerSave", tempSaveFile); - - Engine.displayStatusText("Saved!"); - }, - - //Load saved game function - loadSave: function() { - //Check to see if file exists - if (!window.localStorage.getItem("netburnerSave")) { - Engine.displayStatusText("No save file present for load!"); - } else { - var tempSaveFile = window.localStorage.getItem("netburnerSave"); - Engine.Player = JSON.parse(tempSaveFile); - Engine.displayStatusText("Loaded successfully!"); - } - }, - - deleteSave: function() { - if (!window.localStorage.getItem("netburnerSave")) { - Engine.displayStatusText("No save file present for deletion"); - } else { - window.localStorage.removeItem("netburnerSave"); - Engine.displayStatusText("Deleted successfully!"); - } - }, - - /* Main Event Loop */ - idleTimer: function() { - //Get time difference - Engine._timeNow = new Date().getTime(); - var timeDifference = Engine._timeNow - Engine._timeThen - Engine._ticks; - - while (timeDifference >= Engine._idleSpeed) { - Engine.Display.hackingSkill.innerHTML = Engine.Player.hackingSkill; - - //Update timeDifference based on the idle speed - timeDifference -= Engine._idleSpeed; - - //Update the total tick counter - Engine._ticks += Engine._idleSpeed; - } - - var idleTime = Engine._idleSpeed - timeDifference; - - // - The $ means, "Start jQuery function" - // - The ("#progressvalue") tells jQuery to target that CSS element. - // - Next is .animate({ which means - start an animation. - // - The width: "100%" line tells jQuery what to animate. - // - the idleTime is how long the animation should run for. - // - the function() { starts AFTER the animation is finished. - // - $(this).css("width","0%"); resets the width of the element to zero. - $("#progressvalue").animate({ - width: "100%" - }, idleTime, function() { - $(this).css("width","0%"); - }); - - // Once that entire "while loop" has run, we call the IdleTimer - // function again, but this time with a timeout (delay) of - // _idleSpeed minus timeDifference - setTimeout(Engine.idleTimer, idleTime); - - }, - - /* Initialization */ - init: function() { - //Progress button - Engine.Display.Progress = document.getElementById("progressvalue"); - - //Hacking button - Engine.Clickables.hackButton = document.getElementById("hackbutton"); - - //Event Listener for hacking button - Engine.Clickables.hackButton.addEventListener("click", function() { - ++Engine.Player.hackingSkill; - - //Returns false so that once the code runs, the button won't try to do - //anything else - return false; - }); - - //Hacking Skill Display - Engine.Display.hackingSkill = document.getElementById("hackingskill"); - - //Status display - Engine.Display.statusText = document.getElementById("status"); - - //Load, save, and delete buttons - Engine.Clickables.saveButton = document.getElementById("save"); - Engine.Clickables.saveButton.addEventListener("click", function() { - Engine.saveFile(); - return false; - }); - - Engine.Clickables.loadButton = document.getElementById("load"); - Engine.Clickables.loadButton.addEventListener("click", function() { - Engine.loadSave(); - return false; - }); - - Engine.Clickables.deleteButton = document.getElementById("delete"); - Engine.Clickables.deleteButton.addEventListener("click", function() { - Engine.deleteSave(); - return false; - }); - - //Run main loop - Engine.idleTimer(); - } - -}; - -window.onload = function() { - Engine.init(); -}; - - - - - \ No newline at end of file diff --git a/index.html b/index.html index 2a4e7d303..bdb65b45d 100644 --- a/index.html +++ b/index.html @@ -3,34 +3,59 @@ Netburner - + + + -
- -
- -
-
- -

Hacking Skill: 0

- - - -

- - - - - -

-
+ +
+ + + + + + +
$
+
+ +
+

+
+ - + + + + - + + + + \ No newline at end of file diff --git a/src/Player.js b/src/Player.js index 547838790..3950ea3b9 100644 --- a/src/Player.js +++ b/src/Player.js @@ -1,6 +1,6 @@ //Netburner Player class -netburner.Player = { +var Player = { //Skills and stats hacking_skill: 1, strength: 1, @@ -40,8 +40,8 @@ netburner.Player = { lifetime_money: 0, //Servers - discoveredServers = [], - purchasedServers = [], + //discoveredServers = [], + //purchasedServers = [], //Achievements and achievement progress diff --git a/src/Server.js b/src/Server.js index 54b1ca298..38fdbf3e0 100644 --- a/src/Server.js +++ b/src/Server.js @@ -1,6 +1,6 @@ //Netburner Server class // Parent class for a Server object. PlayerServer and NPCServer inherit from this -netburner.Server = { +var Server = { //Connection information ip: "0.0.0.0", isOnline: false, @@ -11,7 +11,7 @@ netburner.Server = { max_ram: 1, //GB ram_used: 0, - scripts = []; + //scripts = [], //Manual hack state information is_hacking: false, diff --git a/src/Terminal.js b/src/Terminal.js new file mode 100644 index 000000000..a7744526a --- /dev/null +++ b/src/Terminal.js @@ -0,0 +1,30 @@ +//Terminal +var post = function(input) { + $("#terminal-input").before('' + input + ''); + window.scrollTo(0, document.body.scrollHeight); +} + +//command is checked on enter key press +$(document).keyup(function(event) { + if (event.keyCode == 13) { + var command = $('input[class=terminal-input]').val(); + if (command.length > 0) { + post("> " + command); + $('input[class=terminal-input]').val(""); + + //Execute command function here + } + } +}); + +var executeCommand = function(command) { + var commandArray = command.split(); + + if (commandArray.length == 0) { + return; + } + + switch (commandArray[0]) { + case + } +} \ No newline at end of file diff --git a/src/engine.js b/src/engine.js new file mode 100644 index 000000000..946b18fd7 --- /dev/null +++ b/src/engine.js @@ -0,0 +1,215 @@ + +var Engine = { + + //Clickable objects + Clickables: { + hackButton: null, + + //Load, save, and delete + saveButton: null, + loadButton: null, + deleteButton: null, + + //Main menu buttons + terminalMainMenuButton: null, + characterMainMenuButton: null, + }, + + //Display objects + Display: { + //Progress bar + progress: null, + + //Display for status text (such as "Saved" or "Loaded") + statusText: null, + + hacking_skill: null, + + //Main menu content + terminalContent: null, + characterContent: null, + + //Character info + characterInfo: null, + }, + + //Time variables (milliseconds unix epoch time) + _timeThen: new Date().getTime(), + _timeNow: new Date().getTime(), + + _ticks: 0, //Total ticks + _idleSpeed: 200, //Speed (in ms) at which the main loop is updated + + //Display a status update text + _lastStatus: null, + displayStatusText: function(text) { + Engine.Display.statusText.innerHTML = text; + + clearTimeout(Engine._lastStatus); + //Wipe status message after 3 seconds + Engine._lastStatus = setTimeout(function() { + Engine.Display.statusText.innerHTML = ""; + }, 3000); + }, + + //Save function + saveFile: function() { + var tempSaveFile = JSON.stringify(Player); + + window.localStorage.setItem("netburnerSave", tempSaveFile); + + Engine.displayStatusText("Saved!"); + }, + + //Load saved game function + loadSave: function() { + //Check to see if file exists + if (!window.localStorage.getItem("netburnerSave")) { + Engine.displayStatusText("No save file present for load!"); + } else { + var tempSaveFile = window.localStorage.getItem("netburnerSave"); + Player = JSON.parse(tempSaveFile); + Engine.displayStatusText("Loaded successfully!"); + } + }, + + //Delete saved game function + deleteSave: function() { + if (!window.localStorage.getItem("netburnerSave")) { + Engine.displayStatusText("No save file present for deletion"); + } else { + window.localStorage.removeItem("netburnerSave"); + Engine.displayStatusText("Deleted successfully!"); + } + }, + + /* Load content when a main menu button is clicked */ + loadTerminalContent: function() { + Engine.hideAllContent(); + Engine.Display.terminalContent.style.visibility = "visible"; + }, + + loadCharacterContent: function() { + Engine.hideAllContent(); + Engine.Display.characterContent.style.visibility = "visible"; + Engine.displayCharacterInfo(); + }, + + //Helper function that hides all content + hideAllContent: function() { + Engine.Display.terminalContent.style.visibility = "hidden"; + Engine.Display.characterContent.style.visibility = "hidden"; + }, + + /* Display character info */ + displayCharacterInfo: function() { + Engine.Display.characterInfo.innerHTML = 'Money: $' + Player.money + '

' + + 'Hacking Level: ' + Player.hacking_skill + '

' + + 'Strength: ' + Player.strength + '

' + + 'Defense: ' + Player.defense + '

' + + 'Dexterity: ' + Player.dexterity + '

' + + 'Agility: ' + Player.agility + '

'; + }, + + /* Main Event Loop */ + idleTimer: function() { + //Get time difference + Engine._timeNow = new Date().getTime(); + var timeDifference = Engine._timeNow - Engine._timeThen - Engine._ticks; + + while (timeDifference >= Engine._idleSpeed) { + //Engine.Display.hacking_skill.innerHTML = Player.hacking_skill; + + //Update timeDifference based on the idle speed + timeDifference -= Engine._idleSpeed; + + //Update the total tick counter + Engine._ticks += Engine._idleSpeed; + } + + var idleTime = Engine._idleSpeed - timeDifference; + + + // Once that entire "while loop" has run, we call the IdleTimer + // function again, but this time with a timeout (delay) of + // _idleSpeed minus timeDifference + setTimeout(Engine.idleTimer, idleTime); + + }, + + /* Initialization */ + init: function() { + //Hacking button + //Engine.Clickables.hackButton = document.getElementById("hackbutton"); + + //Event Listener for hacking button + //Engine.Clickables.hackButton.addEventListener("click", function() { + // ++Player.hacking_skill; + + //Returns false so that once the code runs, the button won't try to do + //anything else + // return false; + //}); + + //Hacking Skill Display + //Engine.Display.hacking_skill = document.getElementById("hackingskill"); + + //Status display + //Engine.Display.statusText = document.getElementById("status"); + + //Load, save, and delete buttons + //Engine.Clickables.saveButton = document.getElementById("save"); + //Engine.Clickables.saveButton.addEventListener("click", function() { + // Engine.saveFile(); + // return false; + //}); + + //Engine.Clickables.loadButton = document.getElementById("load"); + //Engine.Clickables.loadButton.addEventListener("click", function() { + // Engine.loadSave(); + // return false; + //}); + + //Engine.Clickables.deleteButton = document.getElementById("delete"); + //Engine.Clickables.deleteButton.addEventListener("click", function() { + // Engine.deleteSave(); + // return false; + //}); + + //Main menu buttons and content + Engine.Clickables.terminalMainMenuButton = document.getElementById("terminal-menu-link"); + Engine.Clickables.terminalMainMenuButton.addEventListener("click", function() { + Engine.loadTerminalContent(); + return false; + }); + + Engine.Clickables.characterMainMenuButton = document.getElementById("character-menu-link"); + Engine.Clickables.characterMainMenuButton.addEventListener("click", function() { + Engine.loadCharacterContent(); + return false; + }); + + Engine.Display.terminalContent = document.getElementById("terminal-container"); + Engine.Display.characterContent = document.getElementById("character-container"); + Engine.Display.characterContent.style.visibility = "hidden"; + + //Character info + Engine.Display.characterInfo = document.getElementById("character-info"); + Engine.displayCharacterInfo(); + + //Message at the top of terminal + post("Netburner v1.0"); + + //Run main loop + Engine.idleTimer(); + } +}; + +window.onload = function() { + Engine.init(); +}; + + + + + \ No newline at end of file