Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | WilliamQiufeng |
I’m setting textures multithreadedly. Here’s SetTextures():
public void SetTextures() { Texture = _hitObjectTextures[Parent.Parent.InputRetriever.Keys][Key] ?? Texture; Offset = new Vector2(-Texture.GetWidth() / 2f, -Texture.GetHeight()); if (Note.IsLongNote) { HoldEnd.Texture = _holdEndTextures[Parent.Parent.InputRetriever.Keys][Key] ?? HoldEnd.Texture; HoldEnd.Offset = new Vector2(-HoldEnd.Texture.GetWidth() / 2f, -HoldEnd.Texture.GetHeight()); var holdEndPosition = When(Note.StartTime) - When(Note.EndTime); HoldEnd.Position = holdEndPosition; HoldEnd.Visible = true; HoldBody.Texture = _holdBodyTextures[Parent.Parent.InputRetriever.Keys][Key] ?? HoldBody.Texture; HoldBody.Offset = new Vector2(-HoldBody.Texture.GetWidth() / 2f, -HoldBody.Texture.GetHeight()); HoldBody.Visible = true; HoldBody.Scale = new Vector2(1, Mathf.Abs(holdEndPosition.y) / HoldBody.Texture.GetHeight()); } }
Full error log:
E 0:00:05.802 _disconnect: Disconnecting nonexistent signal 'changed', slot: 3430:_texture_changed.
<C++ Error> Condition "!s->slot_map.has(target)" is true.
<C++ Source> core/object.cpp:1538 @ _disconnect()
<Stack Trace> :0 @ void Godot.NativeCalls.godot_icall_1_24(IntPtr , IntPtr , IntPtr )()
Sprite.cs:279 @ void Godot.Sprite.SetTexture(Godot.Texture )()
Sprite.cs:28 @ void Godot.Sprite.set_Texture(Godot.Texture )()
NoteNode.cs:37 @ void Quadrecep.GameMode.Keys.NoteNode.SetTextures()()
Playfield.cs:135 @ void Quadrecep.GameMode.Keys.Playfield.GenerateNoteNodesForLane(System.Collections.Generic.List`1[Quadrecep.GameMode.Keys.Map.NoteObject] , System.Collections.Generic.List`1[Quadrecep.Map.ScrollVelocity] , Int32 )()
Playfield.cs:84 @ void Quadrecep.GameMode.Keys.Playfield+<>c__DisplayClass27_1.<GenerateNoteNodesAsync>b__1()()
:0 @ void System.Threading.Tasks.Task.InnerInvoke()()
:0 @ void System.Threading.Tasks.Task.Execute()()
:0 @ void System.Threading.Tasks.Task.ExecutionContextCallback(System.Object )()
:0 @ void System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext , System.Threading.ContextCallback , System.Object , Boolean )()
:0 @ void System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext , System.Threading.ContextCallback , System.Object , Boolean )()
:0 @ void System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task& )()
:0 @ Boolean System.Threading.Tasks.Task.ExecuteEntry(Boolean )()
:0 @ void System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()()
:0 @ Boolean System.Threading.ThreadPoolWorkQueue.Dispatch()()
:0 @ Boolean System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()()