Download CommonLua/Classes/EntityClass.lua from sirnii/myspace: direct link, hf CLI and curl.
- Browser
- Download file 6 kB
-
https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/Classes/EntityClass.lua
- Command line
-
hf download hf://spaces/sirnii/myspace/CommonLua/Classes/EntityClass.lua
-
curl -L -o EntityClass.lua https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/Classes/EntityClass.lua
6 kB
| if Platform.ged then | |
| DefineClass("EntityClass", "CObject") | |
| return | |
| end | |
| DefineClass.EntityClass = { | |
| flags = { efCameraRepulse = true, efSelectable = false }, | |
| __hierarchy_cache = true, | |
| __parents = { "CObject" }, | |
| } | |
| local detail_flags = { | |
| ["Default"] = { gofDetailClass0 = false, gofDetailClass1 = false }, | |
| ["Essential"] = { gofDetailClass0 = false, gofDetailClass1 = true }, | |
| ["Optional"] = { gofDetailClass0 = true, gofDetailClass1 = false }, | |
| ["Eye Candy"] = { gofDetailClass0 = true, gofDetailClass1 = true }, | |
| } | |
| function CopyDetailFlagsFromEntity(class, entity, name) | |
| local detail_class = entity and entity.DetailClass or "Essential" | |
| local flags = detail_flags[detail_class] | |
| if class.flags then | |
| for k, v in pairs(flags or empty_table) do | |
| class.flags[k] = v | |
| end | |
| else | |
| class.flags = flags | |
| end | |
| end | |
| function OnMsg.ClassesGenerate(classdefs) | |
| local all_entities = GetAllEntities() | |
| local EntityData = EntityData | |
| local CopyDetailFlagsFromEntity = CopyDetailFlagsFromEntity | |
| local UseCameraCollision = not config.NoCameraCollision | |
| local UseColliders = const.maxCollidersPerObject > 0 | |
| for name in pairs(EntityData) do | |
| all_entities[name] = true | |
| end | |
| for name, class in pairs(classdefs) do | |
| local entity = class.entity or name | |
| local cls_data = entity and (EntityData[entity] or empty_table).entity | |
| for id, value in pairs(cls_data) do | |
| if not rawget(class, id) and id ~= "class_parent" then | |
| class[id] = value | |
| end | |
| end | |
| local flags = class.flags | |
| if not flags or flags.gofDetailClass0 == nil and flags.gofDetailClass1 == nil then | |
| CopyDetailFlagsFromEntity(class, cls_data, name) | |
| end | |
| all_entities[name] = nil -- exclude used entities | |
| if rawget(class, "prevent_entity_class_creation") then | |
| all_entities[entity or false] = nil | |
| end | |
| end | |
| all_entities["StatesSpots"] = nil | |
| all_entities["error"] = nil | |
| all_entities[""] = nil | |
| local __parent_tables = { } | |
| for name in pairs(all_entities) do | |
| local entity_data = EntityData[name] | |
| local cls_data = entity_data and entity_data.entity | |
| local class = cls_data and table.copy(cls_data) or { } | |
| local parent = class.class_parent or "EntityClass" | |
| if parent ~= "NoClass" then | |
| class.class_parent = nil | |
| local __parents = __parent_tables[parent] | |
| if not __parents then | |
| if parent ~= "EntityClass" and parent:find(",") then | |
| __parents = string.split(parent, "[^%w]+") | |
| table.remove_value(__parents, "") | |
| else | |
| __parents = { parent } | |
| end | |
| __parent_tables[parent] = __parents | |
| end | |
| class.__parents = __parents | |
| CopyDetailFlagsFromEntity(class, cls_data, name) | |
| if UseCameraCollision then | |
| local entity_occ = cls_data and cls_data.on_collision_with_camera or "no action" | |
| local occ_flags = OCCtoFlags[entity_occ] | |
| if occ_flags then | |
| if class.flags then | |
| for k, v in pairs(occ_flags) do | |
| class.flags[k] = v | |
| end | |
| else | |
| class.flags = occ_flags | |
| end | |
| end | |
| end | |
| if UseColliders and IsValidEntity(name) and not HasColliders(name) then | |
| class.flags = class.flags and table.copy(class.flags) or {} | |
| class.flags.cofComponentCollider = false | |
| end | |
| class.entity = false | |
| class.__generated_by_class = "EntityClass" | |
| classdefs[name] = class | |
| end | |
| end | |
| Msg("BeforeClearEntityData") -- game specific hook to give the game the chance to do something with the entities | |
| MsgClear("BeforeClearEntityData") | |
| CreateRealTimeThread(ReloadFadeCategories, true) | |
| end | |
| function ReloadFadeCategories(apply_to_objects) | |
| if const.UseDistanceFading and rawget(_G, "EntityData") then | |
| for name,entity_data in pairs(EntityData) do | |
| local fade = FadeCategories[entity_data.entity and entity_data.entity.fade_category or false] | |
| SetEntityFadeDistances(name, fade and fade.min or 0, fade and fade.max or 0) | |
| end | |
| if apply_to_objects and __cobjectToCObject then | |
| MapForEach("map", function(x) | |
| x:GenerateFadeDistances() | |
| end) | |
| end | |
| end | |
| end | |
| AnimatedTextureObjectTypes = { | |
| { value = pbo.Normal, text = "Normal" }, | |
| { value = pbo.PingPong, text = "Ping-Pong" }, | |
| } | |
| DefineClass.AnimatedTextureObject = | |
| { | |
| __parents = { "ComponentCustomData", "Object" }, | |
| properties = { | |
| { category = "Animated Texture", id = "anim_type", name = "Pick frame by", editor = "choice", items = function() return AnimatedTextureObjectTypes end, template = true }, | |
| { category = "Animated Texture", id = "anim_speed", name = "Speed Multiplier", editor = "number", max = 4095, min = 0, template = true }, | |
| { category = "Animated Texture", id = "sequence_time_remap", name = "Sequence time", editor = "curve4", max = 63, scale = 63, max_x = 15, scale_x = 15, template = true }, | |
| }, | |
| anim_type = pbo.Normal, | |
| anim_speed = 1000, | |
| sequence_time_remap = MakeLine(0, 63, 15), | |
| } | |
| function AnimatedTextureObject:Setanim_type(value) | |
| self:SetFrameAnimationPlaybackOrder(value) | |
| end | |
| function AnimatedTextureObject:Getanim_type() | |
| return self:GetFrameAnimationPlaybackOrder() | |
| end | |
| function AnimatedTextureObject:Setanim_speed(value) | |
| self:SetFrameAnimationSpeed(value) | |
| end | |
| function AnimatedTextureObject:Getanim_speed() | |
| return self:GetFrameAnimationSpeed() | |
| end | |
| function AnimatedTextureObject:Setsequence_time_remap(curve) | |
| local value = (curve[1]:y()) | | |
| (curve[2]:y() << 6) | | |
| (curve[3]:y() << 12) | | |
| (curve[4]:y() << 18) | | |
| (curve[2]:x() << 24) | | |
| (curve[3]:x() << 28) | |
| self:SetFrameAnimationPackedCurve(value) | |
| end | |
| function AnimatedTextureObject:Getsequence_time_remap() | |
| local value = self:GetFrameAnimationPackedCurve() | |
| local curve = { | |
| point(0, value & 0x3F), | |
| point((value >> 24) & 0xF, (value >> 6) & 0x3F), | |
| point((value >> 28) & 0xF, (value >> 12) & 0x3F), | |
| point(15, (value >> 18) & 0x3F), | |
| } | |
| for i = 1, 4 do | |
| curve[i] = point(curve[i]:x(), curve[i]:y(), curve[i]:y()) | |
| end | |
| return curve | |
| end | |
| function AnimatedTextureObject:Init() | |
| self:InitTextureAnimation() | |
| self:Setanim_type(self.anim_type) | |
| self:Setanim_speed(self.anim_speed) | |
| self:Setsequence_time_remap(self.sequence_time_remap) | |
| end |