summaryrefslogtreecommitdiff
path: root/engine/src/draw_flags.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-06-22 23:00:37 +0200
committerHampusM <hampus@hampusmat.com>2024-06-22 23:00:37 +0200
commit4793e4411d98d97f879023dc072f3847201d49da (patch)
tree063683aaa6204e72788ec6217d3c57e281b61101 /engine/src/draw_flags.rs
parent7af802e1dfcdbd4d863fec9a8f88229694926860 (diff)
feat(engine): add support for drawing objects as a bundle
Diffstat (limited to 'engine/src/draw_flags.rs')
-rw-r--r--engine/src/draw_flags.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/engine/src/draw_flags.rs b/engine/src/draw_flags.rs
index c8c11c9..1352fe2 100644
--- a/engine/src/draw_flags.rs
+++ b/engine/src/draw_flags.rs
@@ -1,7 +1,11 @@
+use std::sync::atomic::{AtomicUsize, Ordering};
+
use ecs::Component;
use crate::util::builder;
+static CURRENT_BUNDLE_ID: AtomicUsize = AtomicUsize::new(0);
+
builder! {
/// Flags for how a object should be drawn.
#[builder(name = Builder, derives = (Debug, Default, Clone))]
@@ -47,3 +51,34 @@ pub enum PolygonModeFace
#[default]
FrontAndBack,
}
+
+/// Metadata for how a object should be drawn together with other objects.
+#[derive(Debug, Clone, Component)]
+pub struct DrawingBundled
+{
+ pub bundle_id: DrawingBundleId,
+ pub order: usize,
+}
+
+/// The ID of a object drawing bundle.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
+pub struct DrawingBundleId
+{
+ inner: usize,
+}
+
+impl DrawingBundleId
+{
+ /// Creates a new unique bundle ID.
+ pub fn new() -> Self
+ {
+ Self {
+ inner: CURRENT_BUNDLE_ID.fetch_add(1, Ordering::Relaxed),
+ }
+ }
+
+ pub fn inner(&self) -> usize
+ {
+ self.inner
+ }
+}