Skip to content

Commit 0bfedf0

Browse files
committed
Creating type stubs for legacy patches
This is better than putting all patched classes into __init__.pyi, and may be worth it given the backwards-compatible immutability of the legacy patch.
1 parent aaa5645 commit 0bfedf0

File tree

9 files changed

+267
-60
lines changed

9 files changed

+267
-60
lines changed

UnityPy/classes/generated.py

+1-60
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from __future__ import annotations
33

44
from abc import ABC
5-
from typing import List, Optional, Tuple, TypeVar, Union, TYPE_CHECKING
5+
from typing import List, Optional, Tuple, TypeVar, Union
66

77
from attrs import define as attrs_define
88

@@ -2041,10 +2041,6 @@ class Pipeline(Component):
20412041
class Renderer(Component):
20422042
m_GameObject: PPtr[GameObject]
20432043

2044-
if TYPE_CHECKING:
2045-
from .legacy_patch.Renderer import export as _export
2046-
export = _export
2047-
20482044

20492045
@unitypy_define
20502046
class BillboardRenderer(Renderer):
@@ -2748,32 +2744,6 @@ class GameObject(EditorExtension):
27482744
m_Name: str
27492745
m_Tag: int
27502746

2751-
if TYPE_CHECKING:
2752-
from .legacy_patch.GameObject import (
2753-
_GameObject_Components, _GameObject_GetComponent
2754-
)
2755-
from ..enums import ClassIDType
2756-
2757-
m_Components = property(_GameObject_Components)
2758-
m_Animator = property(
2759-
lambda self: _GameObject_GetComponent(self, ClassIDType.Animator)
2760-
)
2761-
m_Animation = property(
2762-
lambda self: _GameObject_GetComponent(self, ClassIDType.Animation)
2763-
)
2764-
m_Transform = property(
2765-
lambda self: _GameObject_GetComponent(self, ClassIDType.Transform)
2766-
)
2767-
m_MeshRenderer = property(
2768-
lambda self: _GameObject_GetComponent(self, ClassIDType.MeshRenderer)
2769-
)
2770-
m_SkinnedMeshRenderer = property(
2771-
lambda self: _GameObject_GetComponent(self, ClassIDType.SkinnedMeshRenderer)
2772-
)
2773-
m_MeshFilter = property(
2774-
lambda self: _GameObject_GetComponent(self, ClassIDType.MeshFilter)
2775-
)
2776-
27772747

27782748
@unitypy_define
27792749
class NamedObject(EditorExtension, ABC):
@@ -4084,11 +4054,6 @@ class AudioClip(SampleClip):
40844054
m_Type: Optional[int] = None
40854055
m_UseHardware: Optional[bool] = None
40864056

4087-
if TYPE_CHECKING:
4088-
from .legacy_patch.AudioClip import _AudioClip_extension, _AudioClip_samples
4089-
extension = property(_AudioClip_extension)
4090-
samples = property(_AudioClip_samples)
4091-
40924057

40934058
@unitypy_define
40944059
class Avatar(NamedObject):
@@ -4486,10 +4451,6 @@ class Mesh(NamedObject):
44864451
m_VertexData: Optional[VertexData] = None
44874452
m_Vertices: Optional[List[Vector3f]] = None
44884453

4489-
if TYPE_CHECKING:
4490-
from .legacy_patch.Mesh import _Mesh_export
4491-
export = _Mesh_export
4492-
44934454

44944455
@unitypy_define
44954456
class Motion(NamedObject, ABC):
@@ -4696,10 +4657,6 @@ class Shader(NamedObject):
46964657
platforms: Optional[List[int]] = None
46974658
stageCounts: Optional[List[int]] = None
46984659

4699-
if TYPE_CHECKING:
4700-
from .legacy_patch.Shader import _Shader_export
4701-
export = _Shader_export
4702-
47034660

47044661
@unitypy_define
47054662
class ShaderVariantCollection(NamedObject):
@@ -4734,10 +4691,6 @@ class Sprite(NamedObject):
47344691
m_ScriptableObjects: Optional[List[PPtr[MonoBehaviour]]] = None
47354692
m_SpriteAtlas: Optional[PPtr[SpriteAtlas]] = None
47364693

4737-
if TYPE_CHECKING:
4738-
from .legacy_patch.Sprite import _Sprite_image
4739-
image = property(_Sprite_image)
4740-
47414694

47424695
@unitypy_define
47434696
class SpriteAtlas(NamedObject):
@@ -5035,14 +4988,6 @@ class Texture2D(Texture):
50354988
m_StreamingMipmaps: Optional[bool] = None
50364989
m_StreamingMipmapsPriority: Optional[int] = None
50374990

