Started working on Work functionality

This commit is contained in:
Daniel Xie 2017-02-05 23:01:01 -06:00
parent d20da28c51
commit f5b0796948
6 changed files with 155 additions and 4 deletions

27
css/workinprogress.css Normal file

@ -0,0 +1,27 @@
#work-in-progress-container {
}
#work-in-progress-text {
color: #66ff33;
}
#work-in-progress-cancel-button {
color: #aaa;
float: right;
font-size: 20px;
font-weight: bold;
-webkit-border-radius: 12px;
-moz-border-radius: 12px;
border-radius: 12px;
-moz-box-shadow: 1px 1px 3px #000;
-webkit-box-shadow: 1px 1px 3px #000;
box-shadow: 1px 1px 3px #000;
}
#work-in-progress-cancel-button:hover,
#work-in-progress-cancel-button:focus {
color: white;
text-decoration: none;
cursor: pointer;
}

@ -355,6 +355,8 @@
<p id="location-info"> </p> <p id="location-info"> </p>
<p id="location-job-title"> </p> <p id="location-job-title"> </p>
<p id="location-job-reputation"> </p>
<!-- Jobs/Work at a company --> <!-- Jobs/Work at a company -->
<a href="#" id="location-software-job" class="a-link-button"> Apply for Software Job</a> <a href="#" id="location-software-job" class="a-link-button"> Apply for Software Job</a>
<a href="#" id="location-it-job" class="a-link-button"> Apply for IT Job </a> <a href="#" id="location-it-job" class="a-link-button"> Apply for IT Job </a>
@ -418,5 +420,12 @@
</div> </div>
</div> </div>
<!-- Work in progress screen -->
<div id="work-in-progress-container">
<p id="work-in-progress-text"> </p>
<span id="work-in-progress-cancel-button"> Cancel Work </span>
</div>
</body> </body>
</html> </html>

