boswars/scripts/ai.lua

91 lines
3.3 KiB
Lua

-- ____ _ __
-- / __ )____ _____ | | / /___ ___________
-- / __ / __ \/ ___/ | | /| / / __ `/ ___/ ___/
-- / /_/ / /_/ (__ ) | |/ |/ / /_/ / / (__ )
-- /_____/\____/____/ |__/|__/\__,_/_/ /____/
--
-- A futuristic real-time strategy game.
-- This file is part of Bos Wars.
--
-- ai.lua - Define the AI.
--
-- (c) Copyright 2000-2009 by Lutz Sammer, Frank Loeffler
-- (c) Copyright 2011 by Michiel van der Wulp
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
--
--
-- Table of registered AI types in BOS. See HTML documentation for details.
AiTypes = {}
-- AI state of each player. See HTML documentation for details.
-- Initialize to nil so we'll notice if ClearAiState is not called
-- when it should.
AiState = nil
-- This call examines the buttons that were defined with DefineButton
-- and figures out which types of units can build/train/repair others.
-- We don't currently have any "unit-equiv" information to provide here.
DefineAiHelper()
-- Clear the AI state of each player. This is called before starting
-- a new game, and before loading a saved game. This does not call AI
-- initialization functions; the engine will do that after it has
-- selected the AI type for each player.
function ClearAiState()
AiState = {cache = {}}
end
-- Check if there is a hot spot on the map.
--
-- Returns:
-- True if there is at least one hot spot (weak or not) on the map,
-- False if there are no hot spots.
--
-- AiHotSpotExists detects even hot spots that are not visible to the
-- current AI player. This is not really a cheat because, if the AI
-- could not access this information directly, then maps without hot
-- spots would presumably select AI types that don't try to build
-- magma pumps.
--
-- AiHotSpotExists does not care whether the hot spots already have
-- magma pumps on them.
function AiHotSpotExists()
local cache = AiState.cache
if (cache.hotspotexists == nil) then
local hotspot = UnitTypeByIdent("unit-hotspot")
local whotspot = UnitTypeByIdent("unit-weakhotspot")
local count = Players[PlayerNumNeutral].UnitTypesCount[hotspot.Slot]
local wcount = Players[PlayerNumNeutral].UnitTypesCount[whotspot.Slot]
-- DebugPrint("This map has " .. count .. " hotspots and " .. wcount .. " weak hotspots.")
cache.hotspotexists = ((count + wcount) ~= 0)
end
return cache.hotspotexists
end
-- Find and load all Ais
local list
local i
local f
list = ListFilesInDirectory("scripts/ais/")
for i,f in ipairs(list) do
if(string.find(f, "^.*%.lua$")) then
DebugPrint("Loading AI: " .. f)
Load("scripts/ais/" .. f)
end
end