5038-
if TYPE_CHECKING:
5039-
from .legacy_patch.Texture2D import (
5040-
_Texture2d_get_image, _Texture2D_get_image_data, _Texture2d_set_image
5041-
)
5042-
image = property(_Texture2d_get_image, _Texture2d_set_image)
5043-
set_image = _Texture2d_set_image
5044-
get_image_data = _Texture2D_get_image_data
5045-
50464991

50474992
@unitypy_define
50484993
class Cubemap(Texture2D):
@@ -5098,10 +5043,6 @@ class Texture2DArray(Texture):
50985043
m_StreamData: Optional[StreamingInfo] = None
50995044
m_UsageMode: Optional[int] = None
51005045

5101-
if TYPE_CHECKING:
5102-
from legacy_patch.Texture2DArray import _Texture2DArray_get_images
5103-
images = property(_Texture2DArray_get_images)
5104-
51055046

51065047
@unitypy_define
51075048
class Texture3D(Texture):
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from typing import List, Optional
2+
3+
from UnityPy.classes.generated import SampleClip, StreamedResource
4+
5+
def _AudioClip_extension(self: AudioClip) -> str: ...
6+
def _AudioClip_samples(self: AudioClip) -> dict: ...
7+
8+
class AudioClip(SampleClip):
9+
m_Name: str
10+
m_3D: Optional[bool] = None
11+
m_Ambisonic: Optional[bool] = None
12+
m_AudioData: Optional[List[int]] = None
13+
m_BitsPerSample: Optional[int] = None
14+
m_Channels: Optional[int] = None
15+
m_CompressionFormat: Optional[int] = None
16+
m_Format: Optional[int] = None
17+
m_Frequency: Optional[int] = None
18+
m_IsTrackerFormat: Optional[bool] = None
19+
m_Legacy3D: Optional[bool] = None
20+
m_Length: Optional[float] = None
21+
m_LoadInBackground: Optional[bool] = None
22+
m_LoadType: Optional[int] = None
23+
m_PreloadAudioData: Optional[bool] = None
24+
m_Resource: Optional[StreamedResource] = None
25+
m_Stream: Optional[int] = None
26+
m_SubsoundIndex: Optional[int] = None
27+
m_Type: Optional[int] = None
28+
m_UseHardware: Optional[bool] = None
29+
extension = property(_AudioClip_extension)
30+
samples = property(_AudioClip_samples)
31+
...
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from typing import List, Tuple, Union
2+
3+
from UnityPy.classes import Component, PPtr
4+
from UnityPy.classes.generated import ComponentPair, EditorExtension
5+
from UnityPy.enums import ClassIDType
6+
7+
def _GameObject_Components(self) -> List[PPtr[Component]]: ...
8+
def _GameObject_GetComponent(self, type: ClassIDType) -> Union[PPtr[Component], None]: ...
9+
10+
class GameObject(EditorExtension):
11+
m_Component: Union[List[ComponentPair], List[Tuple[int, PPtr[Component]]]]
12+
m_IsActive: Union[bool, int]
13+
m_Layer: int
14+
m_Name: str
15+
m_Tag: int
16+
m_Components = property(_GameObject_Components)
17+
m_Animator = property(
18+
lambda self: _GameObject_GetComponent(self, ClassIDType.Animator)
19+
)
20+
m_Animation = property(
21+
lambda self: _GameObject_GetComponent(self, ClassIDType.Animation)
22+
)
23+
m_Transform = property(
24+
lambda self: _GameObject_GetComponent(self, ClassIDType.Transform)
25+
)
26+
m_MeshRenderer = property(
27+
lambda self: _GameObject_GetComponent(self, ClassIDType.MeshRenderer)
28+
)
29+
m_SkinnedMeshRenderer = property(
30+
lambda self: _GameObject_GetComponent(self, ClassIDType.SkinnedMeshRenderer)
31+
)
32+
m_MeshFilter = property(
33+
lambda self: _GameObject_GetComponent(self, ClassIDType.MeshFilter)
34+
)
35+
...

