Minor cleanup
parent
10682db347
commit
fef43d8744
8
TODO.md
8
TODO.md
|
@ -14,9 +14,10 @@
|
|||
- Better loading
|
||||
- incremental?
|
||||
- Higher texture limit (16 x 8096 x 8096 isn't enough)
|
||||
- GPU limits? (texture size, texture number)
|
||||
- GPU limits? (texture size, texture number, particle/sprite limits)
|
||||
- Particles when a ship is damaged (events)
|
||||
- Sticky radar
|
||||
- Clean up world and objects
|
||||
|
||||
----------------------------------
|
||||
|
||||
|
@ -50,7 +51,6 @@
|
|||
- Orbiting debris (asteroids)
|
||||
- Collectibles (flotsam)
|
||||
- UI
|
||||
- health, shields (cpu by tinyskia?)
|
||||
- loading screen, menus
|
||||
- Indicators (planet names, enemy ship stats)
|
||||
- Landable planets
|
||||
|
@ -126,6 +126,7 @@
|
|||
- Nova dust parallax
|
||||
- Engine flare ease in/out
|
||||
- Lens flare
|
||||
- Clustered starfield
|
||||
|
||||
## Write and Document
|
||||
- Parallax
|
||||
|
@ -141,7 +142,7 @@
|
|||
- Handles
|
||||
- Content specification and pipeline
|
||||
- How packer and optimizations work, and why
|
||||
- How big should sprites be? (resize existing)
|
||||
- How big should sprite resolutions be? How about frame rate?
|
||||
- Naming: atlas, sprite, image, frame, texture
|
||||
|
||||
|
||||
|
@ -158,4 +159,5 @@
|
|||
- Find your wreckage when you die (dark souls/HK)
|
||||
- Lose some outfits, lose ship? Real risk for going out! (HK does this well)
|
||||
- Damage to ship subsystems
|
||||
- Soft and highly armored ship points
|
||||
- Repair your own ship
|
|
@ -103,7 +103,5 @@ fade_rng = 0.1
|
|||
# TODO:
|
||||
# effect probabilities & variants
|
||||
# multiple particles in one effect
|
||||
# fade
|
||||
# document: effect vs particle
|
||||
# sprite lifetime/fps variation (and effects inherit lifetime later)
|
||||
# universal effect creator
|
||||
|
|
|
@ -7,7 +7,6 @@ linear_drag = 0.2
|
|||
angular_drag = 0.2
|
||||
|
||||
# TODO: disable
|
||||
# TODO: damage effects
|
||||
|
||||
space.outfit = 200
|
||||
space.engine = 50
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use anyhow::{bail, Context, Result};
|
||||
use cgmath::Deg;
|
||||
use cgmath::{Deg, Rad};
|
||||
use serde::Deserialize;
|
||||
use std::collections::HashMap;
|
||||
|
||||
|
@ -109,7 +109,7 @@ pub struct Projectile {
|
|||
/// `spread / 2` degrees in both directions.
|
||||
///
|
||||
/// (Forming a "fire cone" of `spread` degrees)
|
||||
pub angle_rng: Deg<f32>,
|
||||
pub angle_rng: Rad<f32>,
|
||||
|
||||
/// The particle this projectile will spawn when it hits something
|
||||
pub impact_effect: Option<EffectHandle>,
|
||||
|
@ -173,7 +173,7 @@ impl crate::Build for Gun {
|
|||
|
||||
// Divide by 2, so the angle matches the angle of the fire cone.
|
||||
// This should ALWAYS be done in the content parser.
|
||||
angle_rng: Deg(gun.projectile.angle_rng / 2.0),
|
||||
angle_rng: Deg(gun.projectile.angle_rng / 2.0).into(),
|
||||
impact_effect,
|
||||
expire_effect,
|
||||
collider: gun.projectile.collider,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use anyhow::{bail, Context, Result};
|
||||
use cgmath::{Deg, Point3};
|
||||
use cgmath::{Deg, Point3, Rad};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
||||
use crate::{handle::SpriteHandle, util::Polar, Content, ContentBuildContext};
|
||||
|
@ -106,8 +106,8 @@ pub struct Object {
|
|||
/// relative to the system's center (0, 0).
|
||||
pub position: Point3<f32>,
|
||||
|
||||
/// This object's sprite's angle, in degrees.
|
||||
pub angle: Deg<f32>,
|
||||
/// This object's sprite's angle.
|
||||
pub angle: Rad<f32>,
|
||||
}
|
||||
|
||||
/// Helper function for resolve_position, never called on its own.
|
||||
|
@ -162,7 +162,7 @@ fn resolve_position(
|
|||
let plane = Polar {
|
||||
center: (r.x, r.y).into(),
|
||||
radius: p.radius,
|
||||
angle: Deg(p.angle),
|
||||
angle: Deg(p.angle).into(),
|
||||
}
|
||||
.to_cartesian();
|
||||
Ok(Point3 {
|
||||
|
@ -203,7 +203,7 @@ impl crate::Build for System {
|
|||
position: resolve_position(&system.object, &obj, cycle_detector)
|
||||
.with_context(|| format!("In object {:#?}", label))?,
|
||||
size: obj.size,
|
||||
angle: Deg(obj.angle.unwrap_or(0.0)),
|
||||
angle: Deg(obj.angle.unwrap_or(0.0)).into(),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
use cgmath::{Angle, Deg, Point2, Vector2};
|
||||
use cgmath::{Angle, Point2, Rad, Vector2};
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct Polar {
|
||||
pub center: Point2<f32>,
|
||||
pub radius: f32,
|
||||
pub angle: Deg<f32>,
|
||||
pub angle: Rad<f32>,
|
||||
}
|
||||
|
||||
impl Polar {
|
||||
|
|
|
@ -162,7 +162,6 @@ impl Game {
|
|||
self.input.v_scroll = 0.0;
|
||||
}
|
||||
|
||||
// TODO: Camera physics
|
||||
let r = self
|
||||
.world
|
||||
.get_ship_mut(&self.player)
|
||||
|
|
|
@ -137,7 +137,6 @@ impl<'a> OutfitSet {
|
|||
self.available_space.occupy(&outfit.space);
|
||||
self.stats.add(&outfit);
|
||||
self.outfits.push(o);
|
||||
//self.update_engine_flares();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -150,8 +149,6 @@ impl<'a> OutfitSet {
|
|||
};
|
||||
self.available_space.free(&outfit.space);
|
||||
self.outfits.remove(i);
|
||||
self.stats.remove(&outfit);
|
||||
//self.update_engine_flares();
|
||||
}
|
||||
|
||||
/// Add a gun to this outfit set.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use cgmath::{Deg, Point3};
|
||||
use cgmath::{Point3, Rad};
|
||||
|
||||
use galactica_content as content;
|
||||
|
||||
|
@ -6,17 +6,5 @@ pub struct SystemObject {
|
|||
pub sprite: content::SpriteHandle,
|
||||
pub pos: Point3<f32>,
|
||||
pub size: f32,
|
||||
pub angle: Deg<f32>,
|
||||
}
|
||||
|
||||
impl SystemObject {
|
||||
//pub(crate) fn get_sprite(&self) -> ObjectSprite {
|
||||
// return ObjectSprite {
|
||||
// sprite: self.sprite,
|
||||
// pos: self.pos,
|
||||
// angle: self.angle,
|
||||
// size: self.size,
|
||||
// children: None,
|
||||
// };
|
||||
//}
|
||||
pub angle: Rad<f32>,
|
||||
}
|
||||
|
|
|
@ -8,10 +8,8 @@ use std::{
|
|||
};
|
||||
|
||||
// TODO: article
|
||||
// TODO: rework texturearray
|
||||
// TODO: reasonable sprite sizes
|
||||
// TODO: consistent naming
|
||||
// TODO: parallelize
|
||||
// TODO: consistent naming (document)
|
||||
// spriteatlas: the big images
|
||||
// texture: the same, what we load to wgpu
|
||||
// image: a single file
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#![warn(missing_docs)]
|
||||
|
||||
//! This crate creates texture atlases from an asset tree.
|
||||
//! The main interface for this crate is ... TODO
|
||||
|
||||
use std::{collections::HashMap, path::PathBuf};
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ use walkdir::WalkDir;
|
|||
// TODO: dynamic packing (for plugins)
|
||||
// TODO: standalone cli (galactica should ask to run this)
|
||||
// TODO: randomly assign sprites to textures, for efficiency
|
||||
// TODO: group images by use case
|
||||
// TODO: group images by use case (dynamic loading algorithm)
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let mut files = Vec::new();
|
||||
|
|
|
@ -98,9 +98,7 @@ impl GPUState {
|
|||
if size < 2.0 {
|
||||
continue;
|
||||
}
|
||||
let angle: Deg<f32> = util::rigidbody_rotation(r)
|
||||
.angle(Vector2 { x: 0.0, y: 1.0 })
|
||||
.into();
|
||||
let angle = util::rigidbody_rotation(r).angle(Vector2 { x: 0.0, y: 1.0 });
|
||||
let f = state.content.get_faction(s.ship.faction).color;
|
||||
let f = [f[0], f[1], f[2], 1.0];
|
||||
|
||||
|
@ -124,7 +122,7 @@ impl GPUState {
|
|||
bytemuck::cast_slice(&[UiInstance {
|
||||
anchor: PositionAnchor::NwC.to_int(),
|
||||
position: position.into(),
|
||||
angle: -Rad::from(angle).0, // TODO: consistent angles
|
||||
angle: -angle.0, // TODO: consistent angles
|
||||
size,
|
||||
color: f.into(),
|
||||
sprite_index: ship_sprite.get_index(),
|
||||
|
|
|
@ -16,7 +16,7 @@ pub struct RenderState<'a> {
|
|||
/// The world state to render
|
||||
pub world: &'a World,
|
||||
|
||||
// TODO: handle overflow
|
||||
// TODO: handle overflow. is it a problem?
|
||||
/// The current time, in seconds
|
||||
pub current_time: f32,
|
||||
|
||||
|
|
|
@ -166,9 +166,7 @@ impl<'a> World {
|
|||
.get(projectile.rigid_body)
|
||||
.unwrap();
|
||||
let pos = util::rigidbody_position(pr);
|
||||
let angle: Deg<f32> = util::rigidbody_rotation(pr)
|
||||
.angle(Vector2 { x: 1.0, y: 0.0 })
|
||||
.into();
|
||||
let angle = util::rigidbody_rotation(pr).angle(Vector2 { x: 1.0, y: 0.0 });
|
||||
|
||||
match &projectile.projectile.content.impact_effect {
|
||||
None => {}
|
||||
|
@ -182,7 +180,7 @@ impl<'a> World {
|
|||
particles.push(ParticleBuilder::from_content(
|
||||
effect,
|
||||
pos,
|
||||
Rad::from(-angle),
|
||||
-angle,
|
||||
parent_velocity,
|
||||
Vector2 {
|
||||
x: target_velocity.x,
|
||||
|
@ -323,9 +321,7 @@ impl<'a> World {
|
|||
let x = ct.get_effect(*x);
|
||||
let pos = util::rigidbody_position(&pr);
|
||||
let vel = util::rigidbody_velocity(&pr);
|
||||
let angle: Deg<f32> = util::rigidbody_rotation(&pr)
|
||||
.angle(Vector2 { x: 1.0, y: 0.0 })
|
||||
.into();
|
||||
let angle = util::rigidbody_rotation(&pr).angle(Vector2 { x: 1.0, y: 0.0 });
|
||||
|
||||
let velocity = {
|
||||
let a = rng
|
||||
|
@ -339,7 +335,7 @@ impl<'a> World {
|
|||
particles.push(ParticleBuilder::from_content(
|
||||
x,
|
||||
pos,
|
||||
Rad::from(-angle),
|
||||
-angle,
|
||||
velocity,
|
||||
Vector2::zero(),
|
||||
));
|
||||
|
@ -368,7 +364,6 @@ impl<'a> World {
|
|||
&self,
|
||||
s: ShipPhysicsHandle,
|
||||
) -> Option<(&objects::ShipWorldObject, &RigidBody)> {
|
||||
// TODO: handle dead handles
|
||||
Some((self.ships.get(&s.1)?, self.wrapper.rigid_body_set.get(s.0)?))
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue