Commit graph

17073 commits

Author SHA1 Message Date
Robert Müller c8b69dd815 Properly uninitialize all client components
Track stack of cleaner functions that destruct client components so exactly the correct cleanup is performed in the reverse order of initialization.

This allows performing the cleanup also in the early-return cases without introducing duplicate code.
2023-05-10 21:13:28 +02:00
Robert Müller 95b0f8c1e4 Add restart command to client 2023-05-10 21:13:28 +02:00
Robert Müller aced53c6fe Uninitialize entire client before restarting 2023-05-10 21:13:21 +02:00
Robert Müller cda3575d10 Quit client when existing config file cannot be loaded
When the configuration file exists but cannot be loaded, the client continues to launch. When closing, the client then saves the default config and overwrites the existing config that could not be loaded.

This is prevented by quitting the client with an error message popup when the config exists but cannot be loaded.

Closes #3843.
2023-05-10 21:04:02 +02:00
Robert Müller d9307ca756 Use FileExists/fs_is_file instead of opening file
This is more concise and works more reliable e.g. on Windows.

See: https://devblogs.microsoft.com/oldnewthing/20071023-00/?p=24713
2023-05-10 21:04:02 +02:00
bors[bot] 33970e7057
Merge #6576
6576: add git mailmap r=def- a=edg-l

add git mailmap, mapping same author email/names to the prefered/most used name


Co-authored-by: Edgar Luque <git@edgarluque.com>
2023-05-10 15:26:30 +00:00
Edgar 74d866147c
add git mailmap, mapping same author email/names to the prefered/most used name 2023-05-10 17:20:32 +02:00
bors[bot] 7fff049471
Merge #6575
6575: Replace usages of `atan2f` and `atan2` with `std::atan2` r=def- a=Robyt3

Another leftover from #6372.

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-09 22:26:22 +00:00
Robert Müller 58184c2d67 Replace usages of atan2f and atan2 with std::atan2
Another leftover from #6372.
2023-05-09 22:38:44 +02:00
bors[bot] e95fb14612
Merge #6573
6573: set SDL_MAC_OPENGL_ASYNC_DISPATCH sdl hint to fix macos resizing r=heinrich5991 a=edg-l

Fixes a issue where ddnet freezes on resize on macos

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Edgar <git@edgarluque.com>
2023-05-09 12:52:23 +00:00
Edgar 3104e669bf set SDL_MAC_OPENGL_ASYNC_DISPATCH sdl hint to fix macos resizing 2023-05-09 14:46:14 +02:00
bors[bot] 23ce76210d
Merge #6551
6551: Fix Y Alignment by respecting cursor height independent of character … r=Robyt3 a=Jupeyy

…height

since the cursor height is simply the font size, but obv not all characters use the full font size, it must additionally make sure that this size isn't ignored in the y offset calculation (since it makes the characters render at the offset of the cursor height), so basically:
0 + FontSize == Character start
CharacterHeight != FontSize

that moves the character down.

Also added back the render flags, i think it logically makes sense if they are there, since a character could have y bearing, even tho in this case it doesn't seem the case.

fixes #6538 

I haven't extensively checked this, and maybe `@Robyt3` prefers to fix it differently, I'd be ok with this, it's just for showcase

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Jupeyy <jupjopjap@gmail.com>
2023-05-08 19:45:54 +00:00
Jupeyy 0b1960c532 Fix Y Alignment by respecting cursor height independent of character height 2023-05-08 17:49:05 +02:00
Robert Müller 98a8507184 Fix division by zero when using random theme with no themes 2023-05-08 14:04:22 +02:00
Robert Müller d203f38f01 Fix client crash when starting without font file
Add checks to text render functions to prevent crashes when no default font is set.
2023-05-08 14:04:22 +02:00
Robert Müller 5db9f029e4 Fix client hanging when default language cannot be determined
The loop was not terminating correctly, so the client hangs when the language index file is missing.
2023-05-08 14:04:22 +02:00
bors[bot] 1112c9e6b7
Merge #6566
6566: Allow using rescue (/r) on health pickup r=heinrich5991 a=Robyt3

Check if character is in range of health pickup and don't set rescue position if that's the case, so rescue can be used to get out of the health pickup's freeze effect.

The existing `m_Core.m_IsInFreeze` is not set so this should not have any side-effects.

Closes #3330.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-08 11:31:39 +00:00
bors[bot] f4d2b56869
Merge #6570
6570: Only show assertion popup for assertions on main thread, destroy window before showing popup if graphics initialized  r=Jupeyy a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [X] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-07 19:45:17 +00:00
Robert Müller c841c7ad05 Destroy window before showing popup if graphics initialized
Work around SDL bug that prevents message popup from being closed.
2023-05-07 21:20:47 +02:00
Robert Müller 817d96a73d Only show assertion popup for assertions on main thread
The SDL function may only be called from the main thread, so we can't show a popup for failed assertions on other threads.
2023-05-07 21:20:47 +02:00
bors[bot] 262a2a83a6
Merge #6568
6568: Also print platform, game and OS version in assertion popup r=def- a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-07 18:21:04 +00:00
Robert Müller 3e810b9814 Also print platform, game and OS version in assertion popup 2023-05-07 15:50:46 +02:00
bors[bot] cfe17fa180
Merge #6567
6567: Add missing HUD text container deletion r=Jupeyy a=Robyt3

See #5143.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-07 13:39:14 +00:00
Robert Müller b590eff24e Add missing HUD text container deletion
See #5143.
2023-05-07 15:37:08 +02:00
Robert Müller a4dc138028 Allow using rescue (/r) on health pickup
Check if character is in range of health pickup and don't set rescue position if that's the case, so rescue can be used to get out of the health pickup's freeze effect.

