Skip to content

Commit f342e9c

Browse files
committed
feat: add instance as symbol value
1 parent cd4facc commit f342e9c

3 files changed

Lines changed: 17 additions & 1 deletion

File tree

src/zenkit/_core.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
DLL: Final[CDLL] = CDLL(str(_PATH))
5555

5656
PathOrFileLike = Union[str, PathLike, "Read", bytes, bytearray, "VfsNode"]
57+
DaedalusSymbolValue = Union[float, int, str, "DaedalusInstance", None]
5758

5859

5960
class GameVersion(IntEnum):

src/zenkit/daedalus/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,12 @@
4444
DaedalusInstanceType.SOUND_EFFECT: SoundEffectInstance,
4545
DaedalusInstanceType.SOUND_SYSTEM: SoundSystemInstance,
4646
}
47+
48+
_CLASS_TYPES = {
49+
"C_NPC": DaedalusInstanceType.NPC,
50+
"C_MISSION": DaedalusInstanceType.MISSION,
51+
"C_ITEM": DaedalusInstanceType.ITEM,
52+
"C_INFO": DaedalusInstanceType.INFO,
53+
"C_ITEMREACT": DaedalusInstanceType.ITEM_REACT,
54+
"C_FOCUS": DaedalusInstanceType.FOCUS,
55+
}

src/zenkit/daedalus_script.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
from typing import ClassVar
2121

2222
from zenkit import _native
23+
from zenkit.daedalus import _CLASS_TYPES
2324
from zenkit._core import DLL
2425
from zenkit._core import PathOrFileLike
26+
from zenkit._core import DaedalusSymbolValue
2527
from zenkit._native import ZkPointer
2628
from zenkit._native import ZkString
2729
from zenkit.daedalus.base import DaedalusInstance
@@ -199,13 +201,17 @@ def return_type(self) -> DaedalusDataType:
199201
return DaedalusDataType(DLL.ZkDaedalusSymbol_getReturnType(self._handle))
200202

201203
@property
202-
def value(self) -> float | int | str | None:
204+
def value(self) -> DaedalusSymbolValue:
203205
if self.type == DaedalusDataType.FLOAT:
204206
return self.get_float()
205207
if self.type == DaedalusDataType.INT:
206208
return self.get_int()
207209
if self.type == DaedalusDataType.STRING:
208210
return self.get_string()
211+
if self._keepalive.__class__.__name__ == "DaedalusVm" and self.type == DaedalusDataType.INSTANCE:
212+
class_sym = self.get_parent_as_symbol(find_root=True)
213+
if class_sym: # Instances always have parent symbols, except for .PAR instances in functions...
214+
return self._keepalive.init_instance(self, _CLASS_TYPES[class_sym.name])
209215
return None
210216

211217
def __repr__(self) -> str:

0 commit comments

Comments
 (0)