@ -141,7 +141,7 @@ displayLocationContent = function() {
employeeJob.style.display = "none"; employeeJob.style.display = "none";
waiterJob.style.display = "none"; waiterJob.style.display = "none";
work.style.display = "none"; //TODO DIsplay this work.style.display = "block";
gymTrainStr.style.display = "none"; gymTrainStr.style.display = "none";
gymTrainDef.style.display = "none"; gymTrainDef.style.display = "none";
@ -167,6 +167,24 @@ displayLocationContent = function() {
travelToIshima.style.display = "none"; travelToIshima.style.display = "none";
travelToVolhaven.style.display = "none"; travelToVolhaven.style.display = "none";
//Check if the player is employed at this Location. If he is, display the "Work" button,
//update the job title, etc.
if (pos == Player.companyName) {
var company = Companies[pos];
jobTitle = document.getElementById("location-job-title");
jobTitle.innerHTML = "Job Title: " + Player.companyPosition.positionName;
jobReputation = document.getElementById("location-job-reputation");
jobReputation.innerHTML = "Company reputation: " + company.playerReputation;
work.style.display = "block";
work.addEventListener("click", function() {
Player.startWork();
return false;
});
}
switch (loc) { switch (loc) {
case Locations.AevumTravelAgency: case Locations.AevumTravelAgency:
travelToChongqing.style.display = "block"; travelToChongqing.style.display = "block";

@ -64,8 +64,8 @@ function PlayerObject() {
this.location = ""; this.location = "";
//Company Information //Company Information
this.companyName = ""; this.companyName = ""; //Name of Company, equivalent to an object from Locations
this.companyPosition = ""; this.companyPosition = ""; //CompanyPosition object
//Servers //Servers
this.currentServer = ""; //IP address of Server currently being accessed through terminal this.currentServer = ""; //IP address of Server currently being accessed through terminal
@ -74,10 +74,22 @@ function PlayerObject() {
//Achievements and achievement progress //Achievements and achievement progress
//Flag to let the engine know the player is starting a hack //Flag to let the engine know the player is starting an action
// Current actions: hack, analyze
this.startAction = false; this.startAction = false;
this.actionTime = 0; this.actionTime = 0;
//Flags for working
this.isWorking = false;
this.workHackExpGained = 0;
this.workStrExpGained = 0;
this.workDefExpGained = 0;
this.workDexExpGained = 0;
this.workAgiExpGained = 0;
this.workRepGained = 0;
this.workMoneyGained = 0;
this.timeWorked = 0; //in ms
//Used to store the last update time. //Used to store the last update time.
this.lastUpdate = new Date().getTime(); this.lastUpdate = new Date().getTime();
}; };
@ -184,6 +196,68 @@ PlayerObject.prototype.gainMoney = function(money) {
this.lifetime_money += money; this.lifetime_money += money;
} }
/* Working */
PlayerObject.prototype.startWork = function() {
this.isWorking = true;
this.workHackExpGained = 0;
this.workStrExpGained = 0;
this.workDefExpGained = 0;
this.workDexExpGained = 0;
this.workAgiExpGained = 0;
this.workRepGained = 0;
this.workMoneyGained = 0;
this.timeWorked = 0;
}
PlayerObject.prototype.work = function(numCycles) {
var txt = document.getElementById("work-in-progress-text");
txt.innerHTML = "You are currently working as a " + this.companyPosition.positionName +
" at " + Player.companyName + "<br><br>" +
"You have been working for " + convertTimeMsToTimeElapsedString(this.timeWorked) + "<br><br>" +
"You have earned: <br><br>" +
"$" + this.workMoneyGained + " ("
"You will automatically finish after working for 8 hours. You can cancel earlier if you wish, <br><br>" +
"but you will only gain half of the experience, money, and reputation you've earned so far."
}
//Money gained per game cycle
PlayerObject.prototype.getWorkMoneyGain() {
var company = Companies[this.companyName];
var salary = this.companyPosition.baseSalary;
return salary * company.salaryMultiplier;
}
//Hack exp gained per game cycle
PlayerObject.prototype.getWorkHackExpGain() {
}
//Str exp gained per game cycle
PlayerObject.prototype.getWorkStrExpGain() {
}
//Def exp gained per game cycle
PlayerObject.prototype.getWorkDefExpGain() {
}
//Dex exp gained per game cycle
PlayerObject.prototype.getWorkDexExpGain() {
}
//Agi exp gained per game cycle
PlayerObject.prototype.getWorkAgiExpGain() {
}
//Reputation gained per game cycle
PlayerObject.prototype.getWorkRepGain() {
}
//Functions for saving and loading the Player data //Functions for saving and loading the Player data
PlayerObject.prototype.toJSON = function() { PlayerObject.prototype.toJSON = function() {
return Generic_toJSON("PlayerObject", this); return Generic_toJSON("PlayerObject", this);

@ -425,6 +425,10 @@ var Engine = {
Player.startAction = false; Player.startAction = false;
} }
if (Player.isWorking) {
//TODO
}
//Counters //Counters
Engine.decrementAllCounters(numCycles); Engine.decrementAllCounters(numCycles);
Engine.checkCounters(); Engine.checkCounters();

@ -23,3 +23,22 @@ function getIndicesOf(searchStr, str, caseSensitive) {
String.prototype.replaceAt=function(index, character) { String.prototype.replaceAt=function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length); return this.substr(0, index) + character + this.substr(index+character.length);
} }
//Converts a date representing time in milliseconds to a string with the format
// H hours M minutes and S seconds
// e.g. 10000 -> "0 hours 0 minutes and 10 seconds"
// 120000 -> "0 0 hours 2 minutes and 0 seconds"
function convertTimeMsToTimeElapsedString(time) {
//Convert ms to seconds, since we only have second-level precision
time = Math.floor(time / 1000);
var hours = Math.floor(time / 3600);
time %= 3600;
var minutes = Math.floor(time / 60);
time %= 60;
var seconds = time;
return hours + " hours " + minutes + " minutes " + seconds + " seconds";
}