mirror of
https://github.com/H-uru/korman.git
synced 2025-07-17 02:51:18 +00:00
Add plFollowMod.
This commit is contained in:
@ -171,3 +171,57 @@ class PlasmaViewFaceMod(PlasmaModifierProperties):
|
||||
@property
|
||||
def requires_actor(self):
|
||||
return True
|
||||
|
||||
class PlasmaFollowMod(PlasmaModifierProperties):
|
||||
pl_id = "followmod"
|
||||
|
||||
bl_category = "Render"
|
||||
bl_label = "Follow"
|
||||
bl_description = "Follow the movement of the camera, player, or another object"
|
||||
|
||||
follow_mode = EnumProperty(name="Mode",
|
||||
description="Leader's movement to follow",
|
||||
items=[
|
||||
("kPositionX", "X Axis", "Follow the leader's X movements"),
|
||||
("kPositionY", "Y Axis", "Follow the leader's Y movements"),
|
||||
("kPositionZ", "Z Axis", "Follow the leader's Z movements"),
|
||||
("kRotate", "Rotation", "Follow the leader's rotation movements"),
|
||||
],
|
||||
default={"kPositionX", "kPositionY", "kPositionZ"},
|
||||
options={"ENUM_FLAG"})
|
||||
|
||||
leader_type = EnumProperty(name="Leader Type",
|
||||
description="Leader to follow",
|
||||
items=[
|
||||
("kFollowCamera", "Camera", "Follow the camera"),
|
||||
("kFollowListener", "Listener", "Follow listeners"),
|
||||
("kFollowPlayer", "Player", "Follow the local player"),
|
||||
("kFollowObject", "Object", "Follow an object"),
|
||||
])
|
||||
|
||||
leader_object = StringProperty(name="Leader Object",
|
||||
description="Object to follow")
|
||||
|
||||
def export(self, exporter, bo, so):
|
||||
fm = exporter.mgr.find_create_object(plFollowMod, so=so, name=self.key_name)
|
||||
|
||||
fm.mode = 0
|
||||
for flag in (getattr(plFollowMod, mode) for mode in self.follow_mode):
|
||||
fm.mode |= flag
|
||||
|
||||
fm.leaderType = getattr(plFollowMod, self.leader_type)
|
||||
if self.leader_type == "kFollowObject":
|
||||
# If this object is following another object, make sure that the
|
||||
# leader has been selected and is a valid SO.
|
||||
if self.leader_object:
|
||||
leader_obj = bpy.data.objects.get(self.leader_object, None)
|
||||
if leader_obj is None:
|
||||
raise ExportError("'{}': Follow's leader object is invalid".format(self.key_name))
|
||||
else:
|
||||
fm.leader = exporter.mgr.find_create_key(plSceneObject, bl=leader_obj)
|
||||
else:
|
||||
raise ExportError("'{}': Follow's leader object must be selected".format(self.key_name))
|
||||
|
||||
@property
|
||||
def requires_actor(self):
|
||||
return True
|
||||
|
@ -55,3 +55,9 @@ def viewfacemod(modifier, layout, context):
|
||||
col = split.column()
|
||||
col.enabled = modifier.offset
|
||||
col.prop(modifier, "offset_coord")
|
||||
|
||||
def followmod(modifier, layout, context):
|
||||
layout.row().prop(modifier, "follow_mode", expand=True)
|
||||
layout.prop(modifier, "leader_type")
|
||||
if modifier.leader_type == "kFollowObject":
|
||||
layout.prop_search(modifier, "leader_object", bpy.data, "objects", icon="OUTLINER_OB_MESH")
|
||||
|
Reference in New Issue
Block a user