diff --git a/docs/source/making-a-roguelike/part13.rst b/docs/source/making-a-roguelike/part13.rst index 95917b99..e9b02736 100644 --- a/docs/source/making-a-roguelike/part13.rst +++ b/docs/source/making-a-roguelike/part13.rst @@ -63,9 +63,6 @@ the individual pieces like +5 maxhp. You can subclass this to define a new named --- @module "modules.game.statusinstance" prism.GameStatusInstance = require ("modules.game.statusinstance") -The path string manipulation is just so that this file loads correctly now matter which folder our module is loaded from, that won't matter here, -but it's a good idea to do this. - Modifying health ---------------- diff --git a/engine/core/components/controller.lua b/engine/core/components/controller.lua index 423e02ea..135a5239 100644 --- a/engine/core/components/controller.lua +++ b/engine/core/components/controller.lua @@ -13,4 +13,11 @@ function Controller:act(level, actor) error("Controller is an abstract class and must have act overwritten!") end +--- Returns a boolean indiciating if this actor is currently player controlled. +--- This is used by displays to indicate whether to draw this actor's perspective. +--- @return boolean isPlayerControlled +function Controller:isPlayerControlled() + return false +end + return Controller diff --git a/engine/core/components/player_controller.lua b/engine/core/components/player_controller.lua deleted file mode 100644 index a8af9c0d..00000000 --- a/engine/core/components/player_controller.lua +++ /dev/null @@ -1,16 +0,0 @@ ---- A controller component that stops to wait for input to receive its action. ---- @class PlayerController : Controller ---- @overload fun(): PlayerController ---- @type PlayerController -local PlayerController = prism.components.Controller:extend "PlayerController" - ----@param level Level ----@param actor Actor -function PlayerController:act(level, actor) - local actionDecision = level:yield(prism.decisions.ActionDecision(actor)) - --- @cast actionDecision ActionDecision - - return actionDecision.action -end - -return PlayerController diff --git a/engine/core/decisions/actiondecision.lua b/engine/core/decisions/actiondecision.lua index c1b7d3bf..126bcbef 100644 --- a/engine/core/decisions/actiondecision.lua +++ b/engine/core/decisions/actiondecision.lua @@ -1,5 +1,5 @@ --- Represents an action to be taken, generally by the player. ---- :lua:class:`PlayerController` yields one to decide what action to perform. +--- :lua:class:`PlayerController` from the template yields one to decide what action to perform. --- @class ActionDecision : Decision --- @field actor Actor The actor making the decision. --- @field action Action|nil The action to perform. diff --git a/engine/core/systems/senses.lua b/engine/core/systems/senses.lua index c8d929c7..988e9795 100644 --- a/engine/core/systems/senses.lua +++ b/engine/core/systems/senses.lua @@ -3,7 +3,7 @@ local SensesSystem = prism.System:extend("SensesSystem") SensesSystem.name = "Senses" function SensesSystem:onTurn(level, actor) - if actor:has(prism.components.PlayerController) then return end + if actor:get(prism.components.Controller):isPlayerControlled() then return end self:triggerRebuild(level, actor) end @@ -17,7 +17,7 @@ end ---@param event Message function SensesSystem:onYield(level, event) for actor in level:query(prism.components.Senses):iter() do - if actor:get(prism.components.PlayerController) then self:triggerRebuild(level, actor) end + if actor:get(prism.components.Controller):isPlayerControlled() then self:triggerRebuild(level, actor) end end end diff --git a/engine/init.lua b/engine/init.lua index cde8a078..ac3bdcdc 100644 --- a/engine/init.lua +++ b/engine/init.lua @@ -237,9 +237,6 @@ prism.components.Collider = prism.require "core.components.collider" --- @module "engine.core.components.controller" prism.components.Controller = prism.require "core.components.controller" ---- @module "engine.core.components.player_controller" -prism.components.PlayerController = prism.require "core.components.player_controller" - --- @module "engine.core.components.senses" prism.components.Senses = prism.require "core.components.senses" diff --git a/spectrum/gamestates/levelstate.lua b/spectrum/gamestates/levelstate.lua index 2fedbe6e..6368559c 100644 --- a/spectrum/gamestates/levelstate.lua +++ b/spectrum/gamestates/levelstate.lua @@ -69,7 +69,7 @@ function LevelState:getSenses() ---@cast actionDecision ActionDecision curActor = actionDecision.actor elseif self.message then - if self.message.action.owner:has(prism.components.PlayerController) then + if self.message.action.owner:get(prism.components.Controller):isPlayerControlled() then curActor = self.message.action.owner end end @@ -78,9 +78,12 @@ function LevelState:getSenses() local primary = { sensesComponent } local secondary = {} - local query = self.level:query(prism.components.PlayerController, prism.components.Senses) - for _, _, senses in query:iter() do - table.insert(secondary, senses) + local query = self.level:query(prism.components.Controller, prism.components.Senses) + for _, controller, senses in query:iter() do + --- @cast controller Controller + if controller:isPlayerControlled() then + table.insert(secondary, senses) + end end if #primary == 0 then