From 586de44b18a559402cf30e196cdf2fd5456ddbe5 Mon Sep 17 00:00:00 2001 From: Jacob Jensen Date: Wed, 30 Jul 2014 23:29:22 +0200 Subject: [PATCH] Added mutation points. Currently they don't restrict much as you can simply exit and reenter editor to fill mutation points, but once we are ready we will limit editor to reproduction. --- CMakeLists.txt | 5 ---- assets/definitions/processes.xml | 2 +- scripts/microbe_editor/microbe_editor.lua | 28 +++++++++++++------ scripts/microbe_editor/microbe_editor_hud.lua | 8 ++++++ scripts/microbe_stage/agent_vacuole.lua | 2 ++ scripts/microbe_stage/camera.lua | 2 +- scripts/microbe_stage/microbe.lua | 4 ++- scripts/microbe_stage/microbe_stage_hud.lua | 10 +++++++ scripts/microbe_stage/movement_organelle.lua | 2 ++ scripts/microbe_stage/organelle.lua | 2 ++ scripts/microbe_stage/process_organelle.lua | 3 ++ scripts/microbe_stage/setup.lua | 1 - scripts/microbe_stage/storage_organelle.lua | 1 + 13 files changed, 53 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f8434efcfcb..0d8441dc3e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -435,11 +435,6 @@ install(DIRECTORY PATTERN "*.xml" ) -# Create directory tree that thrive requires -file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin/creations) -file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin/creations/microbe) -file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin/creations/multicellular) - # Install Runtime Libraries if(WIN32) diff --git a/assets/definitions/processes.xml b/assets/definitions/processes.xml index 10a2349f124..7c1621da79d 100644 --- a/assets/definitions/processes.xml +++ b/assets/definitions/processes.xml @@ -10,7 +10,7 @@ - + diff --git a/scripts/microbe_editor/microbe_editor.lua b/scripts/microbe_editor/microbe_editor.lua index 5513d9cf632..a23a051c3fa 100644 --- a/scripts/microbe_editor/microbe_editor.lua +++ b/scripts/microbe_editor/microbe_editor.lua @@ -15,6 +15,7 @@ function MicrobeEditor:__init(hudSystem) self.hudSystem = hudSystem self.nextMicrobeEntity = nil self.lockedMap = nil + self.mutationPoints = 100 self.placementFunctions = {["nucleus"] = MicrobeEditor.createNewMicrobe, ["flagelium"] = MicrobeEditor.addMovementOrganelle, ["mitochondria"] = MicrobeEditor.addProcessOrganelle, @@ -35,6 +36,7 @@ function MicrobeEditor:activate() Engine:playerData():setBool("edited_microbe", true) Engine:playerData():setActiveCreature(self.nextMicrobeEntity.id, GameState.MICROBE_EDITOR) end + self.mutationPoints = 100 end function MicrobeEditor:update(milliseconds) @@ -55,6 +57,16 @@ function MicrobeEditor:update(milliseconds) organelle:_updateHexColours() end end + self.hudSystem:updateMutationPoints() +end + +function MicrobeEditor:takeMutationPoints(amount) + if amount <= self.mutationPoints then + self.mutationPoints = self.mutationPoints - amount + return true + else + return false + end end function MicrobeEditor:performLocationAction() @@ -82,7 +94,7 @@ function MicrobeEditor:removeOrganelle() local q, r = self:getMouseHex() if not (q == 0 and r == 0) then -- Don't remove nucleus local organelle = self.currentMicrobe:getOrganelleAt(q,r) - if organelle then + if organelle and self:takeMutationPoints(10) then self.currentMicrobe:removeOrganelle(organelle.position.q ,organelle.position.r ) self.currentMicrobe.sceneNode.transform:touch() self.organelleCount = self.organelleCount - 1 @@ -94,7 +106,7 @@ end function MicrobeEditor:addStorageOrganelle(organelleType) -- self.currentMicrobe = Microbe(Entity("working_microbe", GameState.MICROBE)) local q, r = self:getMouseHex() - if self.currentMicrobe:getOrganelleAt(q, r) == nil then + if self.currentMicrobe:getOrganelleAt(q, r) == nil and self:takeMutationPoints(Organelle.mpCosts["vacuole"]) then self.currentMicrobe:addOrganelle(q, r, OrganelleFactory.make_vacuole({})) self.organelleCount = self.organelleCount + 1 end @@ -104,7 +116,7 @@ end function MicrobeEditor:addMovementOrganelle(organelleType) local q, r = self:getMouseHex() local data = {["q"]=q, ["r"]=r} - if self.currentMicrobe:getOrganelleAt(q, r) == nil then + if self.currentMicrobe:getOrganelleAt(q, r) == nil and self:takeMutationPoints(Organelle.mpCosts["flagellum"]) then self.currentMicrobe:addOrganelle(q,r, OrganelleFactory.make_flagellum(data)) self.organelleCount = self.organelleCount + 1 end @@ -114,12 +126,10 @@ function MicrobeEditor:addProcessOrganelle(organelleType) local q, r = self:getMouseHex() if self.currentMicrobe:getOrganelleAt(q, r) == nil then - if organelleType == "mitochondria" then + if organelleType == "mitochondria" and self:takeMutationPoints(Organelle.mpCosts["mitochondrion"]) then self.currentMicrobe:addOrganelle(q,r, OrganelleFactory.make_mitochondrion({})) - elseif organelleType == "chloroplast" then + elseif organelleType == "chloroplast" and self:takeMutationPoints(Organelle.mpCosts["chloroplast"]) then self.currentMicrobe:addOrganelle(q,r, OrganelleFactory.make_chloroplast({})) - else - assert(false, "organelleType did not exist") end end self.organelleCount = self.organelleCount + 1 @@ -128,7 +138,7 @@ end function MicrobeEditor:addAgentVacuole(organelleType) if organelleType == "toxin" then local q, r = self:getMouseHex() - if self.currentMicrobe:getOrganelleAt(q, r) == nil then + if self.currentMicrobe:getOrganelleAt(q, r) == nil and self:takeMutationPoints(Organelle.mpCosts["oxytoxy"]) then self.currentMicrobe:addOrganelle(q, r, OrganelleFactory.make_oxytoxy({})) self.organelleCount = self.organelleCount + 1 end @@ -152,6 +162,7 @@ function MicrobeEditor:loadMicrobe(entityId) self.currentMicrobe.sceneNode.transform:touch() self.currentMicrobe.collisionHandler:addCollisionGroup("powerupable") Engine:playerData():setActiveCreature(entityId, GameState.MICROBE_EDITOR) + self.mutationPoints = 0 end function MicrobeEditor:createNewMicrobe() @@ -165,5 +176,6 @@ function MicrobeEditor:createNewMicrobe() self.currentMicrobe.sceneNode.transform:touch() self.currentMicrobe.collisionHandler:addCollisionGroup("powerupable") self:addNucleus() + self.mutationPoints = 100 Engine:playerData():setActiveCreature(self.currentMicrobe.entity.id, GameState.MICROBE_EDITOR) end diff --git a/scripts/microbe_editor/microbe_editor_hud.lua b/scripts/microbe_editor/microbe_editor_hud.lua index 6965aa5075f..e15cdb760c1 100644 --- a/scripts/microbe_editor/microbe_editor_hud.lua +++ b/scripts/microbe_editor/microbe_editor_hud.lua @@ -23,6 +23,8 @@ function MicrobeEditorHudSystem:init(gameState) sceneNode.meshName = "hex.mesh" self.hoverHex:addComponent(sceneNode) local root = gameState:rootGUIWindow() + self.mpLabel = root:getChild("BottomSection"):getChild("MutationPoints"):getChild("MPBar"):getChild("NumberLabel") + self.mpProgressBar = root:getChild("BottomSection"):getChild("MutationPoints"):getChild("MPBar") local nucleusButton = root:getChild("EditorTools"):getChild("NucleusItem") local flageliumButton = root:getChild("EditorTools"):getChild("FlageliumItem") local mitochondriaButton = root:getChild("EditorTools"):getChild("MitochondriaItem") @@ -139,6 +141,12 @@ function MicrobeEditorHudSystem:update(milliseconds) end +function MicrobeEditorHudSystem:updateMutationPoints() + self.mpProgressBar:progressbarSetProgress(self.editor.mutationPoints/100) + self.mpLabel:setText("" .. self.editor.mutationPoints) +end + + -- Event handlers function nucleusClicked() if global_activeMicrobeEditorHudSystem.activeButton ~= nil then diff --git a/scripts/microbe_stage/agent_vacuole.lua b/scripts/microbe_stage/agent_vacuole.lua index e9eab2fdf0f..ee280c817f7 100644 --- a/scripts/microbe_stage/agent_vacuole.lua +++ b/scripts/microbe_stage/agent_vacuole.lua @@ -80,6 +80,8 @@ function AgentVacuole:load(storage) self.process = process end +Organelle.mpCosts["oxytoxy"] = 40 + -- factory functions function OrganelleFactory.make_oxytoxy(data) local agentVacuole = AgentVacuole(CompoundRegistry.getCompoundId("oxytoxy"), global_processMap["OxyToxySynthesis"]) diff --git a/scripts/microbe_stage/camera.lua b/scripts/microbe_stage/camera.lua index a322ef2483d..6a9e2539689 100644 --- a/scripts/microbe_stage/camera.lua +++ b/scripts/microbe_stage/camera.lua @@ -3,6 +3,7 @@ class 'MicrobeCameraSystem' (System) function MicrobeCameraSystem:__init() System.__init(self) + -- The offset from player microbe to camera self.camera = nil self.cameraScenenode = nil end @@ -10,7 +11,6 @@ end function MicrobeCameraSystem:activate() local camera = Entity(CAMERA_NAME) self.camera = camera:getComponent(OgreCameraComponent.TYPE_ID) - -- The offset from player microbe to camera self.camera.properties.offset = Vector3(0, 0, 30) self.camera.properties:touch() self.cameraScenenode = camera:getComponent(OgreSceneNodeComponent.TYPE_ID) diff --git a/scripts/microbe_stage/microbe.lua b/scripts/microbe_stage/microbe.lua index 2c780288462..400847e5237 100644 --- a/scripts/microbe_stage/microbe.lua +++ b/scripts/microbe_stage/microbe.lua @@ -719,7 +719,6 @@ end -- Copies this microbe. The new microbe will not have the stored compounds of this one. function Microbe:reproduce() - copy = Microbe.createMicrobeEntity(nil, true) for _, organelle in pairs(self.microbe.organelles) do local organelleStorage = organelle:storage() @@ -731,6 +730,9 @@ function Microbe:reproduce() copy.microbe:updateSafeAngles() copy.microbe:_resetCompoundPriorities() copy.entity:addComponent(SpawnedComponent()) + if self.microbe.isPlayerMicrobe then + showReproductionDialog() + end end diff --git a/scripts/microbe_stage/microbe_stage_hud.lua b/scripts/microbe_stage/microbe_stage_hud.lua index 6ba11d7f5e7..38d73d8776f 100644 --- a/scripts/microbe_stage/microbe_stage_hud.lua +++ b/scripts/microbe_stage/microbe_stage_hud.lua @@ -14,6 +14,7 @@ end global_if_already_displayed = false function HudSystem:activate() + global_activeMicrobeStageHudSystem = self -- Global reference for event handlers lockedMap = Engine:playerData():lockedMap() if lockedMap ~= nil and not lockedMap:isLocked("Toxin") and not ss and not global_if_already_displayed then showMessage("'E' Releases Toxin") @@ -30,16 +31,20 @@ function HudSystem:init(gameState) local menuButton = self.rootGuiWindow:getChild("BottomSection"):getChild("MenuButton") local helpButton = self.rootGuiWindow:getChild("BottomSection"):getChild("HelpButton") local editorButton = self.rootGuiWindow:getChild("MenuPanel"):getChild("EditorButton") + local editorButton2 = self.rootGuiWindow:getChild("ReproductionPanel"):getChild("EditorButton") local returnButton = self.rootGuiWindow:getChild("MenuPanel"):getChild("ReturnButton") local returnButton2 = self.rootGuiWindow:getChild("HelpPanel"):getChild("ReturnButton") local returnButton3 = self.rootGuiWindow:getChild("MessagePanel"):getChild("ReturnButton") + local returnButton4 = self.rootGuiWindow:getChild("ReproductionPanel"):getChild("ReturnButton") local quitButton = self.rootGuiWindow:getChild("MenuPanel"):getChild("QuitButton") menuButton:registerEventHandler("Clicked", menuButtonClicked) helpButton:registerEventHandler("Clicked", helpButtonClicked) editorButton:registerEventHandler("Clicked", editorButtonClicked) + editorButton2:registerEventHandler("Clicked", editorButtonClicked) returnButton:registerEventHandler("Clicked", returnButtonClicked) returnButton2:registerEventHandler("Clicked", returnButtonClicked) returnButton3:registerEventHandler("Clicked", returnButtonClicked) + returnButton4:registerEventHandler("Clicked", returnButtonClicked) quitButton:registerEventHandler("Clicked", quitButtonClicked) self.rootGuiWindow:getChild("MenuPanel"):getChild("MainMenuButton"):registerEventHandler("Clicked", menuMainMenuClicked) end @@ -83,6 +88,10 @@ function HudSystem:update(milliseconds) offset.z = newZVal end +function showReproductionDialog() + global_activeMicrobeStageHudSystem.rootGuiWindow:getChild("ReproductionPanel"):show() +end + function showMessage(msg) local messagePanel = Engine:currentGameState():rootGUIWindow():getChild("MessagePanel") messagePanel:getChild("MessageLabel"):setText(msg) @@ -115,6 +124,7 @@ function returnButtonClicked() if Engine:currentGameState():name() == "microbe" then Engine:currentGameState():rootGUIWindow():getChild("HelpPanel"):hide() Engine:currentGameState():rootGUIWindow():getChild("MessagePanel"):hide() + Engine:currentGameState():rootGUIWindow():getChild("ReproductionPanel"):hide() elseif Engine:currentGameState():name() == "microbe_editor" then Engine:currentGameState():rootGUIWindow():getChild("SaveLoadPanel"):hide() end diff --git a/scripts/microbe_stage/movement_organelle.lua b/scripts/microbe_stage/movement_organelle.lua index 0db386a6a03..c508e48ba0e 100644 --- a/scripts/microbe_stage/movement_organelle.lua +++ b/scripts/microbe_stage/movement_organelle.lua @@ -131,6 +131,8 @@ function MovementOrganelle:update(microbe, milliseconds) self:_moveMicrobe(microbe, milliseconds) end +Organelle.mpCosts["flagellum"] = 25 + -- factory functions function OrganelleFactory.make_flagellum(data) -- Calculate the momentum of the movement organelle based on angle towards nucleus diff --git a/scripts/microbe_stage/organelle.lua b/scripts/microbe_stage/organelle.lua index 87f94325a07..3e89fa9bc9c 100644 --- a/scripts/microbe_stage/organelle.lua +++ b/scripts/microbe_stage/organelle.lua @@ -1,6 +1,8 @@ -- Base class for microbe organelles class 'Organelle' +Organelle.mpCosts = {} + -- Factory function for organelles function Organelle.loadOrganelle(storage) local className = storage:get("className", "") diff --git a/scripts/microbe_stage/process_organelle.lua b/scripts/microbe_stage/process_organelle.lua index c99de51202a..c5b5613bc70 100644 --- a/scripts/microbe_stage/process_organelle.lua +++ b/scripts/microbe_stage/process_organelle.lua @@ -290,6 +290,9 @@ end ------------------------------------------- -- factory functions for process organelles +Organelle.mpCosts["chloroplast"] = 20 +Organelle.mpCosts["mitochondrion"] = 20 + function OrganelleFactory.make_mitochondrion(data) local mito = ProcessOrganelle() mito:addProcess(global_processMap["Respiration"]) diff --git a/scripts/microbe_stage/setup.lua b/scripts/microbe_stage/setup.lua index e22d7a3e8b9..9e9bfb2f8e8 100644 --- a/scripts/microbe_stage/setup.lua +++ b/scripts/microbe_stage/setup.lua @@ -4,7 +4,6 @@ local function setupBackground() local skyplane = SkyPlaneComponent() skyplane.properties.plane.normal = Vector3(0, 0, 2000) skyplane.properties.materialName = "background/blue_01" - skyplane.properties.tiling = 7 skyplane.properties:touch() entity:addComponent(skyplane) diff --git a/scripts/microbe_stage/storage_organelle.lua b/scripts/microbe_stage/storage_organelle.lua index c49c03b04e4..7f0cc5d562d 100644 --- a/scripts/microbe_stage/storage_organelle.lua +++ b/scripts/microbe_stage/storage_organelle.lua @@ -36,6 +36,7 @@ function StorageOrganelle:onRemovedFromMicrobe(microbe, q, r) microbe:removeStorageOrganelle(self) end +Organelle.mpCosts["vacuole"] = 15 function OrganelleFactory.make_vacuole(data) local vacuole = StorageOrganelle(100.0)