commit 741ef70b37bbbe797749ecff4fd2f995ca51a9bf Author: pjht Date: Sun Sep 30 13:30:40 2018 -0500 Initial commit diff --git a/index.html b/index.html new file mode 100644 index 0000000..07a4e7c --- /dev/null +++ b/index.html @@ -0,0 +1,68 @@ + + + + My Incremental Game + + + + + + + + + +
+ +
+
+

Resources:

+

+
+
+
+
+

Buildings:

+

+
+
+

Population uninitialized!

+

Working population uninitialized!

+

Number of lumberjacks uninitialized!

+ + +

Number of miners uninitialized!

+ + +
+

Number of scientists uninitialized!

+ + +
+
+
+

Research points uninitialized!

+
+

Researches:

+
+
+
+ +
+ + diff --git a/main.css b/main.css new file mode 100644 index 0000000..1ece508 --- /dev/null +++ b/main.css @@ -0,0 +1,14 @@ +/* body { + background-color: gray; +} +.nav { + background-color: gray; +} + +.active { + background-color: black !important; +} + +a:hover { + background-color: black !important; +} */ diff --git a/main.js b/main.js new file mode 100644 index 0000000..9efc85d --- /dev/null +++ b/main.js @@ -0,0 +1,464 @@ +var maxPop=0; +var pop=0; +var working=0; +var resources={}; +var maxResources=50; +var numResources=0; +var buildings={}; +var unlockedBuildings=[]; +var has_shelter=false; +var research_enabled=false; +var researches={}; +var unlockedResearch=[]; +var research_points=0; +var max_research_points=0; +var workers={ + lumberjack:0, + miner:0, + scientist:0 +}; +var all_buildings={ + hut:{ + ings:{ + wood:15 + }, + build_effects:{ + maxPop:2 + } + }, + house:{ + ings:{ + wood:30, + metal:5 + }, + build_effects:{ + maxPop:4 + } + }, + lab:{ + ings:{ + wood:30, + metal:15 + }, + build_effects:{ + research_enabled:true, + max_research_points:150 + } + }, + storehouse:{ + ings:{ + wood:40 + }, + build_effects: { + max_resources:50 + } + } +}; +var worker_resource={ + lumberjack:"wood", + miner:"metal", + scientist:"research_points" +}; +var worker_rate=0.5; +var all_researches={ + "Faster Workers":{ + maxLevel:3, + cost:100, + effects:{ + worker_rate:0.5 + } + } +}; +var multiplier=1.17; +function updateShown() { + var has_resources=Object.keys(resources).length>0; + $(".shelter_required").toggle(has_shelter); + $("#link_population").toggle(has_shelter); + $(".resources_required").toggle(has_resources); + $("#link_buildings").toggle(has_resources); + $("#link_research").toggle(research_enabled); + $(".research_required").toggle(research_enabled); +} +function incResource(name,amount=1) { + if (name=="research_points") { + if (research_points>max_research_points) { + return; + } + research_points+=amount; + if (research_points>max_research_points) { + research_points-=amount; + return; + } + updateResearchPointInfo(); + updateResearchButtons(); + } else { + if (numResources>maxResources) { + return; + } + if (resources[name]) { + resources[name]+=amount; + } else { + resources[name]=amount; + } + numResources+=amount; + if (numResources>maxResources) { + decResource(name,amount); + return; + } + updateResourceInfo(); + + updateCraftButtons(); + } + updateShown(); +} +function decResource(name,amount) { + if (resources[name]=ings[ing])) { + enough=false; + break; + } + } + if (enough) { + for (var ing in ings) { + var amount=ings[ing]; + decResource(ing,amount); + } + updateResourceInfo(); + updateCraftButtons(); + incBuilding(name); + } +} +function capitalizeFirst(str) { + return str.charAt(0).toUpperCase()+str.slice(1); +} +function updateResourceInfo() { + $("#resources").html(""); + for (var name in resources) { + var capName=capitalizeFirst(name); + $("#resources").append("

"+capName+": "+resources[name]+"

"); + } + $("#max_resources").text("Resources: ("+numResources+"/"+maxResources+")"); +} +function updateBuildingInfo() { + $("#buildings").html(""); + for (var name in buildings) { + var capName=capitalizeFirst(name); + $("#buildings").append("

"+capName+": "+buildings[name]+"

"); + } +} +function updateCraftButtons() { + $("#craft_buttons").html(""); + for (var name in all_buildings) { + var ings=buildingCost(name); + var show=true; + var disabled=false; + if (!unlockedBuildings.includes(name)) { + for (var ing in ings) { + if (!(resources[ing]>=(ings[ing]/2))) { + show=false; + break; + } + if (!(resources[ing]>=ings[ing])) { + disabled=true; + } + } + } else { + for (var ing in ings) { + if (!(resources[ing]>=ings[ing])) { + disabled=true; + } + } + } + if (show) { + if (!unlockedBuildings.includes(name)) { + unlockedBuildings.push(name); + } + var btext=name+" ("; + var i=0; + var ingsize=Object.keys(ings).length; + for (var ing in ings) { + if (i==(ingsize-1)) { + btext+=ings[ing]+" "+ing+")"; + } else { + btext+=ings[ing]+" "+ing+", " + } + i++; + } + if (disabled) { + $("#craft_buttons").append("
"); + } else { + $("#craft_buttons").append("
"); + } + } + } +} +function updatePopulation() { + if(pop>0) { + updateWorkerInfo(); + } + if (pop"+name+" ("+cost+" points)
"); + } else { + $("#research_buttons").append("
"); + } + } + } +} +function hire(type) { + workers[type]+=1; + working+=1; + updateWorkerInfo(); +} +function fire(type) { + workers[type]-=1; + working-=1; + updateWorkerInfo(); +} +function autoInc() { + for (var worker in workers) { + worker_amount=workers[worker]; + amount=worker_rate*worker_amount; + if (amount>0) { + if (worker=="scientist") { + var usedMetal=Math.ceil(worker_amount*0.4); + if (resources["metal"]>=usedMetal) { + incResource(worker_resource[worker],amount); + decResource("metal",usedMetal); + } + } else { + incResource(worker_resource[worker],amount); + } + } + } +} +function save() { + gamestate={ + maxPop:maxPop, + pop:pop, + working:working, + workers:workers, + resources:resources, + maxResources:maxResources, + numResources:numResources, + buildings:buildings, + unlockedBuildings:unlockedBuildings, + has_shelter:has_shelter, + research_enabled:research_enabled, + researches:researches, + unlockedResearch:unlockedResearch, + research_points:research_points, + max_research_points:max_research_points + } + localStorage.setItem("game",JSON.stringify(gamestate)); +} +function load() { + var gamestate=JSON.parse(localStorage.getItem("game")); + if (gamestate==null) { + return false; + } + maxPop=gamestate.maxPop; + pop=gamestate.pop; + working=gamestate.working; + workers=gamestate.workers; + resources=gamestate.resources; + maxResources=gamestate.maxResources; + numResources=gamestate.numResources; + buildings=gamestate.buildings; + unlockedBuildings=gamestate.unlockedBuildings; + has_shelter=gamestate.has_shelter; + research_enabled=gamestate.research_enabled; + researches=gamestate.researches; + unlockedResearch=gamestate.unlockedResearch; + research_points=gamestate.research_points; + max_research_points=gamestate.max_research_points; + return true; +} + +function reset() { + localStorage.removeItem("game"); + if (load()!=false) { + alert("Unable to reset game"); + } + init(); +} +function init() { + if (!load()) { + maxPop=0; + maxResources=50; + pop=0; + working=0; + resources={}; + buildings={}; + unlockedBuildings=[]; + has_shelter=false; + research_enabled=false; + researches={}; + unlockedResearch=[]; + research_points=0; + workers={ + lumberjack:0, + miner:0, + scientist:0 + }; + } + set_tab("main"); + updateShown(); + updateResourceInfo(); + updateBuildingInfo(); + updatePopulationInfo(); + updateWorkerInfo(); + updateCraftButtons(); + updateResearchPointInfo(); + updateResearchButtons(); + updateResearchInfo(); + + applyResearches(); +} +function set_tab(tab) { + if ($("#link_"+tab).is(":visible")) { + $("[id^='tab_']").hide(); + $("[id^='link_']").removeClass("active"); + $("#tab_"+tab).show(); + $("#link_"+tab).addClass("active"); + } +} +function applyResearches() { + for (var research in researches) { + var effects=all_researches[research].effects; + var level=researches[research]; + for (var effect in effects) { + if (effect=="worker_rate") { + worker_rate=0.5; + worker_rate+=effects[effect]*level; + } + } + } +} +function updateResearchInfo() { + $("#researches").html(""); + for (var name in researches) { + $("#researches").append("

"+name+": Level "+researches[name]+"

"); + } +} +$(document).ready(function() { + init(); + $(window).on("unload",function(e){ + save(); + }); + window.setInterval(function() { + updatePopulation(); + }, 10000); + window.setInterval(function() { + autoInc(); + }, 2000); +});