The existing `m_Core.m_IsInFreeze` is not set so this should not have any side-effects.

Closes #3330.
2023-05-07 11:02:50 +02:00
Robert Müller 72c2ed062b Remove magic number 20.0f from pickup handling 2023-05-07 11:02:50 +02:00
Robert Müller 73091cdd83 Add CPickup::Type and CPickup::Subtype getters 2023-05-07 11:02:50 +02:00
Robert Müller 2596dac47a Remove dead code 2023-05-07 11:02:50 +02:00
Robert Müller 5c90fd2b83 Delay disconnecting until after render call
When a client component (e.g. the menu or the console) disconnects the client, this immediately unloads the map data but the render call continues as normal. This causes all components rendered after this component to access invalid memory in place of the map, layers and collision data.

This is fixed by delaying the actual disconnecting until after the render call, to ensure that the map data can be safely unloaded.

Closes #6387. Closes #3179.
2023-05-06 21:10:38 +02:00
bors[bot] cfd003d9c5
Merge #6559
6559: Show error message popup on assertion error in client and when client fails to launch r=def- a=Robyt3

Alternative to #6493. Closes #6482.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-06 15:28:27 +00:00
bors[bot] 56c652eb4a
Merge #6564
6564: Broadcast: fade out in last second, wrap long text instead of stopping, fix horizontal centering r=def- a=Robyt3

Before (centering):

![screenshot_2023-05-06_16-06-33](https://user-images.githubusercontent.com/23437060/236629074-d5387437-f770-4185-b389-313f170e9a09.png)

After (centering):

![screenshot_2023-05-06_16-06-56](https://user-images.githubusercontent.com/23437060/236629076-1baad8c3-13ee-493a-b716-cb233bf881f5.png)

Before (wrapping):

![screenshot_2023-05-06_16-05-50](https://user-images.githubusercontent.com/23437060/236629122-6a9aa70a-709c-482f-8730-0922506f18dd.png)

After (wrapping):

![screenshot_2023-05-06_16-05-09](https://user-images.githubusercontent.com/23437060/236629125-ba7666f1-b0a1-48fb-9d38-36292c97f1fe.png)


## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-06 15:03:08 +00:00
Robert Müller ce4228e08a Simplify by calculating broadcast render offset in OnRender
And ensure that the render offset is recalculated after the window is resized.
2023-05-06 15:57:44 +02:00
Robert Müller bd20423de2 Wrap long broadcast text instead of stopping
Instead of stopping when a broadcast line exceeds the screen width, wrap the text to the next line. Otherwise one long line in a broadcast can end the rendering so following lines are skipped.
2023-05-06 15:56:34 +02:00
Robert Müller 5c78093da4 Fade out broadcast in last second, use text container
Fade the broadcast alpha to zero in the last second that the broadcast is shown.

Use text container to support the fade out and to make broadcast rendering more efficient.
2023-05-06 15:55:42 +02:00
Robert Müller 74c1f38ca0 Use str_next_token to reduce duplicate code
Instead of manually splitting a string at newline characters.
2023-05-06 15:54:33 +02:00
Robert Müller 00ed9d0ecd Fix horizontal centering of broadcast
The screen also needs to be mapped when calculating the width of the broadcast text, otherwise the width is not correct and so the text is not correctly centered horizontally.

The wrong text width was also being calculated when the text has multiple lines. Now `TextWidth` is used so the width is also correct for multi-line text.
2023-05-06 15:54:33 +02:00
Robert Müller 8617411bfa Render broadcast only when online or in demo playback 2023-05-06 15:54:32 +02:00
Robert Müller c2d0835743 Extract CBroadcast::RenderServerBroadcast function 2023-05-06 15:54:32 +02:00
Robert Müller 7afa11e92c Extract CBroadcast::OnBroadcastMessage function 2023-05-06 15:54:28 +02:00
Robert Müller 6d2e2788e2 Use DefaultTextColor and DefaultTextOutlineColor 2023-05-06 15:22:58 +02:00
Robert Müller 4b2ec2c202 Remove dead code 2023-05-06 15:22:58 +02:00
bors[bot] e16e271f17
Merge #6562
6562: Fix server password input not being activated automatically, always move cursor to end when selecting all text r=Jupeyy a=Robyt3


## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-05 15:10:59 +00:00
bors[bot] 0432701ccc
Merge #6561
6561: Make text container index type-safe, add debug output of text container text on assertion r=Jupeyy a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-05-05 14:43:30 +00:00
Robert Müller b4a7038fad Fix server password input not being activated automatically 2023-05-05 16:20:55 +02:00
Robert Müller 1be1c9780c Always move cursor to end when selecting all text 2023-05-05 16:20:54 +02:00
Robert Müller a443d99ccf Remove unused CMenus::setPopup function 2023-05-05 16:08:43 +02:00
Robert Müller 0c32eacbab Make text container index type-safe
Use `STextContainerIndex` wrapper instead of `int` for text container index for type-safety.

Add missing checks to ensure valid text container index before rendering FPS and finish time text containers.
2023-05-05 15:58:17 +02:00
Robert Müller 493f47515c Add debug output of text container text on assertion
To get more information on #5143.
2023-05-05 00:03:15 +02:00
trml e10f528215 Add net netobjs for projectile and pickup, extend ddnetlaser, remove EntityEx server-side 2023-05-04 23:43:05 +02:00
Robert Müller 3981f7ffe0 Show error message popup when client fails to launch 2023-05-04 20:03:28 +02:00