Skip to content

Commit

Permalink
fix an edge case with laser logic, expose some more information
Browse files Browse the repository at this point in the history
  • Loading branch information
bgkillas committed Jan 17, 2025
1 parent e09e616 commit 2399ca4
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 17 deletions.
2 changes: 1 addition & 1 deletion ewext/noita_api/src/serialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ pub fn deserialize_entity(entity_data: &[u8], x: f32, y: f32) -> eyre::Result<En
ability.set_m_cast_delay_start_frame(0)?;
}
Ok(ent)
}
}
10 changes: 9 additions & 1 deletion ewext/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use noita_api::{
lua_bindings::{lua_State, LUA_REGISTRYINDEX},
LuaFnRet, LuaGetValue, LuaState, RawString, ValuesOnStack, LUA,
},
DamageModelComponent, EntityID,
DamageModelComponent, EntityID, VariableStorageComponent,
};
use noita_api_macro::add_lua_fn;
use rustc_hash::FxHashMap;
Expand Down Expand Up @@ -481,6 +481,14 @@ pub unsafe extern "C" fn luaopen_ewext0(lua: *mut lua_State) -> c_int {
let (peer_id, entity): (Cow<'_, str>, Option<EntityID>) = LuaGetValue::get(lua, -1)?;
let peer_id = PeerId::from_hex(&peer_id)?;
let entity = entity.ok_or_eyre("Expected a valid entity")?;
if entity
.iter_all_components_of_type_including_disabled::<VariableStorageComponent>(None)?
.all(|var| var.name().unwrap_or("".into()) != "ew_peer_id")
{
let var = entity.add_component::<VariableStorageComponent>()?;
var.set_name("ew_peer_id".into())?;
var.set_value_string(peer_id.0.to_string().into())?;
}
ExtState::with_global(|state| {
state.player_entity_map.insert(peer_id, entity);
Ok(())
Expand Down
28 changes: 17 additions & 11 deletions ewext/src/modules/entity_sync/diff_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,16 +283,7 @@ impl LocalDiffModelTracker {
{
let ai = entity.get_first_component::<AnimalAIComponent>(None)?;
if let Some(target) = ai.m_greatest_prey()? {
game_print(target.0.to_string());
if let Some(var) = target
.iter_all_components_of_type_including_disabled::<VariableStorageComponent>(
None,
)?
.find(|var| var.name().unwrap_or("".into()) == "ew_peer_id")
{
game_print(var.value_string()?);
info.laser = Some(PeerId::from_hex(&var.value_string()?)?)
}
info.laser = ctx.player_map.get_by_right(&target).copied()
}
}

Expand Down Expand Up @@ -418,10 +409,18 @@ impl LocalDiffModel {
"mods/quant.ew/files/system/entity_sync_helper/death_notify.lua".into(),
)
})?;
entity
.iter_all_components_of_type_including_disabled::<VariableStorageComponent>(None)?
.for_each(|var| {
if var.name().unwrap_or("".into()) == "ew_gid_lid" {
let _ = entity.remove_component(*var);
}
});
let var = entity.add_component::<VariableStorageComponent>()?;
var.set_name("ew_gid_lid".into())?;
var.set_value_string(gid.0.to_string().into())?;
var.set_value_int(i32::from_ne_bytes(lid.0.to_ne_bytes()))?;
var.set_value_bool(true)?;

if entity
.try_get_first_component::<BossDragonComponent>(None)?
Expand Down Expand Up @@ -1089,7 +1088,6 @@ impl RemoteDiffModel {
laser
};
if let Some(ent) = ctx.player_map.get_by_left(&peer) {
game_print(ent.0.to_string());
let (x, y) = entity.position()?;
let (tx, ty) = ent.position()?;
if !raytrace_platforms(x as f64, y as f64, tx as f64, ty as f64)?.0 {
Expand Down Expand Up @@ -1223,12 +1221,20 @@ impl RemoteDiffModel {
}
}

entity
.iter_all_components_of_type_including_disabled::<VariableStorageComponent>(None)?
.for_each(|var| {
if var.name().unwrap_or("".into()) == "ew_gid_lid" {
let _ = entity.remove_component(*var);
}
});
let var = entity.add_component::<VariableStorageComponent>()?;
var.set_name("ew_gid_lid".into())?;
if let Some(gid) = self.lid_to_gid.get(&lid) {
var.set_value_string(gid.0.to_string().into())?;
}
var.set_value_int(i32::from_ne_bytes(lid.0.to_ne_bytes()))?;
var.set_value_bool(false)?;

Ok(())
}
Expand Down
3 changes: 1 addition & 2 deletions quant.ew/files/core/player_fns.lua
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,6 @@ function player_fns.spawn_player_for(peer_id, x, y, existing_playerdata)
print("Spawning player for " .. peer_id)
local new = EntityLoad("mods/quant.ew/files/system/player/tmp/" .. peer_id .. "_base.xml", x, y)
util.make_ephemerial(new)
EntityAddComponent2(new, "VariableStorageComponent", { name = "ew_peer_id", value_string = peer_id })
LoadGameEffectEntityTo(new, "mods/quant.ew/files/system/spectate/no_tinker.xml")

for _, child in ipairs(EntityGetAllChildren(new) or {}) do
Expand Down Expand Up @@ -677,4 +676,4 @@ function player_fns.make_fire_data(special_seed, player_data, mana)
end
end

return player_fns
return player_fns
3 changes: 1 addition & 2 deletions quant.ew/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,6 @@ function OnPlayerSpawned(player_entity) -- This runs when player entity has been
ctx.player_data_by_local_entity[player_entity] = my_player
ctx.ready = true
ctx.my_player = my_player
EntityAddComponent2(player_entity, "VariableStorageComponent", { name = "ew_peer_id", value_string = ctx.my_id })

EntityAddTag(player_entity, "ew_peer")

Expand Down Expand Up @@ -648,4 +647,4 @@ end
function OnPlayerDied(player_entity)
ctx.hook.on_player_died(player_entity)
print("player died")
end
end

0 comments on commit 2399ca4

Please sign in to comment.