Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Position.lua: site/adv world coords #1292

Merged
merged 5 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@ Template for new versions:
## New Features

## Fixes
- `gui/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing."
Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.
- `modtools/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing"s.
Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.

## Misc Improvements

Expand Down Expand Up @@ -48,12 +44,14 @@ Items will now spawn correctly, and will be of the creature type and creature ca
- `gui/design`: don't overcount "affected tiles" for Line & Freeform drawing tools
- `deep-embark`: fix error when embarking where there is no land to stand on (e.g. when embarking in the ocean with `gui/embark-anywhere`
- `deep-embark`: fix failure to transport units and items when embarking where there is no room to spawn the starting wagon
- `gui/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing." Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.
- `modtools/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing"s. Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.

## Misc Improvements
- `gui/sitemap`: show whether a unit is friendly, hostile, or wild
- `gui/sitemap`: show whether a unit is caged
- `gui/control-panel`: include option for turning off dumping of old clothes for `tailor`, for players who have magma pit dumps and want to save old clothes from being dumped into the magma
- `position`: report current historical era (e.g., "Age of Myth")
- `position`: report current historical era (e.g., "Age of Myth") and site/adventurer world coords

## Documentation
- `gui/embark-anywhere`: add information about how the game determines world tile pathability and instructions for bridging two landmasses
Expand Down
6 changes: 4 additions & 2 deletions docs/position.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ position

.. dfhack-tool::
:summary: Report cursor and mouse position, along with other info.
:tags: fort inspection map
:tags: adventure fort inspection map

This tool reports the current date, clock time, month, season, and historical
era. It also reports the keyboard cursor position (or just the z-level if no
active cursor), window size, and mouse location on the screen.
active cursor), window size, and mouse location on the screen. If a site is
loaded, it prints the world coordinates of the site, else the world
Bumber64 marked this conversation as resolved.
Show resolved Hide resolved
coordinates of the adventurer.

Can also be used to copy the current keyboard cursor position for later use.

Expand Down
45 changes: 34 additions & 11 deletions position.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@ local months = {
--Adventurer mode counts 86400 ticks to a day and 29030400 ticks per year
--Twelve months per year, 28 days to every month, 336 days per year

local julian_day = math.floor(df.global.cur_year_tick / 1200) + 1
local month = math.floor(julian_day / 28) + 1 --days and months are 1-indexed
local julian_day = df.global.cur_year_tick // 1200 + 1
local month = julian_day // 28 + 1 --days and months are 1-indexed
local day = julian_day % 28

local time_of_day = math.floor(df.global.cur_year_tick_advmode / 336)
local time_of_day = df.global.cur_year_tick_advmode // 336
local second = time_of_day % 60
local minute = math.floor(time_of_day / 60) % 60
local hour = math.floor(time_of_day / 3600) % 24
local minute = time_of_day // 60 % 60
local hour = time_of_day // 3600 % 24

print('Time:')
print(' The time is '..string.format('%02d:%02d:%02d', hour, minute, second))
print(' The date is '..string.format('%05d-%02d-%02d', df.global.cur_year, month, day))
print((' The time is %02d:%02d:%02d'):format(hour, minute, second))
print((' The date is %03d-%02d-%02d'):format(df.global.cur_year, month, day))
print(' It is the month of '..months[month])

local eras = df.global.world.history.eras
Expand All @@ -55,7 +55,30 @@ end
print('Place:')
print(' The z-level is z='..df.global.window_z)
print(' The cursor is at x='..cursor.x..', y='..cursor.y)
print(' The window is '..df.global.gps.dimx..' tiles wide and '..df.global.gps.dimy..' tiles high')
if df.global.gps.mouse_x == -1 then print(' The mouse is not in the DF window') else
print(' The mouse is at x='..df.global.gps.mouse_x..', y='..df.global.gps.mouse_y..' within the window') end
--TODO: print(' The fortress is at '..x, y..' on the world map ('..worldsize..' square)')
print(' The window is '..df.global.gps.dimx..' tiles wide and '..df.global.gps.dimy..' tiles high.')

if df.global.gps.mouse_x < 0 then
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we print out mouse cursor location, we should probably also print out the map coordinates of where the mouse is (dfhack.gui.getMousePos())

Copy link
Contributor Author

@Bumber64 Bumber64 Sep 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ended up putting this on a separate line. Let me know if it looks okay. It says "The mouse is" twice in a row, but that looks better than doing a comma+indent, IMO.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could also add an option to copy mouse tile position to clipboard. However there's limited feedback of where the mouse cursor is on the grid, and it would be difficult to use with the full launcher (which blocks most of the screen).

Bumber64 marked this conversation as resolved.
Show resolved Hide resolved
print(' The mouse is not in the DF window.')
else
print(' The mouse is at x='..df.global.gps.mouse_x..', y='..df.global.gps.mouse_y..' within the window.')
end

local wd = df.global.world.world_data
local site = dfhack.world.getCurrentSite()
if site then
print((' The current site is at x=%d, y=%d on the world map (%dx%d).'):
Bumber64 marked this conversation as resolved.
Show resolved Hide resolved
format(site.pos.x, site.pos.y, wd.world_width, wd.world_height))
elseif dfhack.world.isAdventureMode() then
local ax, ay = -1, -1
for _,army in ipairs(df.global.world.armies.all) do
if army.flags.player then
ax, ay = army.pos.x // 48, army.pos.y // 48
break
end
end
if ax < 0 then
ax, ay = wd.midmap_data.adv_region_x, wd.midmap_data.adv_region_y
end
print((' The adventurer is at x=%d, y=%d on the world map (%dx%d).'):
format(ax, ay, wd.world_width, wd.world_height))
end