mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 07:03:16 +00:00
make throwing look slightly less ugly, fix an edge case that causes items to never appear until restarting
This commit is contained in:
parent
a60a1f7aff
commit
623dd73fe4
4 changed files with 68 additions and 53 deletions
|
@ -355,9 +355,6 @@ end
|
||||||
function inventory_helper.set_item_data(item_data, player_data)
|
function inventory_helper.set_item_data(item_data, player_data)
|
||||||
local player = player_data.entity
|
local player = player_data.entity
|
||||||
if player == nil or not EntityGetIsAlive(player) then
|
if player == nil or not EntityGetIsAlive(player) then
|
||||||
if player ~= nil then
|
|
||||||
GamePrint("Skip set_item_data, player ".. player_data.name .. " " .. player_data.entity .. " is dead")
|
|
||||||
end
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -419,7 +416,13 @@ function inventory_helper.set_item_data(item_data, player_data)
|
||||||
if (itemInfo.active) then
|
if (itemInfo.active) then
|
||||||
active_item_entity = item_entity
|
active_item_entity = item_entity
|
||||||
end
|
end
|
||||||
|
EntityAddComponent(item_entity, "LuaComponent", {
|
||||||
|
script_throw_item = "mods/quant.ew/files/resource/cbs/throw_item.lua",
|
||||||
|
})
|
||||||
|
local notify = EntityGetFirstComponentIncludingDisabled(item_entity, "LuaComponent", "ew_notify_component")
|
||||||
|
if notify ~= nil then
|
||||||
|
EntityRemoveComponent(item_entity, notify)
|
||||||
|
end
|
||||||
--print("Deserialized wand #"..tostring(k).." - Active? "..tostring(wandInfo.active))
|
--print("Deserialized wand #"..tostring(k).." - Active? "..tostring(wandInfo.active))
|
||||||
|
|
||||||
-- entity.SetVariable(item_entity, "arena_entity_id", itemInfo.id)
|
-- entity.SetVariable(item_entity, "arena_entity_id", itemInfo.id)
|
||||||
|
|
|
@ -401,7 +401,6 @@ function util.get_phys_info(entity, kill)
|
||||||
if phys_component ~= nil and phys_component ~= 0 then
|
if phys_component ~= nil and phys_component ~= 0 then
|
||||||
local ret, info = pcall(serialize_phys_component, phys_component)
|
local ret, info = pcall(serialize_phys_component, phys_component)
|
||||||
if not ret and kill then
|
if not ret and kill then
|
||||||
GamePrint("Physics component has no body, deleting entity")
|
|
||||||
EntityKill(entity)
|
EntityKill(entity)
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
@ -415,7 +414,6 @@ function util.get_phys_info(entity, kill)
|
||||||
if initialized then
|
if initialized then
|
||||||
local ret, info = pcall(serialize_phys_component, phys_component)
|
local ret, info = pcall(serialize_phys_component, phys_component)
|
||||||
if not ret and kill then
|
if not ret and kill then
|
||||||
GamePrint("Physics component has no body, deleting entity")
|
|
||||||
EntityKill(entity)
|
EntityKill(entity)
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
5
quant.ew/files/resource/cbs/throw_item.lua
Normal file
5
quant.ew/files/resource/cbs/throw_item.lua
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
function throw_item()
|
||||||
|
local ent = GetUpdatedEntityID()
|
||||||
|
EntityRemoveComponent(ent, GetUpdatedComponentID())
|
||||||
|
EntityKill(ent)
|
||||||
|
end
|
|
@ -167,54 +167,56 @@ end
|
||||||
|
|
||||||
local wait_for_gid = {}
|
local wait_for_gid = {}
|
||||||
|
|
||||||
|
local function make_global(item, give_authority_to)
|
||||||
|
if not EntityGetIsAlive(item) then
|
||||||
|
print("Thrown item vanished before we could send it")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
item_sync.ensure_notify_component(item)
|
||||||
|
local gid_component = EntityGetFirstComponentIncludingDisabled(item, "VariableStorageComponent",
|
||||||
|
"ew_global_item_id")
|
||||||
|
local gid
|
||||||
|
if gid_component == nil then
|
||||||
|
gid = allocate_global_id()
|
||||||
|
if give_authority_to ~= nil then
|
||||||
|
gid = give_authority_to..":"..gid
|
||||||
|
end
|
||||||
|
EntityAddComponent2(item, "VariableStorageComponent", {
|
||||||
|
_tags = "enabled_in_world,enabled_in_hand,enabled_in_inventory,ew_global_item_id",
|
||||||
|
value_string = gid,
|
||||||
|
})
|
||||||
|
else
|
||||||
|
gid = ComponentGetValue2(gid_component, "value_string")
|
||||||
|
end
|
||||||
|
--local vel = EntityGetFirstComponentIncludingDisabled(item, "VelocityComponent")
|
||||||
|
--if vel then
|
||||||
|
-- local vx, vy = ComponentGetValue2(vel, "mVelocity")
|
||||||
|
--end
|
||||||
|
|
||||||
|
local item_data = inventory_helper.serialize_single_item(item)
|
||||||
|
item_data.gid = gid
|
||||||
|
|
||||||
|
local _, _, has_hp = util.get_ent_health(item)
|
||||||
|
if has_hp then
|
||||||
|
util.ensure_component_present(item, "LuaComponent", "ew_item_death_notify", {
|
||||||
|
script_death = "mods/quant.ew/files/resource/cbs/item_death_notify.lua"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
ctx.item_prevent_localize[gid] = false
|
||||||
|
rpc.item_globalize(item_data)
|
||||||
|
end
|
||||||
|
|
||||||
function item_sync.make_item_global(item, instant, give_authority_to)
|
function item_sync.make_item_global(item, instant, give_authority_to)
|
||||||
EntityAddTag(item, "ew_global_item")
|
EntityAddTag(item, "ew_global_item")
|
||||||
async(function()
|
if instant then
|
||||||
if not instant then
|
make_global(item, give_authority_to)
|
||||||
|
else
|
||||||
|
async(function()
|
||||||
wait(1) -- Wait 1 frame so that game sets proper velocity.
|
wait(1) -- Wait 1 frame so that game sets proper velocity.
|
||||||
end
|
make_global(item, give_authority_to)
|
||||||
if not EntityGetIsAlive(item) then
|
end)
|
||||||
print("Thrown item vanished before we could send it")
|
end
|
||||||
return
|
|
||||||
end
|
|
||||||
item_sync.ensure_notify_component(item)
|
|
||||||
local gid_component = EntityGetFirstComponentIncludingDisabled(item, "VariableStorageComponent",
|
|
||||||
"ew_global_item_id")
|
|
||||||
local gid
|
|
||||||
if gid_component == nil then
|
|
||||||
gid = allocate_global_id()
|
|
||||||
if give_authority_to ~= nil then
|
|
||||||
gid = give_authority_to..":"..gid
|
|
||||||
end
|
|
||||||
EntityAddComponent2(item, "VariableStorageComponent", {
|
|
||||||
_tags = "enabled_in_world,enabled_in_hand,enabled_in_inventory,ew_global_item_id",
|
|
||||||
value_string = gid,
|
|
||||||
})
|
|
||||||
else
|
|
||||||
gid = ComponentGetValue2(gid_component, "value_string")
|
|
||||||
end
|
|
||||||
--local vel = EntityGetFirstComponentIncludingDisabled(item, "VelocityComponent")
|
|
||||||
--if vel then
|
|
||||||
-- local vx, vy = ComponentGetValue2(vel, "mVelocity")
|
|
||||||
--end
|
|
||||||
|
|
||||||
local item_data = inventory_helper.serialize_single_item(item)
|
|
||||||
item_data.gid = gid
|
|
||||||
|
|
||||||
local hp, max_hp, has_hp = util.get_ent_health(item)
|
|
||||||
if has_hp then
|
|
||||||
util.ensure_component_present(item, "LuaComponent", "ew_item_death_notify", {
|
|
||||||
script_death = "mods/quant.ew/files/resource/cbs/item_death_notify.lua"
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
if give_authority_to ~= nil then
|
|
||||||
local itemcom = EntityGetFirstComponentIncludingDisabled(item, "ItemComponent")
|
|
||||||
end
|
|
||||||
|
|
||||||
ctx.item_prevent_localize[gid] = false
|
|
||||||
rpc.item_globalize(item_data)
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_global_ent(key)
|
local function get_global_ent(key)
|
||||||
|
@ -356,7 +358,7 @@ function item_sync.on_world_update_client()
|
||||||
mark_in_inventory(my_player)
|
mark_in_inventory(my_player)
|
||||||
end
|
end
|
||||||
local thrown_item = get_global_ent("ew_thrown")
|
local thrown_item = get_global_ent("ew_thrown")
|
||||||
if thrown_item ~= nil and not EntityHasTag(thrown_item, "ew_client_item") then
|
if thrown_item ~= nil then
|
||||||
item_sync.make_item_global(thrown_item)
|
item_sync.make_item_global(thrown_item)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -399,6 +401,13 @@ function item_sync.on_world_update()
|
||||||
elseif GameGetFrameNum() % 5 == 3 then
|
elseif GameGetFrameNum() % 5 == 3 then
|
||||||
send_item_positions(false)
|
send_item_positions(false)
|
||||||
end
|
end
|
||||||
|
if GameGetFrameNum() % 30 == 23 then
|
||||||
|
for gid, num in pairs(wait_for_gid) do
|
||||||
|
if num < GameGetFrameNum() then
|
||||||
|
wait_for_gid[gid] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function item_sync.on_should_send_updates()
|
function item_sync.on_should_send_updates()
|
||||||
|
@ -566,7 +575,7 @@ function rpc.update_positions(position_data, all)
|
||||||
util.log("Requesting again "..gid)
|
util.log("Requesting again "..gid)
|
||||||
if wait_for_gid[gid] == nil then
|
if wait_for_gid[gid] == nil then
|
||||||
rpc.request_send_again(gid)
|
rpc.request_send_again(gid)
|
||||||
wait_for_gid[gid] = true
|
wait_for_gid[gid] = GameGetFrameNum() + 120
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue