Skip to content

Commit

Permalink
Added the example file. Added the example image. Improved rampart col…
Browse files Browse the repository at this point in the history
…ors.
  • Loading branch information
xilexio committed Mar 23, 2023
1 parent 645e8de commit 7b78d97
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 5 deletions.
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ Use opacity 1.0 for opaque visualization and a smaller, positive value for parti
Small visual artifacts will appear in partially transparent visualizations.
```rust
room_visual_ext.structure(42.0, 42.0, StructureType::Spawn, 1.0);
room_visual_ext.structure_roomxy(
unsafe { RoomXY::unchecked_new(42u8, 42u8) },
StructureType::Rampart,
1.0
);
```
3. You may also call any `RoomVisual` method directly from the `RoomVisualExt` object.
4. You may not use the object in the next game tick since it becomes invalid just like `RoomVisual`.
Expand All @@ -38,9 +43,9 @@ For results like in the game, place roads before containers that are on them and
Below is an example showcasing visualization of all supported structures at opacities 1.0 and 0.5.
For comparison, we present how they look in the actual game.

[TODO image]
![Screenshot of showcase of RoomVisualExt in-game](room_visual_ext_example.png)

You may find the code used to produce these visualizations in the `example.rs` file. [TODO add the example]
You may find the code used to produce these visualizations in the `examples/showcase.rs` file.

## Project history

Expand Down
147 changes: 147 additions & 0 deletions examples/showcase.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
use screeps::{game, RoomXY, StructureType};
use wasm_bindgen::prelude::*;
use room_visual_ext::RoomVisualExt;

