Commit Graph

75 Commits

Author SHA1 Message Date
evanpelle 500b5fcfde Clean up and refactor the Unit class (#769)
## Description:

* Merged similar fields so they can be reused (eg warshipTarget =>
targetUnit)
* simplified isCooldown api
* added "touch" method to send update to UI layer
* standardized on "undefined"


## Please complete the following:

- [ ] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

## Please put your Discord username so you can be contacted if a bug or
regression is found:

<DISCORD USERNAME>
evan

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Refactor**
- Unified and simplified how unit targets and cooldowns are managed
across all unit types, resulting in more consistent in-game behavior for
nukes, warships, trade ships, and SAM launchers.
- Updated naming and logic for unit targeting and cooldowns, improving
clarity in status displays and interactions.
- Reorganized unit interface and streamlined cooldown handling for
smoother gameplay experience.
- **Bug Fixes**
- Corrected visual indicators for nukes and warships to accurately
reflect their targets.
- **Tests**
- Updated automated tests to align with the new cooldown and targeting
logic.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-17 17:45:10 -07:00
Scott Anderson 70745faac4 Enable strictNullChecks, eqeqeq (#436)
## Description:

Improve type safety and runtime correctness by:
1. Enabling TypeScript's
[strictNullChecks](https://www.typescriptlang.org/tsconfig/#strictNullChecks)
compiler option.
2. Replacing all loose equality operators (`==` and `!=`) with strict
equality operators (`===` and `!==`).
3. Cleaning up of type declarations, null handling logic, and equality
expressions throughout the project.

Currently, the code allows implicit assumptions that `null` and
`undefined` are interchangeable, and relies on type-coercing equality
checks that can introduce subtle bugs. These practices make it difficult
to reason about when values may be absent and hinder the effectiveness
of static analysis.

Migrating to strict null checks and enforcing strict equality
comparisons will clarify intent, reduce bugs, and make the codebase
safer and easier to maintain.

Fixes #466 

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

---------

Co-authored-by: Scott Anderson <662325+scottanderson@users.noreply.github.com>
Co-authored-by: evanpelle <openfrontio@gmail.com>
2025-05-15 16:39:40 -07:00
DevelopingTom 7c163e2361 Curved nuke trajectory (#734)
## Description:

Change nuke trajectory to follow a curve, and add a trail behind them.


![image](https://github.com/user-attachments/assets/f0fac8a0-d173-4e13-a889-3d19c36f85b8)

### Details:
- Use a look-up table to approximate the distance travelled, so the
speed remains constant along the curve
- The nuke speed is higher than a single pixel, so draw a line behind
for the trail
- Added a new "utility" file for the Bresenham/Bezier algorith: please
tell me if that's ok

### Edge cases (literally the edges):
The control points remains in the map so the curve can never go outside:


![image](https://github.com/user-attachments/assets/bb3a02fd-d76d-4643-a123-8bbc48c0ca87)



## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

## Please put your Discord username so you can be contacted if a bug or
regression is found:

<DISCORD USERNAME>

---------

Co-authored-by: Scott Anderson <scottanderson@users.noreply.github.com>
2025-05-13 01:30:31 -04:00
Rouillard 1c6c4c0512 Clear the sprites in a first loop before drawing (#692)
## Description:
Split the clearRect from the drawImage in a first loop so that moving
units don't erase other units. There should not be a perfomance
lowering.
There is still an issue of unit erasing other units when the other unit
is not updated (unit didn't move) but it's a rare case and the fix would
be to update all units regardless of their activity, so I think this
might be a good compromise, performance wise.

before:

![image](https://github.com/user-attachments/assets/c0f500ca-2465-4986-9755-0d5f07a17bd7)

after:

![image](https://github.com/user-attachments/assets/ebaef73e-9bf1-485f-8a79-da96c949e4f5)


## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

## Please put your Discord username so you can be contacted if a bug or
regression is found:

Vivacious Box
2025-05-10 06:12:48 -07:00
evan 34333e306f bugfix: add null check on trade ship target in alternate view 2025-04-24 08:14:06 -07:00
evan e86e4d581c alternate view: make trade ships yellow when destined for ally port 2025-04-24 08:09:28 -07:00
evan fe4396ebcd show incoming tradeships as green in alternate view 2025-04-23 13:46:19 -07:00
Readixyee 72b4c68172 Sprite system optimizations (#564)
## Description:

fixes issue #563 and optimizes clearrect and the cachekeys for sprites

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

## Please put your Discord username so you can be contacted if a bug or
regression is found:

Readix
2025-04-22 20:39:32 -07:00
Evan 4e2f61a792 fix boat trail on alternate view 2025-04-15 20:56:58 -07:00
Evan 8658fd0ff9 bufix: paint unit sprites correctly on alternate view 2025-04-15 20:46:59 -07:00
Readixyee a8c87e3bf1 Sprite system (#512)
## Description:

This adds the spriteLoader that loads and caches sprites to be used in
the unitlayer for rendering units as well as sprites for all units and
an alternative mirv sprite to show what can be done using sprites

color codes for grayscaled sprites:
b4b4b4 = territory color
464646 = border color
828282 = spawnhighlight color

The sprites are grayscaled and recolored to have a single base png for
all units

Fixes #505 

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I understand that submitting code with bugs that could have been
caught through manual testing blocks releases and new features for all
contributors

## Please put your Discord username so you can be contacted if a bug or
regression is found:

Readix
2025-04-15 11:41:06 -07:00
Evan 0dbc246a63 reduce transport frequency for fakehumanexecution, make transport render more efficient 2025-04-05 17:14:56 -07:00
Evan 5fec71481d repaint overlapping trails when transport ship dies 2025-04-05 13:57:18 -07:00
Evan 7050a5816d render transport ships on main unit canvas so it doesn't erase tails 2025-04-05 13:37:49 -07:00
Evan 09ec87e335 render transportship on seperate canvas so other ships don't eat its tail 2025-04-05 11:41:36 -07:00
Evan 21752aa214 add perf improvements: don't draw full boat tail, make nukes calculations slightly more efficient 2025-04-05 10:10:15 -07:00
Evan 8b6895d745 add prettier import plugin 2025-03-31 13:09:27 -07:00
evanpelle d8fe41de7a teams (#349) 2025-03-27 20:43:56 -07:00
Ilan Schemoul 275de50fcd feat: move warship (#196) 2025-03-14 16:30:30 -07:00
Ilan Schemoul 3ce5785d1e nuke icon (#207)
- **feat: white nuke icon next to name if player nukes you**
![Capture d'écran 2025-03-10
220439](https://github.com/user-attachments/assets/1b717b2d-bffb-45fc-96ea-2feb57d25de0)
- **feat: red nuke icon if player sends nuke towards you**
- 
![Capture d'écran 2025-03-10
220358](https://github.com/user-attachments/assets/b755fa06-9510-4bd1-8312-7180dc681d85)
2025-03-11 15:44:45 -07:00
evanpelle 33292aec5c feat: replay archived games, gamestate hash verification (#195)
create endpoint to load archived game. when joining game client first
checks if the game is active, if not it requests the game archive from
the server. the archive is sent to LocalServer to replay the game
locally. Every 10 ticks a hash is stored on the archive, and during
replay the LocalServer verifies this hash.
2025-03-09 14:24:39 -07:00
Readixyee 84951fed9f Sam anti nuke missile launcher (#176)
now with better name

---------

Co-authored-by: evanpelle <evanpelle@gmail.com>
2025-03-09 13:25:51 -07:00
Ilan Schemoul afe4f85919 fix: warship icon (#178) 2025-03-08 10:27:16 -08:00
Evan 25224ed749 null check on warship target unit 2025-03-07 10:25:31 -08:00
evanpelle 7d79c299f4 Merge pull request #143 from ilan-schemoul/warship-target
feat: WarShips red color outside if target current player
2025-03-04 15:53:47 -08:00
ilan schemoul d2208755c4 feat: WarShips red color outside if target current player
Hard to know when warship captures your trade so if they target one of
your trade or war ship they are highlighted in red.
Known limitation: doesn't work well if the WarShip is already in red
(player's color)
2025-03-05 00:45:35 +01:00
BeGj 2685891e7a checks if valid coord before referencing the tile. 2025-03-04 14:30:31 +00:00
BeGj abf79f4c8d console.debug is unecessary, code comment instead. 2025-03-04 12:25:01 +00:00
BeGj de07fd0b4f removed isValidCoord in onMouseUp 2025-03-04 12:24:35 +00:00
BeGj 276eee1152 validates coordinates in onMouseUp 2025-03-04 12:12:20 +00:00
BeGj a60bef97f0 reverted organized imports 2025-03-04 12:06:42 +00:00
BeGj fe9eb8700c handle findWarshipsNearCell when clicking outside the map 2025-03-04 12:03:30 +00:00
Bruno Jurković f84a18aa95 prevent selecting other players' warships 2025-03-02 23:31:25 +01:00
Bruno Jurković 3d4ea515de refactor: move selection rendering to dedicated UILayer 2025-03-02 23:31:19 +01:00
Bruno Jurković 1d7b03dde7 Reusable clearSelectionBox method, modified terrain redraw 2025-03-02 23:30:50 +01:00
Bruno Jurković c3dfcc63a5 Added warship selection mechanic 2025-03-02 23:30:47 +01:00
Evan 1ebafd0b88 highlight nukes 2025-02-19 19:57:33 -08:00
Evan 40966ca3b9 format all files with prettier 2025-02-12 08:28:15 -08:00
Evan 1b6172ee4b bugfix: units not getting removed from screen when getting destroyed 2025-02-09 10:35:03 -08:00
Evan 1594a45dac have buildings take time to construct 2025-02-08 13:53:58 -08:00
Evan b643a6357b implement mirv 2025-02-04 11:53:41 -08:00
Evan c109d23f9f combine battleship + destroyer => warship. 2025-02-02 14:31:30 -08:00
Evan 4ee37323f9 format codebase with prettier 2025-02-01 12:05:11 -08:00
evanpelle 4bbb63fd48 move Game updates to GameUpdate.ts 2025-02-01 12:05:11 -08:00
evanpelle 4034d11015 split Player/Unit from its Views for better separation 2025-02-01 12:05:11 -08:00
Evan f0f5bae79f thread_split: convert all tile to tileref 2025-02-01 12:05:11 -08:00
Evan 3da6008e9f thread split: get units working 2025-02-01 12:05:11 -08:00
Evan e395619abc update unitlayer to use new api 2025-02-01 12:05:11 -08:00
Evan 459fc50dae builds 2025-02-01 12:05:11 -08:00
evanpelle 162b6dc349 in progress 2025-02-01 12:05:11 -08:00