- Register KnowledgePlugin in main.rs and game_loop test (Tyre critical) - Add KnowledgeGraph component to player spawn (Tyre critical) - Reset Stale -> Active on fresh direct observation (Hoshe warning) - Make registry/queue non-optional in emit_observation_events (Tyre/Hoshe) - Add tracing::warn for missing EntityRegistry entries (Hoshe warning) - Replace HashSet with Vec for small entity ID lookups (Hoshe suggestion) - Add const static assertion for KnowledgeConfidence ordering (Hoshe) - Add is_empty() and known_facts_iter() to KnowledgeGraph (Tyre) - Add decay_skips_non_minute_ticks and observe_resets_stale tests (Hoshe) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
65 lines
2.2 KiB
Rust
65 lines
2.2 KiB
Rust
// The Settled Reach - Simulation Server
|
|
// Entry point for standalone simulation binary
|
|
|
|
use bevy_app::prelude::*;
|
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
|
|
|
use settled_reach_server::bridge::tcp::TcpBridge;
|
|
use settled_reach_server::bridge::{BridgePlugin, BridgeResource, ServerRunning};
|
|
use settled_reach_server::knowledge::{KnowledgeGraph, KnowledgePlugin};
|
|
use settled_reach_server::perception::vision_cone::Facing;
|
|
use settled_reach_server::simulation::movement::{PlayerCharacter, TilePosition, WalkabilityMap};
|
|
use settled_reach_server::simulation::SimulationPlugin;
|
|
|
|
fn main() {
|
|
// Initialize tracing subscriber for logging
|
|
tracing_subscriber::registry()
|
|
.with(
|
|
tracing_subscriber::EnvFilter::try_from_default_env()
|
|
.unwrap_or_else(|_| "settled_reach_server=debug".into()),
|
|
)
|
|
.with(tracing_subscriber::fmt::layer())
|
|
.init();
|
|
|
|
let addr = std::env::args()
|
|
.nth(1)
|
|
.or_else(|| std::env::var("SR_ADDR").ok())
|
|
.unwrap_or_else(|| "127.0.0.1:9876".to_string());
|
|
|
|
tracing::info!("The Settled Reach - Simulation Server starting");
|
|
tracing::info!("Waiting for client connection on {}", addr);
|
|
|
|
let bridge = TcpBridge::accept(&addr).unwrap_or_else(|e| {
|
|
tracing::error!("Failed to accept client connection on {}: {}", addr, e);
|
|
std::process::exit(1);
|
|
});
|
|
tracing::info!("Client connected, initializing simulation");
|
|
|
|
// Create the bevy App and add plugins
|
|
let mut app = App::new();
|
|
app.add_plugins(SimulationPlugin);
|
|
app.add_plugins(BridgePlugin);
|
|
app.add_plugins(KnowledgePlugin);
|
|
app.insert_resource(BridgeResource::new(bridge));
|
|
app.insert_resource(WalkabilityMap::new(32, 32, 1));
|
|
app.world_mut().spawn((
|
|
PlayerCharacter,
|
|
TilePosition::new(16, 16, 0),
|
|
Facing::default(),
|
|
KnowledgeGraph::new(),
|
|
));
|
|
|
|
tracing::info!("Simulation initialized, entering game loop");
|
|
|
|
// Game loop: run until client disconnects
|
|
loop {
|
|
app.update();
|
|
// Check ServerRunning resource
|
|
if !app.world().resource::<ServerRunning>().0 {
|
|
break;
|
|
}
|
|
}
|
|
|
|
tracing::info!("Simulation server shutting down");
|
|
}
|