#[wasm_bindgen(js_name = loop)]
pub fn game_loop() {
fn show_sample(room_visual_ext: &mut RoomVisualExt, x_offset: f32, opacity: f32) {
// All RoomVisual functions may also be used.
let label = format!("RoomVisualExt with opacity={}", opacity);
room_visual_ext.text(13f32 + x_offset, 6.5f32, label, None);

// Roads first so that nothing renders below them.
room_visual_ext.structure(13f32 + x_offset, 10f32, StructureType::Road, opacity);
room_visual_ext.structure(12f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(11f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(10f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(9f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(8f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(14f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(15f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(16f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(17f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(18f32 + x_offset, 9f32, StructureType::Road, opacity);
room_visual_ext.structure(12f32 + x_offset, 11f32, StructureType::Road, opacity);
room_visual_ext.structure(14f32 + x_offset, 11f32, StructureType::Road, opacity);
room_visual_ext.structure(12f32 + x_offset, 12f32, StructureType::Road, opacity);
room_visual_ext.structure(14f32 + x_offset, 12f32, StructureType::Road, opacity);
room_visual_ext.structure(12f32 + x_offset, 13f32, StructureType::Road, opacity);
room_visual_ext.structure(14f32 + x_offset, 13f32, StructureType::Road, opacity);
room_visual_ext.structure(12f32 + x_offset, 14f32, StructureType::Road, opacity);
room_visual_ext.structure(14f32 + x_offset, 14f32, StructureType::Road, opacity);
room_visual_ext.structure(13f32 + x_offset, 15f32, StructureType::Road, opacity);
room_visual_ext.structure(13f32 + x_offset, 16f32, StructureType::Road, opacity);
room_visual_ext.structure(12f32 + x_offset, 16f32, StructureType::Road, opacity);
room_visual_ext.structure(14f32 + x_offset, 16f32, StructureType::Road, opacity);

// RoomXY is also supported.
room_visual_ext.structure_roomxy(
unsafe { RoomXY::unchecked_new(13 + x_offset as u8, 14) },
StructureType::Spawn,
opacity,
);
room_visual_ext.structure(13f32 + x_offset, 13f32, StructureType::Nuker, opacity);
room_visual_ext.structure(13f32 + x_offset, 12f32, StructureType::Link, opacity);
room_visual_ext.structure(13f32 + x_offset, 11f32, StructureType::PowerSpawn, opacity);

// Ramparts over the buildings below them, though preferably after all other structures
// due to buildings that stick out, such as terminal.
room_visual_ext.structure(13f32 + x_offset, 14f32, StructureType::Rampart, opacity);
room_visual_ext.structure(13f32 + x_offset, 13f32, StructureType::Rampart, opacity);
room_visual_ext.structure(13f32 + x_offset, 12f32, StructureType::Rampart, opacity);
room_visual_ext.structure(13f32 + x_offset, 11f32, StructureType::Rampart, opacity);

// In particular, containers after roads below them, so that they do not render below them.
room_visual_ext.structure(13f32 + x_offset, 16f32, StructureType::Container, opacity);
room_visual_ext.structure(13f32 + x_offset, 17f32, StructureType::Extractor, opacity);

room_visual_ext.structure(13f32 + x_offset, 9f32, StructureType::Terminal, opacity);
room_visual_ext.structure(13f32 + x_offset, 8f32, StructureType::Extension, opacity);
room_visual_ext.structure(12f32 + x_offset, 8f32, StructureType::Extension, opacity);
room_visual_ext.structure(11f32 + x_offset, 8f32, StructureType::Extension, opacity);
room_visual_ext.structure(14f32 + x_offset, 8f32, StructureType::Extension, opacity);
room_visual_ext.structure(15f32 + x_offset, 8f32, StructureType::Extension, opacity);

room_visual_ext.structure(12f32 + x_offset, 10f32, StructureType::Observer, opacity);
room_visual_ext.structure(11f32 + x_offset, 10f32, StructureType::Extension, opacity);
room_visual_ext.structure(11f32 + x_offset, 11f32, StructureType::Factory, opacity);
room_visual_ext.structure(11f32 + x_offset, 12f32, StructureType::Extension, opacity);
room_visual_ext.structure(11f32 + x_offset, 13f32, StructureType::Extension, opacity);
room_visual_ext.structure(11f32 + x_offset, 14f32, StructureType::Storage, opacity);
room_visual_ext.structure(11f32 + x_offset, 15f32, StructureType::Extension, opacity);
room_visual_ext.structure(12f32 + x_offset, 15f32, StructureType::Extension, opacity);

room_visual_ext.structure(14f32 + x_offset, 10f32, StructureType::Extension, opacity);
room_visual_ext.structure(15f32 + x_offset, 10f32, StructureType::Extension, opacity);
room_visual_ext.structure(15f32 + x_offset, 11f32, StructureType::Tower, opacity);
room_visual_ext.structure(15f32 + x_offset, 12f32, StructureType::Lab, opacity);
room_visual_ext.structure(15f32 + x_offset, 13f32, StructureType::Lab, opacity);
room_visual_ext.structure(15f32 + x_offset, 14f32, StructureType::Lab, opacity);
room_visual_ext.structure(15f32 + x_offset, 15f32, StructureType::Extension, opacity);
room_visual_ext.structure(14f32 + x_offset, 15f32, StructureType::Extension, opacity);

// No particular horizontal or vertical ordering is needed.
room_visual_ext.structure(13f32 + x_offset, 9f32, StructureType::Rampart, opacity);
room_visual_ext.structure(13f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(12f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(11f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(10f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 9f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 10f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 11f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 12f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 13f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 14f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 15f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 16f32, StructureType::Rampart, opacity);
room_visual_ext.structure(9f32 + x_offset, 17f32, StructureType::Rampart, opacity);
room_visual_ext.structure(10f32 + x_offset, 14f32, StructureType::Rampart, opacity);
room_visual_ext.structure(10f32 + x_offset, 15f32, StructureType::Rampart, opacity);
room_visual_ext.structure(10f32 + x_offset, 16f32, StructureType::Rampart, opacity);
room_visual_ext.structure(10f32 + x_offset, 17f32, StructureType::Rampart, opacity);
room_visual_ext.structure(11f32 + x_offset, 17f32, StructureType::Rampart, opacity);
room_visual_ext.structure(11f32 + x_offset, 16f32, StructureType::Rampart, opacity);
room_visual_ext.structure(14f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(15f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(16f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(17f32 + x_offset, 8f32, StructureType::Rampart, opacity);
room_visual_ext.structure(17f32 + x_offset, 9f32, StructureType::Rampart, opacity);

room_visual_ext.structure(17f32 + x_offset, 10f32, StructureType::Wall, opacity);
room_visual_ext.structure(17f32 + x_offset, 11f32, StructureType::Wall, opacity);
room_visual_ext.structure(17f32 + x_offset, 12f32, StructureType::Wall, opacity);
room_visual_ext.structure(17f32 + x_offset, 13f32, StructureType::Wall, opacity);
room_visual_ext.structure(17f32 + x_offset, 14f32, StructureType::Wall, opacity);
room_visual_ext.structure(17f32 + x_offset, 15f32, StructureType::Wall, opacity);
room_visual_ext.structure(17f32 + x_offset, 16f32, StructureType::Wall, opacity);
room_visual_ext.structure(17f32 + x_offset, 17f32, StructureType::Wall, opacity);
room_visual_ext.structure(16f32 + x_offset, 14f32, StructureType::Wall, opacity);
room_visual_ext.structure(16f32 + x_offset, 15f32, StructureType::Wall, opacity);
room_visual_ext.structure(16f32 + x_offset, 16f32, StructureType::Wall, opacity);
room_visual_ext.structure(16f32 + x_offset, 17f32, StructureType::Wall, opacity);
room_visual_ext.structure(15f32 + x_offset, 16f32, StructureType::Wall, opacity);
room_visual_ext.structure(15f32 + x_offset, 17f32, StructureType::Wall, opacity);
}

let spawn = game::spawns().values().next().unwrap_throw();
spawn.pos();
let room_name = spawn.room().map(|r| r.name());
let mut room_visual_ext = RoomVisualExt::new(room_name.unwrap());

show_sample(&mut room_visual_ext, 1.0, 1.0);

room_visual_ext.line((20f32, 7f32), (20f32, 19f32), None);

// You may get the internal RoomVisual object and use it directly too.
room_visual_ext.room_visual.text(26f32, 6.5f32, "Real, in-game objects".into(), None);

room_visual_ext.line((32f32, 7f32), (32f32, 19f32), None);

show_sample(&mut room_visual_ext, 25.0, 0.5);

room_visual_ext.text(
26f32, 20f32,
"This image was generated using the examples/showcase.rs snippet".into(),
None);
}
Binary file added room_visual_ext_example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 7 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ const POWER_COLOR: &str = "#F53547";
const ROAD_COLOR: &str = "#666666";
const WHITE_COLOR: &str = "#FFFFFF";
const BLACK_COLOR: &str = "#000000";
const RAMPART_COLOR: &str = "#434C43";
const RAMPART_OUTLINE_COLOR: &str = "#5D735F";
const RAMPART_COLOR: &str = "#669966";
const RAMPART_OUTLINE_COLOR: &str = "#66CC66";
const FACTORY_OUTER_CIRCLE_FILL_COLOR: &str = "#232323";
const FACTORY_PARTS_COLOR: &str = "#140a0a";
const FACTORY_LEVEL_CIRCLE_FILL_COLOR: &str = "#302a2a";
Expand Down Expand Up @@ -171,7 +171,7 @@ impl RoomVisualExt {
.fill(RAMPART_COLOR)
.stroke(RAMPART_OUTLINE_COLOR)
.stroke_width(0.07)
.opacity(opacity * 0.5);
.opacity(opacity * 0.3);
self.rect(x - 0.5, y - 0.5, 1.0, 1.0, Some(rampart_rect_style));
}
StructureType::Link => {
Expand Down Expand Up @@ -592,4 +592,8 @@ impl RoomVisualExt {
_ => {}
};
}

pub fn structure_roomxy(&mut self, xy: RoomXY, structure_type: StructureType, opacity: f32) {
self.structure(xy.x.u8() as f32, xy.y.u8() as f32, structure_type, opacity)
}
}

0 comments on commit 7b78d97

Please sign in to comment.