[wesnoth-commits] [wesnoth/wesnoth] f4b39a: Add a utility function to extract a location from ...

Celtic Minstrel noreply at github.com
Sat Feb 20 16:49:24 UTC 2021


  Branch: refs/heads/lua_gamemap
  Home:   https://github.com/wesnoth/wesnoth
  Commit: f4b39a4f04d5e74f95c8af037001fefe3a15ce79
      https://github.com/wesnoth/wesnoth/commit/f4b39a4f04d5e74f95c8af037001fefe3a15ce79
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M data/lua/core.lua

  Log Message:
  -----------
  Add a utility function to extract a location from the front of a variadic parameter pack

The purpose of this is to make it easy for functions implemented in Lua to handle locations
in the same way as functions implemented in C++.

Usage example:

Imagine a function foo with the following signature:

foo(bar : string, home : location, mode : string, target : location, moo : boolean) -> boolean

With the new read_location function it could be implemented as follows:

function foo(...)
	-- First argument goes in bar
	local bar = ...
	-- Read location starting at the second argument
	local home, n = wesnoth.mP.read_location(select(2, ...))
	-- note: n will be 0 if a location wasn't found at that position
	-- This could be an error, or it could be handled as an optional parameter
	-- Next argument after that goes in mode
	local mode = select(n + 2, ...)
	-- Then read a location into target
	local target, m = wesnoth.map.read_location(select(n + 2, ...))
	-- Finally, read a parameter into moo
	local moo = select(m + n + 2, ...)
	-- Do stuff with all these parameters
	return true
end

With that code, all the following invocations of foo work:

foo('a', 'b', true) -- both optional locations omitted
foo('a', 1, 2, 'q', 5, 6, false) -- locations given as separate integer parameters
foo('a', 'm', {1, 7},  true) -- first location omitted, second given as 2-element array
foo('a', some_unit, 'z', {x = 5, y = 10}, false) -- a unit also functions as a location
foo('a', 7, 12, 'q', my_leader, true) -- mixing different forms also works


  Commit: 25d91a7efe296ae9e1dca8d7138d8490b71f61c2
      https://github.com/wesnoth/wesnoth/commit/25d91a7efe296ae9e1dca8d7138d8490b71f61c2
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M data/lua/core.lua
    M src/editor/action/action.cpp
    M src/editor/action/mouse/mouse_action.cpp
    M src/editor/map/editor_map.cpp
    M src/game_board.cpp
    M src/game_board.hpp
    M src/map/map.cpp
    M src/map/map.hpp
    M src/scripting/game_lua_kernel.cpp
    M src/scripting/game_lua_kernel.hpp
    M src/scripting/lua_terrainfilter.cpp
    M src/scripting/lua_terrainfilter.hpp
    M src/scripting/lua_terrainmap.cpp
    M src/scripting/lua_terrainmap.hpp
    M src/scripting/mapgen_lua_kernel.cpp

  Log Message:
  -----------
  Refactor the game map to permit exposing it to Lua via wesnoth.current.map

The method of accessing terrain on the map has drastically changed.
- wesnoth.get_terrain and wesnoth.set_terrain are both deprecated
- wesnoth.terrain_mask still works but is moved into the wesnoth.map module and now takes the map object as the first parameter
- The map's terrain is now accessed exclusively via indexing on the map object, ie map[{x,y}]
- You set terrain by assigning a terrain code; the position of ^ in the terrain code now determines the merge mode
- The replace_if_failed option is now manifested as a function that converts any terrain code into a special value that, when assigned to a location on the map, uses the replace if failed logic.

The map object has a few attributes in it:
- width and height are the total size, including borders
- playable_width and playable_height are the values returned from wesnoth.get_map_size, which is now deprecated
- border_size is the third value from wesnoth.get_map_size
- data converts the map to a string
- other than that, wesnoth.map is treated as if it were the metatable of the map object