UnityPy/classes/legacy_patch/Mesh.pyi

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from typing import List, Optional, Union
2+
3+
from UnityPy.classes.generated import (AABB, BlendShapeData, BoneInfluence,
4+
BoneWeights4, CompressedMesh,
5+
MeshBlendShape, MeshBlendShapeVertex,
6+
MinMaxAABB, NamedObject, StreamingInfo,
7+
SubMesh, VariableBoneCountWeights,
8+
VertexData)
9+
from UnityPy.classes.math import (ColorRGBA, Matrix4x4f, Vector2f, Vector3f,
10+
Vector4f)
11+
12+
def _Mesh_export(self: Mesh, format: str = "obj") -> str: ...
13+
14+
class Mesh(NamedObject):
15+
m_BindPose: List[Matrix4x4f]
16+
m_CompressedMesh: CompressedMesh
17+
m_IndexBuffer: List[int]
18+
m_LocalAABB: AABB
19+
m_MeshCompression: int
20+
m_MeshUsageFlags: int
21+
m_Name: str
22+
m_SubMeshes: List[SubMesh]
23+
m_BakedConvexCollisionMesh: Optional[List[int]] = None
24+
m_BakedTriangleCollisionMesh: Optional[List[int]] = None
25+
m_BoneNameHashes: Optional[List[int]] = None
26+
m_BonesAABB: Optional[List[MinMaxAABB]] = None
27+
m_CollisionTriangles: Optional[List[int]] = None
28+
m_CollisionVertexCount: Optional[int] = None
29+
m_Colors: Optional[List[ColorRGBA]] = None
30+
m_CookingOptions: Optional[int] = None
31+
m_IndexFormat: Optional[int] = None
32+
m_IsReadable: Optional[bool] = None
33+
m_KeepIndices: Optional[bool] = None
34+
m_KeepVertices: Optional[bool] = None
35+
m_MeshMetrics_0_: Optional[float] = None
36+
m_MeshMetrics_1_: Optional[float] = None
37+
m_Normals: Optional[List[Vector3f]] = None
38+
m_RootBoneNameHash: Optional[int] = None
39+
m_ShapeVertices: Optional[List[MeshBlendShapeVertex]] = None
40+
m_Shapes: Optional[Union[BlendShapeData, List[MeshBlendShape]]] = None
41+
m_Skin: Optional[Union[List[BoneInfluence], List[BoneWeights4]]] = None
42+
m_StreamCompression: Optional[int] = None
43+
m_StreamData: Optional[StreamingInfo] = None
44+
m_Tangents: Optional[List[Vector4f]] = None
45+
m_UV: Optional[List[Vector2f]] = None
46+
m_UV1: Optional[List[Vector2f]] = None
47+
m_Use16BitIndices: Optional[int] = None
48+
m_VariableBoneCountWeights: Optional[VariableBoneCountWeights] = None
49+
m_VertexData: Optional[VertexData] = None
50+
m_Vertices: Optional[List[Vector3f]] = None
51+
export = _Mesh_export
52+
...
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from UnityPy.classes import PPtr
2+
from UnityPy.classes.generated import Component
3+
from UnityPy.classes.legacy_patch import GameObject
4+
5+
6+
def export(self, export_dir: str) -> None: ...
7+
8+
_Renderer_export = export
9+
10+
class Renderer(Component):
11+
m_GameObject: PPtr[GameObject]
12+
export = _Renderer_export
13+
...
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from typing import List, Optional, Tuple, Union
2+
3+
from UnityPy.classes import PPtr
4+
from UnityPy.classes.generated import (GUID, NamedObject, SerializedShader,
5+
Texture)
6+
7+
def _Shader_export(self: Shader) -> str: ...
8+
9+
class Shader(NamedObject):
10+
m_Name: str
11+
compressedBlob: Optional[List[int]] = None
12+
compressedLengths: Optional[Union[List[int], List[List[int]]]] = None
13+
decompressedLengths: Optional[Union[List[int], List[List[int]]]] = None
14+
decompressedSize: Optional[int] = None
15+
m_AssetGUID: Optional[GUID] = None
16+
m_Dependencies: Optional[List[PPtr[Shader]]] = None
17+
m_NonModifiableTextures: Optional[List[Tuple[str, PPtr[Texture]]]] = None
18+
m_ParsedForm: Optional[SerializedShader] = None
19+
m_PathName: Optional[str] = None
20+
m_Script: Optional[str] = None
21+
m_ShaderIsBaked: Optional[bool] = None
22+
m_SubProgramBlob: Optional[List[int]] = None
23+
offsets: Optional[Union[List[int], List[List[int]]]] = None
24+
platforms: Optional[List[int]] = None
25+
stageCounts: Optional[List[int]] = None
26+
export = _Shader_export
27+
...
28+
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from typing import List, Optional, Tuple
2+
3+
from PIL.Image import Image
4+
5+
from UnityPy.classes import PPtr
6+
from UnityPy.classes.generated import (GUID, MonoBehaviour, NamedObject, Rectf,
7+
SpriteAtlas, SpriteBone,
8+
SpriteRenderData)
9+
from UnityPy.classes.math import Vector2f, Vector4f
10+
11+
def _Sprite_image(self: Sprite) -> Image: ...
12+
13+
class Sprite(NamedObject):
14+
m_Extrude: int
15+
m_Name: str
16+
m_Offset: Vector2f
17+
m_PixelsToUnits: float
18+
m_RD: SpriteRenderData
19+
m_Rect: Rectf
20+
m_AtlasTags: Optional[List[str]] = None
21+
m_Bones: Optional[List[SpriteBone]] = None
22+
m_Border: Optional[Vector4f] = None
23+
m_IsPolygon: Optional[bool] = None
24+
m_PhysicsShape: Optional[List[List[Vector2f]]] = None
25+
m_Pivot: Optional[Vector2f] = None
26+
m_RenderDataKey: Optional[Tuple[GUID, int]] = None
27+
m_ScriptableObjects: Optional[List[PPtr[MonoBehaviour]]] = None
28+
m_SpriteAtlas: Optional[PPtr[SpriteAtlas]] = None
29+
image = property(_Sprite_image)
30+
...
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from typing import BinaryIO, List, Optional, Union
2+
3+
from PIL.Image import Image
4+
5+
from UnityPy.classes.generated import GLTextureSettings, StreamingInfo, Texture
6+
7+
def _Texture2d_get_image(self: Texture2D) -> Image: ...
8+
def _Texture2d_set_image(
9+
self: Texture2D,
10+
img: Union[Image, str, BinaryIO],
11+
target_format: Optional[int] = None,
12+
mipmap_count: int = 1,
13+
) -> None: ...
14+
def _Texture2D_get_image_data(self: Texture2D) -> bytes: ...
15+
16+
class Texture2D(Texture):
17+
image_data: bytes
18+
m_CompleteImageSize: int
19+
m_Height: int
20+
m_ImageCount: int
21+
m_IsReadable: bool
22+
m_LightmapFormat: int
23+
m_Name: str
24+
m_TextureDimension: int
25+
m_TextureFormat: int
26+
m_TextureSettings: GLTextureSettings
27+
m_Width: int
28+
m_ColorSpace: Optional[int] = None
29+
m_DownscaleFallback: Optional[bool] = None
30+
m_ForcedFallbackFormat: Optional[int] = None
31+
m_IgnoreMasterTextureLimit: Optional[bool] = None
32+
m_IgnoreMipmapLimit: Optional[bool] = None
33+
m_IsAlphaChannelOptional: Optional[bool] = None
34+
m_IsPreProcessed: Optional[bool] = None
35+
m_MipCount: Optional[int] = None
36+
m_MipMap: Optional[bool] = None
37+
m_MipmapLimitGroupName: Optional[str] = None
38+
m_MipsStripped: Optional[int] = None
39+
m_PlatformBlob: Optional[List[int]] = None
40+
m_ReadAllowed: Optional[bool] = None
41+
m_StreamData: Optional[StreamingInfo] = None
42+
m_StreamingMipmaps: Optional[bool] = None
43+
m_StreamingMipmapsPriority: Optional[int] = None
44+
image = property(_Texture2d_get_image, _Texture2d_set_image)
45+
set_image = _Texture2d_set_image
46+
get_image_data = _Texture2D_get_image_data
47+
...
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from typing import List, Optional
2+
3+
from PIL.Image import Image
4+
5+
from UnityPy.classes.generated import GLTextureSettings, StreamingInfo, Texture
6+
7+
def _Texture2DArray_get_images(self: Texture2DArray) -> List[Image]: ...
8+
9+
class Texture2DArray(Texture):
10+
image_data: bytes
11+
m_ColorSpace: int
12+
m_DataSize: int
13+
m_Depth: int
14+
m_Format: int
15+
m_Height: int
16+
m_IsReadable: bool
17+
m_MipCount: int
18+
m_Name: str
19+
m_TextureSettings: GLTextureSettings
20+
m_Width: int
21+
m_DownscaleFallback: Optional[bool] = None
22+
m_ForcedFallbackFormat: Optional[int] = None
23+
m_IgnoreMipmapLimit: Optional[bool] = None
24+
m_IsAlphaChannelOptional: Optional[bool] = None
25+
m_MipmapLimitGroupName: Optional[str] = None
26+
m_MipsStripped: Optional[int] = None
27+
m_StreamData: Optional[StreamingInfo] = None
28+
m_UsageMode: Optional[int] = None
29+
images = property(_Texture2DArray_get_images)
30+
...

0 commit comments

Comments
 (0)