Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Rozelette committed Sep 12, 2024
1 parent be41147 commit 5516390
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 3 deletions.
29 changes: 28 additions & 1 deletion soh/soh/PyZelda.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@ static PyMethodDef PyZeldaImplMethods[] = {
METHOD_ENTRY(SetActorScaleY, "Test"),
METHOD_ENTRY(SetActorScaleZ, "Test"),
METHOD_ENTRY(SetActorScale, "Test"),
// ActorShape
METHOD_ENTRY(GetActorShape, "Test"),
METHOD_ENTRY(ActorShape_Init, "Test"),
METHOD_ENTRY(ActorShape_InitCircle, "Test"),
METHOD_ENTRY(ActorShape_SetShadowAlpha, "Test"),
// TODO once velocity and speedXY are figured out, add them
METHOD_ENTRY_NAME(GetInstanceData<PyObject>, "GetInstanceData", "Test"),
// Player
Expand All @@ -143,9 +148,31 @@ static PyMethodDef PyZeldaImplMethods[] = {
METHOD_ENTRY(SetPlayerIvanFloating, "Test"),
METHOD_ENTRY(GetPlayerIvanDamageMultiplier, "Test"),
METHOD_ENTRY(SetPlayerIvanDamageMultiplier, "Test"),
// Collider
// Base
METHOD_ENTRY(Collider_GetOcFlags1, "Test"),
METHOD_ENTRY(Collider_SetOcFlags1, "Test"),
METHOD_ENTRY(Collider_TouchSetDamage, "Test"),
// Cylinder
METHOD_ENTRY(Collider_AllocCylinder, "Test"),
METHOD_ENTRY(Collider_DeallocCylinder, "Test"),
METHOD_ENTRY(Collider_InitCylinder, "Test"),
METHOD_ENTRY(Collider_DestroyCylinder, "Test"),
METHOD_ENTRY(Collider_CylinderGetInfo, "Test"),
METHOD_ENTRY(Collider_UpdateCylinder, "Test"),
// Lights
METHOD_ENTRY(Lights_AllocInfo, "Test"),
METHOD_ENTRY(Lights_DeallocInfo, "Test"),
METHOD_ENTRY(Lights_PointSetInfo, "Test"),
METHOD_ENTRY(Lights_PointGlowSetInfo, "Test"),
METHOD_ENTRY(Lights_PointNoGlowSetInfo, "Test"),
METHOD_ENTRY(Lights_PointSetColorAndRadius, "Test"),
METHOD_ENTRY(Lights_DirectionalSetInfo, "Test"),
METHOD_ENTRY(LightContext_InsertLight, "Test"),
METHOD_ENTRY(LightContext_RemoveLight, "Test"),
// Temp
METHOD_ENTRY(DrawTemp, "Test"),
// Actor Instance Data
// Actor Instance Data TODO??
{NULL, NULL, 0, NULL}
};

Expand Down
114 changes: 113 additions & 1 deletion soh/soh/PyZelda.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import PyZeldaImpl
import ctypes

class Actor:
def __init__(self, pointer, with_data=True):
Expand Down Expand Up @@ -31,11 +32,122 @@ def scale(self, new_scale):
def draw(self, play):
PyZeldaImpl.DrawTemp(play, self._pointer)

# TODO player

class Vec3s:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z

def get_player(play):
return Actor(PyZeldaImpl.GetPlayer(play), with_data=False)

def actor_function(func):
def _wrapped_func(actor, play):
py_actor = Actor(actor)
func(py_actor, play)
return _wrapped_func
return _wrapped_func

class Vec3s(ctypes.Structure):
_fields_ = [("x", c_short),
("y", c_short),
("z", c_short)]

# TODO convert pointer to Vec3s

class Vec3s_wrapper:
def __init__(self, data, x_get, x_set, y_get, y_set, z_get, z_set, all_get, all_set):
self._x_get = x_get
self._x_set = x_set
self._y_get = y_get
self._y_set = y_set
self._z_get = z_get
self._z_set = z_set
self._all_get = all_get
self._all_set = all_set
self._data = data

@property
def x(self):
return x_get(self._data)

@x.setter
def x(self, value):
x_set(self._data, value)

@property
def y(self):
return y_get(self._data)

@y.setter
def y(self, value):
y_set(self._data, value)

@property
def z(self):
return z_get(self._data)

@z.setter
def z(self, value):
z_set(self._data, value)

@property
def all(self):
return all_get(self._data) # TODO from pointer

@all.setter
def all(self, value):
all_set(self._data, value[0], value[1], value[2])

def __getitem__(self, key):
if key == 0:
return self.x
elif key == 1:
return self.y
elif key == 2:
return self.z

def __setitem__(self, key, value):
if key == 0:
self.x = value
elif key == 1:
self.y = value
elif key == 2:
self.z = value

def get(self):
return Vec3s(self.x, self.y, self.z)

class Actor:
def __init__(self):
self._pos = Vec3s_wrapper(self, PyZeldaImpl.GetActorPosX, PyZeldaImpl.SetActorPosX,
PyZeldaImpl.GetActorPosY, PyZeldaImpl.SetActorPosY,
PyZeldaImpl.GetActorPosZ, PyZeldaImpl.SetActorPosZ,
PyZeldaImpl.GetActorPos, PyZeldaImpl.SetActorPos)
self._scale = Vec3s_wrapper(self, PyZeldaImpl.GetActorScaleX, PyZeldaImpl.SetActorScaleX,
PyZeldaImpl.GetActorScaleY, PyZeldaImpl.SetActorScaleY,
PyZeldaImpl.GetActorScaleZ, PyZeldaImpl.SetActorScaleZ,
PyZeldaImpl.GetActorScale, PyZeldaImpl.SetActorScale)

@property
def pos(self):
return self._pos

@pos.setter
def pos(self, value):
self._pos.all = value

@property
def scale(self):
return self._scale

@scale.setter
def scale(self, value):
self._scale.all = value


actor = Actor()
actor.pos.x = 0
actor.pos[0] = 0
actor.pos = [1, 2, 3]
4 changes: 3 additions & 1 deletion soh/soh/ScriptInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

namespace ScriptInterface {

// TODO rename sections the Section_Func

//**************************
// Actor
//**************************
Expand Down Expand Up @@ -322,7 +324,7 @@ ColliderCylinder* Collider_AllocCylinder();
void Collider_DeallocCylinder(ColliderCylinder* cylinder);

void Collider_InitCylinder(ColliderCylinder* cylinder); // TODO pass in play?
void Collider_DestroyCylinder(ColliderCylinder* cylinder); // TODO pass in play?
void Collider_DestroyCylinder(ColliderCylinder* cylinder); // TODO pass in play? // TODO include?

Collider* Collider_CylinderGetBase(ColliderCylinder* cylinder);

Expand Down

0 comments on commit 5516390

Please sign in to comment.