Other stuff in here:
- Special locations are now part of the map object. The length operator is deprecated.
- Add some utility functions to help clarify the merge mode being used when assigning terrains - they just add or remove a leading or trailing ^ as necessary
- Add a utility function to extract a location from the front of a variadic parameter pack


  Commit: 66c82c6e642c115faa5112e4f4c0402f6482ebe1
      https://github.com/wesnoth/wesnoth/commit/66c82c6e642c115faa5112e4f4c0402f6482ebe1
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M data/lua/core.lua
    M src/scripting/game_lua_kernel.cpp
    M src/scripting/game_lua_kernel.hpp

  Log Message:
  -----------
  Move various functions into the map module


  Commit: e426a511109f3f0e24a74d9dee7096e8905c7c26
      https://github.com/wesnoth/wesnoth/commit/e426a511109f3f0e24a74d9dee7096e8905c7c26
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M data/lua/core.lua
    M src/scripting/game_lua_kernel.cpp
    M src/scripting/lua_terrainfilter.cpp
    M src/scripting/lua_terrainmap.cpp
    M src/scripting/lua_terrainmap.hpp
    M src/scripting/mapgen_lua_kernel.cpp

  Log Message:
  -----------
  Rename existing map functions in the map generation kernel


  Commit: f522cdc441b754d9a6455687b13b3ddc2634ce09
      https://github.com/wesnoth/wesnoth/commit/f522cdc441b754d9a6455687b13b3ddc2634ce09
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M data/lua/core.lua
    M src/scripting/lua_kernel_base.cpp

  Log Message:
  -----------
  Rename two functions for consistency of terminology


  Commit: 229a4dc49407775e1f6735cd9a30ebee4a42ce98
      https://github.com/wesnoth/wesnoth/commit/229a4dc49407775e1f6735cd9a30ebee4a42ce98
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M src/scripting/game_lua_kernel.cpp
    M src/scripting/game_lua_kernel.hpp

  Log Message:
  -----------
  Add wesnoth.map.get_label


  Commit: 76dd132edb8d7c13ca30fd7f3c32af6fbb4a6c72
      https://github.com/wesnoth/wesnoth/commit/76dd132edb8d7c13ca30fd7f3c32af6fbb4a6c72
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M src/scripting/lua_kernel_base.cpp
    M src/scripting/lua_map_location_ops.cpp
    M src/scripting/lua_map_location_ops.hpp

  Log Message:
  -----------
  Add wesnoth.map.get_hexes_in_radius


  Commit: 05283b5abb05498efb9894cef734ce1ec216bd9c
      https://github.com/wesnoth/wesnoth/commit/05283b5abb05498efb9894cef734ce1ec216bd9c
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M src/scripting/game_lua_kernel.cpp
    M src/scripting/lua_terrainmap.cpp
    M src/scripting/lua_terrainmap.hpp

  Log Message:
  -----------
  Add on_board and on_border map methods


  Commit: 616b6d037a7941b89f73b55d5c6bcd7970d0f1cd
      https://github.com/wesnoth/wesnoth/commit/616b6d037a7941b89f73b55d5c6bcd7970d0f1cd
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M src/scripting/game_lua_kernel.cpp
    M src/scripting/lua_terrainmap.cpp
    M src/scripting/lua_terrainmap.hpp

  Log Message:
  -----------
  Implement a map iterator


  Commit: 3af3747a89b4a825eb5d97b48b25f36069122eda
      https://github.com/wesnoth/wesnoth/commit/3af3747a89b4a825eb5d97b48b25f36069122eda
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M data/lua/core.lua

  Log Message:
  -----------
  Add a terrain hex reference API

