myspace / CommonLua /Editor /AppearanceEditor.lua
sirnii's picture
Upload 1816 files
b6a38d7 verified
raw
history blame
6.91 kB
DefineClass.CharacterEntity =
{
__parents = {"CObject"},
flags = {gofRealTimeAnim = true},
}
DefineClass.CharacterBody = { __parents = {"CharacterEntity"} }
DefineClass.CharacterBodyMale = { __parents = {"CharacterBody"} }
DefineClass.CharacterBodyFemale = { __parents = {"CharacterBody"} }
DefineClass.CharacterHead = { __parents = {"CharacterEntity"} }
DefineClass.CharacterHeadMale = { __parents = {"CharacterHead"} }
DefineClass.CharacterHeadFemale = { __parents = {"CharacterHead"} }
DefineClass.CharacterPants = { __parents = {"CharacterEntity"} }
DefineClass.CharacterPantsMale = { __parents = {"CharacterPants"} }
DefineClass.CharacterPantsFemale = { __parents = {"CharacterPants"} }
DefineClass.CharacterShirts = { __parents = {"CharacterEntity"} }
DefineClass.CharacterShirtsMale = { __parents = {"CharacterShirts"} }
DefineClass.CharacterShirtsFemale = { __parents = {"CharacterShirts"} }
DefineClass.CharacterArmor = { __parents = {"CharacterEntity"} }
DefineClass.CharacterArmorMale = { __parents = {"CharacterArmor"} }
DefineClass.CharacterArmorFemale = { __parents = {"CharacterArmor"} }
DefineClass.CharacterHair = { __parents = {"CharacterEntity"} }
DefineClass.CharacterHairMale = { __parents = {"CharacterHair"} }
DefineClass.CharacterHairFemale = { __parents = {"CharacterHair"} }
DefineClass.CharacterHat = { __parents = {"CharacterEntity"} }
DefineClass.CharacterChest = { __parents = {"CharacterEntity"} }
DefineClass.CharacterChestMale = { __parents = {"CharacterChest"} }
DefineClass.CharacterChestFemale = { __parents = {"CharacterChest"} }
DefineClass.CharacterHip = { __parents = {"CharacterEntity"} }
DefineClass.CharacterHipMale = { __parents = {"CharacterHip"} }
DefineClass.CharacterHipFemale = { __parents = {"CharacterHip"} }
local function GetGender(appearance)
return IsKindOf(g_Classes[appearance.Body], "CharacterBodyMale") and "Male" or "Female"
end
local function GetEntityClassInherits(entity_class, skip_none, filter)
local inherits = ClassLeafDescendantsList(entity_class, function(class)
return not table.find(filter, class)
end)
if not skip_none then
table.insert(inherits, 1, "")
end
return inherits
end
function GetCharacterBodyComboItems()
return GetEntityClassInherits("CharacterBody", "skip none", {"CharacterBodyMale", "CharacterBodyFemale"})
end
function GetCharacterHeadComboItems(appearance)
return IsKindOf(appearance, "AppearancePreset") and GetEntityClassInherits("CharacterHead" .. GetGender(appearance)) or {}
end
function GetCharacterPantsComboItems(appearance)
return IsKindOf(appearance, "AppearancePreset") and GetEntityClassInherits("CharacterPants" .. GetGender(appearance)) or {}
end
function GetCharacterShirtComboItems(appearance)
return IsKindOf(appearance, "AppearancePreset") and GetEntityClassInherits("CharacterShirts" .. GetGender(appearance)) or {}
end
function GetCharacterArmorComboItems(appearance)
return IsKindOf(appearance, "AppearancePreset") and GetEntityClassInherits("CharacterArmor" .. GetGender(appearance)) or {}
end
function GetCharacterHairComboItems(appearance)
return IsKindOf(appearance, "AppearancePreset") and GetEntityClassInherits("CharacterHair" .. GetGender(appearance)) or {}
end
function GetCharacterHatComboItems()
return GetEntityClassInherits("CharacterHat")
end
function GetCharacterChestComboItems(appearance)
return IsKindOf(appearance, "AppearancePreset") and GetEntityClassInherits("CharacterChest" .. GetGender(appearance)) or {}
end
function GetCharacterHipComboItems(appearance)
return IsKindOf(appearance, "AppearancePreset") and GetEntityClassInherits("CharacterHip" .. GetGender(appearance)) or {}
end
if FirstLoad then
AppearanceEditor = false
end
function OpenAppearanceEditor(appearance)
CreateRealTimeThread(function(appearance)
if not AppearanceEditor or not IsValid(AppearanceEditor) then
AppearanceEditor = OpenPresetEditor("AppearancePreset") or false
end
end, appearance)
end
function OnMsg.GedOpened(ged_id)
local gedApp = GedConnections[ged_id]
if gedApp and gedApp.app_template == "PresetEditor" and gedApp.context and gedApp.context.PresetClass == "AppearancePreset" then
AppearanceEditor = gedApp
end
end
function OnMsg.GedClosing(ged_id)
if AppearanceEditor and AppearanceEditor.ged_id == ged_id then
if cameraMax.IsActive() then
cameraTac.Activate(1)
end
AppearanceEditor = false
end
end
function CloseAppearanceEditor()
if AppearanceEditor then
AppearanceEditor:Send("rfnApp", "Exit")
end
end
local function UpdateAnimationMomentsEditor(appearance)
local character = GetAnimationMomentsEditorObject()
if character then
local speed = character.anim_speed
local frame = character.Frame
character:ApplyAppearance(appearance)
if speed == 0 then
character:SetFrame(frame)
end
end
end
function OnMsg.GedPropertyEdited(ged_id, object, prop_id, old_value)
if AppearanceEditor and AppearanceEditor.ged_id == ged_id then
UpdateAnimationMomentsEditor(AppearanceEditor.selected_object.id)
elseif AreModdingToolsActive() and g_Classes.ModItemAppearancePreset and IsKindOf(object, "ModItemAppearancePreset") then
UpdateAnimationMomentsEditor(object.id)
end
end
function OnMsg.GedOnEditorSelect(appearance, selected, ged)
if selected and AppearanceEditor and AppearanceEditor.ged_id == ged.ged_id then
UpdateAnimationMomentsEditor(appearance.id)
end
end
OnMsg.ChangeMapDone = CloseAppearanceEditor
function RefreshApperanceToAllUnits(root, obj, context)
local appearance = obj.id
MapForEach("map", "AppearanceObject", function(obj)
if obj.Appearance == appearance then
obj:ApplyAppearance(appearance, "force")
end
end)
end
DefineClass.AppearanceWeight =
{
__parents = {"PropertyObject"},
properties =
{
{id = "Preset", name = "Preset", editor = "combo", items = PresetsCombo("AppearancePreset"), default = "" },
{id = "Weight", name = "Weight", editor = "number", default = 1 },
{id = "ViewInAppearanceEditorBtn", editor = "buttons", buttons = {{name = "View in Appearance Editor", func = "ViewInAppearanceEditor"}}, dont_save = true},
{id = "ViewInAnimMetadataEditorBtn", editor = "buttons", buttons = {{name = "View in Anim Metadata Editor", func = "ViewInAnimMetadataEditor"}}, dont_save = true},
{id = "GameStates", name = "Game States Required",
editor = "set", three_state = true, default = set(),
items = function() return GetGameStateFilter() end,
help = "Map states requirements for the Preset to be choosen.",
},
},
EditorView = Untranslated("AppearanceWeight <u(Preset)> : <Weight>")
}
function AppearanceWeight:ViewInAppearanceEditor(prop_id, ged)
local appearance = self.Preset
local preset = AppearancePresets[appearance] or EntitySpecPresets[appearance]
if preset then
preset:OpenEditor()
end
end
function AppearanceWeight:ViewInAnimMetadataEditor(prop_id, ged)
OpenAnimationMomentsEditor(self.Preset)
end