Compare commits

...

4 Commits

Author SHA1 Message Date
NewSoupVi
f6ffff674c Merge branch 'main' into NewSoupVi-patch-20 2025-04-05 03:42:23 +02:00
NewSoupVi
7b21121df1 Update AutoWorld.py 2024-09-21 23:00:46 +02:00
NewSoupVi
0fdc481082 Verbose af 2024-09-21 18:12:35 +02:00
NewSoupVi
92ca11b729 Core: Prevent people from using LogicMixin incorrectly
There's a world that ran into some issues because it defined its custom LogicMixin variables at the class level.

This caused "instance bleed" when new CollectionState objects were created.

I don't think there is ever a reason to have a non-function class variable on LogicMixin without also having `init_mixin`, so this asserts that this is the case.

Tested:
Doesn't fail any current worlds
Correctly fails the world in question

Also, not gonna call out that world because it was literally my fault for explaining it to them wrong :D
2024-09-21 18:02:24 +02:00

View File

@@ -110,6 +110,16 @@ class AutoLogicRegister(type):
elif not item_name.startswith("__"):
if hasattr(CollectionState, item_name):
raise Exception(f"Name conflict on Logic Mixin {name} trying to overwrite {item_name}")
assert callable(function) or "init_mixin" in dct, (
f"{name} defined class variable {item_name} without also having init_mixin.\n\n"
"Explanation:\n"
"Class variables that will be mutated need to be inintialized as instance variables in init_mixin.\n"
"If your LogicMixin variables aren't actually mutable / you don't intend to mutate them, "
"there is no point in using LogixMixin.\n"
"LogicMixin exists to track custom state variables that change when items are collected/removed."
)
setattr(CollectionState, item_name, function)
return new_class