This adds a metatable to all locations returned from wesnoth.map.find.


  Commit: 6dc1429800fbeffd1fcb66763632d4eb4a10a642
      https://github.com/wesnoth/wesnoth/commit/6dc1429800fbeffd1fcb66763632d4eb4a10a642
  Author: Celtic Minstrel <celtic.minstrel.ca at some.place>
  Date:   2021-02-20 (Sat, 20 Feb 2021)

  Changed paths:
    M data/ai/lua/ai_helper.lua
    M data/ai/lua/battle_calcs.lua
    M data/ai/lua/ca_castle_switch.lua
    M data/ai/lua/ca_grab_villages.lua
    M data/ai/lua/ca_recruit_rushers.lua
    M data/ai/lua/ca_spread_poison.lua
    M data/ai/lua/ca_village_hunt.lua
    M data/ai/lua/generic_recruit_engine.lua
    M data/ai/lua/retreat.lua
    M data/ai/micro_ais/cas/ca_assassin_move.lua
    M data/ai/micro_ais/cas/ca_big_animals.lua
    M data/ai/micro_ais/cas/ca_bottleneck_move.lua
    M data/ai/micro_ais/cas/ca_fast_attack_utils.lua
    M data/ai/micro_ais/cas/ca_fast_move.lua
    M data/ai/micro_ais/cas/ca_forest_animals_new_rabbit.lua
    M data/ai/micro_ais/cas/ca_goto.lua
    M data/ai/micro_ais/cas/ca_healer_move.lua
    M data/ai/micro_ais/cas/ca_herding_dog_move.lua
    M data/ai/micro_ais/cas/ca_herding_f_herding_area.lua
    M data/ai/micro_ais/cas/ca_herding_herd_sheep.lua
    M data/ai/micro_ais/cas/ca_lurkers.lua
    M data/ai/micro_ais/cas/ca_protect_unit_move.lua
    M data/ai/micro_ais/cas/ca_recruit_random.lua
    M data/ai/micro_ais/cas/ca_stationed_guardian.lua
    M data/ai/micro_ais/cas/ca_wolves_move.lua
    M data/ai/micro_ais/cas/ca_zone_guardian.lua
    M data/campaigns/Descent_Into_Darkness/scenarios/04_Spring_of_Reprisal.cfg
    M data/campaigns/Eastern_Invasion/ai/ca_ogres_flee.lua
    M data/campaigns/Eastern_Invasion/lua/bandits.lua
    M data/campaigns/Heir_To_The_Throne/scenarios/13_The_Dwarven_Doors.cfg
    M data/campaigns/Northern_Rebirth/lua/respawn_utils.lua
    M data/campaigns/Son_Of_The_Black_Eye/ai/ca_transport_S6.lua
    M data/campaigns/The_Hammer_of_Thursagan/lua/spawns.lua
    M data/campaigns/The_Hammer_of_Thursagan/scenarios/05_Fear.cfg
    M data/campaigns/Two_Brothers/ai/ca_muff_toras_move.lua
    M data/campaigns/World_Conquest/lua/campaign/autorecall.lua
    M data/campaigns/World_Conquest/lua/campaign/enemy.lua
    M data/campaigns/World_Conquest/lua/campaign/enemy_themed.lua
    M data/campaigns/World_Conquest/lua/game_mechanics/bonus.lua
    M data/campaigns/World_Conquest/lua/game_mechanics/supply.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/1A_Start.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/2A_Springs.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/2C_Glaciers.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/2D_Provinces.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/2E_Paradise.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/3C_Delta.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/3F_Wetland.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/4A_Thermal.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/4B_Volcanic.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/4C_Mines.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/6A_Rural.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/6B_Maritime.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration/6C_Industrial.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration_utils/engine.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration_utils/events.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration_utils/noise.lua
    M data/campaigns/World_Conquest/lua/map/postgeneration_utils/utilities.lua
    M data/campaigns/World_Conquest/lua/map/scenario_utils/bonus_points.lua
    M data/campaigns/World_Conquest/lua/optional_mechanics/destruction.lua
    M data/lua/helper.lua
    M data/lua/location_set.lua
    M data/lua/wml-tags.lua
    M data/lua/wml/animate_unit.lua
    M data/lua/wml/find_path.lua
    M data/lua/wml/items.lua
    M data/lua/wml/modify_side.lua
    M data/lua/wml/random_placement.lua
    M data/modifications/pick_advance/main.lua
    M data/multiplayer/scenarios/2p_Dark_Forecast.lua
    M data/scenario-test.cfg
    M src/scripting/lua_terrainmap.cpp

  Log Message:
  -----------
  Update everything to use the new wesnoth.map module

- get_terrain and set_terrain replaced with direct indexing operations
- get_map_size mostly replaced with either the iterator or an on_board call.
  Only a few cases really needed to know the size of the map for some other purpose.
- shroud and fog operations, village owner, time areas, and location filters


Compare: https://github.com/wesnoth/wesnoth/compare/acaef5f2b112...6dc1429800fb



More information about the Commits mailing list