From 872ec8f3c1b350df077e8795fafff313a9e9c882 Mon Sep 17 00:00:00 2001 From: TerraMaster85 Date: Sun, 7 Apr 2024 21:31:40 -0400 Subject: [PATCH] planet direction indicators --- starkingdoms-client/src/assets/earth_icon.svg | 200 ++++++++++++++++++ starkingdoms-client/src/assets/mars_icon.svg | 132 ++++++++++++ starkingdoms-client/src/assets/moon_icon.svg | 116 ++++++++++ starkingdoms-client/src/rendering.ts | 33 ++- starkingdoms-client/src/textures.ts | 13 ++ 5 files changed, 493 insertions(+), 1 deletion(-) create mode 100644 starkingdoms-client/src/assets/earth_icon.svg create mode 100644 starkingdoms-client/src/assets/mars_icon.svg create mode 100644 starkingdoms-client/src/assets/moon_icon.svg diff --git a/starkingdoms-client/src/assets/earth_icon.svg b/starkingdoms-client/src/assets/earth_icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb339e77989c7dcee5fcbf934648cab9aed0a5fe --- /dev/null +++ b/starkingdoms-client/src/assets/earth_icon.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/starkingdoms-client/src/assets/mars_icon.svg b/starkingdoms-client/src/assets/mars_icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d288eb2e4d53e7b2826b9418a670c4f0c19912e --- /dev/null +++ b/starkingdoms-client/src/assets/mars_icon.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/starkingdoms-client/src/assets/moon_icon.svg b/starkingdoms-client/src/assets/moon_icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..77f1a5a7de723a467bb7266434224add19766773 --- /dev/null +++ b/starkingdoms-client/src/assets/moon_icon.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/starkingdoms-client/src/rendering.ts b/starkingdoms-client/src/rendering.ts index 7aa3c1eeb4ca73d9fc839ff253938a73b8360747..5c705dca620a9257a27736513709a70a8b1b55e2 100644 --- a/starkingdoms-client/src/rendering.ts +++ b/starkingdoms-client/src/rendering.ts @@ -1,6 +1,6 @@ import * as PIXI from "pixi.js"; import { global, player } from "./globals.ts"; -import { part_texture_url, planet_texture_url } from "./textures.ts"; +import { part_texture_url, planet_texture_url, indicator_texture_url } from "./textures.ts"; import tex_starfield from "./assets/starfield_dim.svg"; import tex_starfield_transp from "./assets/starfield_transp.svg"; @@ -28,6 +28,7 @@ export function startRender() { player_text_map: new Map(), planet_sprite_map: new Map(), part_sprite_map: new Map(), + indicator_sprite_map: new Map(), starfield: { sprite: new PIXI.TilingSprite( PIXI.Texture.from(tex_starfield), @@ -181,6 +182,9 @@ export function startRender() { planet_sprite.x = planet.transform.x; planet_sprite.y = planet.transform.y; planet_sprite.rotation = planet.transform.rot; + + + } for (let [id, username] of global.players_map) { let username_text; @@ -208,6 +212,33 @@ export function startRender() { username_text = global.rendering!.player_text_map.get( global.me!.part_id, )!; + + // don't really know where else to put this + for (let [id, planet] of global.planets_map) { + let indicator_sprite; + + if (global.rendering!.indicator_sprite_map.has(id)) { + indicator_sprite = global.rendering!.indicator_sprite_map.get(id)!; + } else { + indicator_sprite = PIXI.Sprite.from( + indicator_texture_url(planet.planet_type), + ); + global.rendering!.indicator_sprite_map.set(id, indicator_sprite); + global.rendering!.app.stage.addChild(indicator_sprite); + } + + indicator_sprite.anchor.set(0.5); + indicator_sprite.height = 32 / global.scale; // undo zoom scale effect + indicator_sprite.width = 32 / global.scale; + + let player_transform = global.parts_map.get(global.me.part_id)!.transform + let angle_to_planet = Math.atan2(planet.transform.y-player_transform.y, planet.transform.x-player_transform.x); + let indicator_distance = height / 4 / global.scale; + indicator_sprite.x = player_transform.x + Math.cos(angle_to_planet) * indicator_distance; + indicator_sprite.y = player_transform.y + Math.sin(angle_to_planet) * indicator_distance; + indicator_sprite.rotation = angle_to_planet; + indicator_sprite.alpha = 0.5; + } } else { username_text = new PIXI.Text(global.me!.username); username_text.alpha = 0.6; diff --git a/starkingdoms-client/src/textures.ts b/starkingdoms-client/src/textures.ts index 4ed86aebd5916ad30584417bce8c62f8896cc20e..dcb2d90ea8b24e25f51cacef4ed60bfe536dc999 100644 --- a/starkingdoms-client/src/textures.ts +++ b/starkingdoms-client/src/textures.ts @@ -2,6 +2,9 @@ import { PartType, PlanetType } from "./protocol.ts"; import tex_earth from "./assets/earth.svg"; import tex_moon from "./assets/moon.svg"; import tex_mars from "./assets/mars.svg"; +import tex_earth_icon from "./assets/earth_icon.svg"; +import tex_moon_icon from "./assets/moon_icon.svg"; +import tex_mars_icon from "./assets/mars_icon.svg"; import tex_hearty from "./assets/hearty.svg"; import tex_cargo_off from "./assets/cargo_off.svg"; import tex_cargo_on from "./assets/cargo_on.svg"; @@ -22,6 +25,16 @@ export function planet_texture_url(type: PlanetType): string { } return tex_missing; } +export function indicator_texture_url(type: PlanetType): string { + if (type == PlanetType.Earth) { + return tex_earth_icon; + } else if (type == PlanetType.Moon) { + return tex_moon_icon; + } else if (type == PlanetType.Mars) { + return tex_mars_icon; + } + return tex_missing; +} export function part_texture_url(type: PartType, attached: boolean): string { if (type == PartType.Hearty) {