feat: redone visualization to be human-generated
This commit is contained in:
parent
9edb79e970
commit
5b4ad9a47a
9 changed files with 214 additions and 24 deletions
|
|
@ -16,7 +16,9 @@ pub fn tick(mut grid: ResMut<Grid>) {
|
|||
for y in 0..grid.size.y {
|
||||
for z in 0..grid.size.z {
|
||||
let vector = UVec3::new(x,y,z);
|
||||
let index = grid.indexify(vector);
|
||||
let Some(index) = grid.indexify(vector) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
match grid.data[index as usize] {
|
||||
GridElement::Water { amount } => {
|
||||
|
|
@ -24,7 +26,7 @@ pub fn tick(mut grid: ResMut<Grid>) {
|
|||
|
||||
if let Some(gravity_vector) = vector.checked_sub(UVec3::new(0,1,0)) {
|
||||
if let Some(gravity_amount) = grid.data
|
||||
[grid.indexify(gravity_vector)]
|
||||
[grid.indexify(gravity_vector).unwrap()]
|
||||
.try_fill(transfer_amount.min(MAX_VERTICAL_FLOW)) {
|
||||
stack.push(GridAction::MoveLiquid { from: vector, to: gravity_vector, amount: gravity_amount });
|
||||
transfer_amount -= gravity_amount;
|
||||
|
|
@ -35,18 +37,22 @@ pub fn tick(mut grid: ResMut<Grid>) {
|
|||
if transfer_amount > 0 {
|
||||
for lookup_vector in [UVec3::new(1,0,0),UVec3::new(0,0,1)] {
|
||||
if let Some(toward_vector) = vector.checked_add(lookup_vector) {
|
||||
if let Some(toward_amount) = grid.data
|
||||
[grid.indexify(toward_vector)]
|
||||
.try_fill(transfer_amount.min(MAX_VERTICAL_FLOW)) {
|
||||
stack.push(GridAction::MoveLiquid { from: vector, to: toward_vector, amount: toward_amount });
|
||||
if let Some(index) = grid.indexify(toward_vector) {
|
||||
if let Some(toward_amount) = grid.data
|
||||
[index]
|
||||
.try_fill(transfer_amount.min(MAX_VERTICAL_FLOW)) {
|
||||
stack.push(GridAction::MoveLiquid { from: vector, to: toward_vector, amount: toward_amount });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(toward_vector) = vector.checked_sub(lookup_vector) {
|
||||
if let Some(toward_amount) = grid.data
|
||||
[grid.indexify(toward_vector)]
|
||||
.try_fill(transfer_amount.min(MAX_VERTICAL_FLOW)) {
|
||||
stack.push(GridAction::MoveLiquid { from: vector, to: toward_vector, amount: toward_amount });
|
||||
if let Some(index) = grid.indexify(toward_vector) {
|
||||
if let Some(toward_amount) = grid.data
|
||||
[index]
|
||||
.try_fill(transfer_amount.min(MAX_VERTICAL_FLOW)) {
|
||||
stack.push(GridAction::MoveLiquid { from: vector, to: toward_vector, amount: toward_amount });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -62,10 +68,11 @@ pub fn tick(mut grid: ResMut<Grid>) {
|
|||
for action in stack {
|
||||
match action {
|
||||
GridAction::MoveLiquid { from, to, amount } => {
|
||||
let (from_index, to_index) = (grid.indexify(from), grid.indexify(to));
|
||||
let (from_index, to_index) = (grid.indexify(from).unwrap(), grid.indexify(to).unwrap());
|
||||
grid.tranfer_fluid(from_index, to_index, amount);
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue