From fa8d331b9b20e4ea6609b703c7fc121d561c9714 Mon Sep 17 00:00:00 2001 From: JaXt0r <120568393+JaXt0r@users.noreply.github.com> Date: Fri, 20 Sep 2024 21:29:57 +0200 Subject: [PATCH] [#12] feat(VirtualObject): Add interfaces for all Vob types * add(I*VirtualObject): Add interfaces for all Vob types. * update(I*VirtualObject): Checked on Fields returning classes. Altered them to remove interfaces instead. --- ZenKit/Vobs/Animate.cs | 9 +- ZenKit/Vobs/CodeMaster.cs | 19 ++- ZenKit/Vobs/Container.cs | 20 ++- ZenKit/Vobs/CutsceneCamera.cs | 52 +++++- ZenKit/Vobs/Door.cs | 11 +- ZenKit/Vobs/Earthquake.cs | 11 +- ZenKit/Vobs/Fire.cs | 10 +- ZenKit/Vobs/InteractiveObject.cs | 38 ++++- ZenKit/Vobs/Item.cs | 11 +- ZenKit/Vobs/LensFlare.cs | 9 +- ZenKit/Vobs/Light.cs | 9 +- ZenKit/Vobs/MessageFilter.cs | 11 +- ZenKit/Vobs/MovableObject.cs | 19 ++- ZenKit/Vobs/Mover.cs | 36 ++++- ZenKit/Vobs/MoverController.cs | 11 +- ZenKit/Vobs/Npc.cs | 195 ++++++++++++++++++---- ZenKit/Vobs/ParticleEffectController.cs | 11 +- ZenKit/Vobs/Sound.cs | 30 +++- ZenKit/Vobs/TouchDamage.cs | 20 ++- ZenKit/Vobs/Trigger.cs | 36 ++++- ZenKit/Vobs/TriggerChangeLevel.cs | 10 +- ZenKit/Vobs/TriggerList.cs | 35 +++- ZenKit/Vobs/TriggerScript.cs | 9 +- ZenKit/Vobs/TriggerUntouch.cs | 9 +- ZenKit/Vobs/TriggerWorldStart.cs | 11 +- ZenKit/Vobs/VirtualObject.cs | 206 +++++++++++++++++------- ZenKit/Vobs/ZoneFarPlane.cs | 16 +- ZenKit/Vobs/ZoneFog.cs | 19 ++- ZenKit/Vobs/ZoneMusic.cs | 23 ++- 29 files changed, 735 insertions(+), 171 deletions(-) diff --git a/ZenKit/Vobs/Animate.cs b/ZenKit/Vobs/Animate.cs index 48e9571..cdb9974 100644 --- a/ZenKit/Vobs/Animate.cs +++ b/ZenKit/Vobs/Animate.cs @@ -2,7 +2,12 @@ namespace ZenKit.Vobs { - public class Animate : VirtualObject + public interface IAnimate : IVirtualObject + { + bool StartOn { get; set; } + } + + public class Animate : VirtualObject, IAnimate { public Animate() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCVobAnimate)) { @@ -33,4 +38,4 @@ protected override void Delete() Native.ZkAnimate_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/CodeMaster.cs b/ZenKit/Vobs/CodeMaster.cs index 1bb5810..a62e5d1 100644 --- a/ZenKit/Vobs/CodeMaster.cs +++ b/ZenKit/Vobs/CodeMaster.cs @@ -5,7 +5,22 @@ namespace ZenKit.Vobs { - public class CodeMaster : VirtualObject + public interface ICodeMaster : IVirtualObject + { + string Target { get; set; } + bool Ordered { get; set; } + bool FirstFalseIsFailure { get; set; } + string FailureTarget { get; set; } + bool UntriggeredCancels { get; set; } + int SlaveCount { get; } + List Slaves { get; } + string GetSlave(int i); + void AddSlave(string slave); + void RemoveSlave(int i); + void RemoveSlaves(Predicate pred); + } + + public class CodeMaster : VirtualObject, ICodeMaster { private static readonly Native.Callbacks.ZkStringEnumerator RemoveSlavesEnumerator = _enumerateSlavesHandler; @@ -111,4 +126,4 @@ private static bool _enumerateSlavesHandler(IntPtr ctx, IntPtr ptr) return cb(ptr.MarshalAsString()!); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Container.cs b/ZenKit/Vobs/Container.cs index 2cef85c..4957fdf 100644 --- a/ZenKit/Vobs/Container.cs +++ b/ZenKit/Vobs/Container.cs @@ -3,7 +3,19 @@ namespace ZenKit.Vobs { - public class Container : InteractiveObject + public interface IContainer : IInteractiveObject + { + bool IsLocked { get; set; } + string Key { get; set; } + string PickString { get; set; } + string Contents { get; set; } + int ItemCount { get; } + List Items { get; } + void AddItem(Item item); + void RemoveItem(int i); + } + + public class Container : InteractiveObject, IContainer { public Container() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobContainer)) { @@ -49,11 +61,11 @@ public string Contents public int ItemCount => (int)Native.ZkContainer_getItemCount(Handle); - public List Items + public List Items { get { - var items = new List(); + var items = new List(); for (var i = 0; i < ItemCount; ++i) { @@ -80,4 +92,4 @@ protected override void Delete() Native.ZkContainer_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/CutsceneCamera.cs b/ZenKit/Vobs/CutsceneCamera.cs index 2cf34e7..068b7e2 100644 --- a/ZenKit/Vobs/CutsceneCamera.cs +++ b/ZenKit/Vobs/CutsceneCamera.cs @@ -36,7 +36,24 @@ public enum CameraMotion Custom = 6 } - public class CameraTrajectoryFrame : VirtualObject + public interface ICameraTrajectoryFrame : IVirtualObject + { + float Time { get; set; } + float RollAngle { get; set; } + float FovScale { get; set; } + CameraMotion MotionType { get; set; } + CameraMotion MotionTypeFov { get; set; } + CameraMotion MotionTypeRoll { get; set; } + CameraMotion MotionTypeTimeScale { get; set; } + float Tension { get; set; } + float CamBias { get; set; } + float Continuity { get; set; } + float TimeScale { get; set; } + bool TimeFixed { get; set; } + Matrix4x4 OriginalPose { get; set; } + } + + public class CameraTrajectoryFrame : VirtualObject, ICameraTrajectoryFrame { public CameraTrajectoryFrame() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCCamTrj_KeyFrame)) { @@ -129,7 +146,30 @@ protected override void Delete() } } - public class CutsceneCamera : VirtualObject + public interface ICutsceneCamera : IVirtualObject + { + CameraTrajectory TrajectoryFOR { get; set; } + CameraTrajectory TargetTrajectoryFOR { get; set; } + CameraLoopType LoopMode { get; set; } + CameraLerpType LerpMode { get; set; } + bool IgnoreFORVobRotation { get; set; } + bool IgnoreFORVobRotationTarget { get; set; } + bool Adapt { get; set; } + bool EaseFirst { get; set; } + bool EaseLast { get; set; } + float TotalDuration { get; set; } + string AutoFocusVob { get; set; } + bool AutoPlayerMovable { get; set; } + bool AutoUntriggerLast { get; set; } + float AutoUntriggerLastDelay { get; set; } + int PositionCount { get; } + int TargetCount { get; } + int FrameCount { get; } + List Frames { get; } + ICameraTrajectoryFrame GetFrame(int i); + } + + public class CutsceneCamera : VirtualObject, ICutsceneCamera { public CutsceneCamera() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCCSCamera)) { @@ -239,11 +279,11 @@ public float AutoUntriggerLastDelay public int TargetCount => Native.ZkCutsceneCamera_getTargetCount(Handle); public int FrameCount => (int)Native.ZkCutsceneCamera_getFrameCount(Handle); - public List Frames + public List Frames { get { - var frames = new List(); + var frames = new List(); var count = FrameCount; for (var i = 0; i < count; ++i) frames.Add(GetFrame(i)); return frames; @@ -255,10 +295,10 @@ protected override void Delete() Native.ZkCutsceneCamera_del(Handle); } - public CameraTrajectoryFrame GetFrame(int i) + public ICameraTrajectoryFrame GetFrame(int i) { var handle = Native.ZkCutsceneCamera_getFrame(Handle, (ulong)i); return new CameraTrajectoryFrame(Native.ZkObject_takeRef(handle)); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Door.cs b/ZenKit/Vobs/Door.cs index b495f64..690f173 100644 --- a/ZenKit/Vobs/Door.cs +++ b/ZenKit/Vobs/Door.cs @@ -2,7 +2,14 @@ namespace ZenKit.Vobs { - public class Door : InteractiveObject + public interface IDoor : IInteractiveObject + { + bool IsLocked { get; set; } + string Key { get; set; } + string PickString { get; set; } + } + + public class Door : InteractiveObject, IDoor { public Door() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobDoor)) { @@ -45,4 +52,4 @@ protected override void Delete() Native.ZkDoor_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Earthquake.cs b/ZenKit/Vobs/Earthquake.cs index 1e59886..4594fd9 100644 --- a/ZenKit/Vobs/Earthquake.cs +++ b/ZenKit/Vobs/Earthquake.cs @@ -3,7 +3,14 @@ namespace ZenKit.Vobs { - public class Earthquake : VirtualObject + public interface IEarthquake : IVirtualObject + { + float Radius { get; set; } + TimeSpan Duration { get; set; } + Vector3 Amplitude { get; set; } + } + + public class Earthquake : VirtualObject, IEarthquake { public Earthquake() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCEarthquake)) { @@ -46,4 +53,4 @@ protected override void Delete() Native.ZkEarthquake_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Fire.cs b/ZenKit/Vobs/Fire.cs index fcee07b..d06a0b8 100644 --- a/ZenKit/Vobs/Fire.cs +++ b/ZenKit/Vobs/Fire.cs @@ -2,7 +2,13 @@ namespace ZenKit.Vobs { - public class Fire : InteractiveObject + public interface IFire : IInteractiveObject + { + string Slot { get; set; } + string VobTree { get; set; } + } + + public class Fire : InteractiveObject, IFire { public Fire() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobFire)) { @@ -39,4 +45,4 @@ protected override void Delete() Native.ZkFire_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/InteractiveObject.cs b/ZenKit/Vobs/InteractiveObject.cs index df3b944..2058ce9 100644 --- a/ZenKit/Vobs/InteractiveObject.cs +++ b/ZenKit/Vobs/InteractiveObject.cs @@ -2,7 +2,17 @@ namespace ZenKit.Vobs { - public class InteractiveObject : MovableObject + public interface IInteractiveObject : IMovableObject + { + int State { get; set; } + string Target { get; set; } + string Item { get; set; } + string ConditionFunction { get; set; } + string OnStateChangeFunction { get; set; } + bool Rewind { get; set; } + } + + public class InteractiveObject : MovableObject, IInteractiveObject { public InteractiveObject() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobInter)) { @@ -69,7 +79,11 @@ protected override void Delete() } } - public class Bed : InteractiveObject + public interface IBed : IInteractiveObject + { + } + + public class Bed : InteractiveObject, IBed { public Bed() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobBed)) { @@ -80,7 +94,11 @@ internal Bed(UIntPtr handle) : base(handle) } } - public class Ladder : InteractiveObject + public interface ILadder : IInteractiveObject + { + } + + public class Ladder : InteractiveObject, ILadder { public Ladder() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobLadder)) { @@ -91,7 +109,11 @@ internal Ladder(UIntPtr handle) : base(handle) } } - public class Switch : InteractiveObject + public interface ISwitch : IInteractiveObject + { + } + + public class Switch : InteractiveObject, ISwitch { public Switch() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobSwitch)) { @@ -102,7 +124,11 @@ internal Switch(UIntPtr handle) : base(handle) } } - public class Wheel : InteractiveObject + public interface IWheel : IInteractiveObject + { + } + + public class Wheel : InteractiveObject, IWheel { public Wheel() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMobWheel)) { @@ -112,4 +138,4 @@ internal Wheel(UIntPtr handle) : base(handle) { } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Item.cs b/ZenKit/Vobs/Item.cs index 2356c69..5ecdb41 100644 --- a/ZenKit/Vobs/Item.cs +++ b/ZenKit/Vobs/Item.cs @@ -2,7 +2,14 @@ namespace ZenKit.Vobs { - public class Item : VirtualObject + public interface IItem : IVirtualObject + { + string Instance { get; set; } + int Amount { get; set; } + int Flags { get; set; } + } + + public class Item : VirtualObject, IItem { public Item() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCItem)) { @@ -46,4 +53,4 @@ protected override void Delete() Native.ZkItem_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/LensFlare.cs b/ZenKit/Vobs/LensFlare.cs index bf5affb..b4b5af8 100644 --- a/ZenKit/Vobs/LensFlare.cs +++ b/ZenKit/Vobs/LensFlare.cs @@ -2,7 +2,12 @@ namespace ZenKit.Vobs { - public class LensFlare : VirtualObject + public interface ILensFlare : IVirtualObject + { + string Effect { get; set; } + } + + public class LensFlare : VirtualObject, ILensFlare { public LensFlare() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCVobLensFlare)) { @@ -34,4 +39,4 @@ protected override void Delete() Native.ZkLensFlare_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Light.cs b/ZenKit/Vobs/Light.cs index 702e7fc..3f6d177 100644 --- a/ZenKit/Vobs/Light.cs +++ b/ZenKit/Vobs/Light.cs @@ -180,7 +180,12 @@ public bool CanMove } } - public class Light : VirtualObject, ILightPreset + public interface ILight : ILightPreset, IVirtualObject + { + + } + + public class Light : VirtualObject, ILight { public Light() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCVobLight)) { @@ -321,4 +326,4 @@ protected override void Delete() Native.ZkLight_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/MessageFilter.cs b/ZenKit/Vobs/MessageFilter.cs index fc5f51b..f23adf7 100644 --- a/ZenKit/Vobs/MessageFilter.cs +++ b/ZenKit/Vobs/MessageFilter.cs @@ -12,7 +12,14 @@ public enum MessageFilterAction Toggle = 5 } - public class MessageFilter : VirtualObject + public interface IMessageFilter : IVirtualObject + { + string Target { get; set; } + MessageFilterAction OnTrigger { get; set; } + MessageFilterAction OnUntrigger { get; set; } + } + + public class MessageFilter : VirtualObject, IMessageFilter { public MessageFilter() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCMessageFilter)) { @@ -57,4 +64,4 @@ protected override void Delete() Native.ZkMessageFilter_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/MovableObject.cs b/ZenKit/Vobs/MovableObject.cs index c67e9af..9c35e76 100644 --- a/ZenKit/Vobs/MovableObject.cs +++ b/ZenKit/Vobs/MovableObject.cs @@ -12,7 +12,22 @@ public enum SoundMaterialType Glass = 5 } - public class MovableObject : VirtualObject + public interface IMovableObject : IVirtualObject + { + string FocusName { get; set; } + int Hp { get; set; } + int Damage { get; set; } + bool Movable { get; set; } + bool Takable { get; set; } + bool FocusOverride { get; set; } + SoundMaterialType Material { get; set; } + string VisualDestroyed { get; set; } + string Owner { get; set; } + string OwnerGuild { get; set; } + bool Destroyed { get; set; } + } + + public class MovableObject : VirtualObject, IMovableObject { public MovableObject() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCMOB)) { @@ -106,4 +121,4 @@ protected override void Delete() Native.ZkMovableObject_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Mover.cs b/ZenKit/Vobs/Mover.cs index 8b51f7a..0cdfff4 100644 --- a/ZenKit/Vobs/Mover.cs +++ b/ZenKit/Vobs/Mover.cs @@ -30,7 +30,39 @@ public enum MoverSpeedType SegmentSlowEnd = 6 } - public class Mover : Trigger + public interface IMover : ITrigger + { + MoverBehavior Behavior { get; set; } + float TouchBlockerDamage { get; set; } + TimeSpan StayOpenTime { get; set; } + bool IsLocked { get; set; } + bool AutoLink { get; set; } + bool AutoRotate { get; set; } + float Speed { get; set; } + MoverLerpType LerpType { get; set; } + MoverSpeedType SpeedType { get; set; } + Vector3 ActKeyPosDelta { get; set; } + float ActKeyframeF { get; set; } + int ActKeyframe { get; set; } + int NextKeyframe { get; set; } + float MoveSpeedUnit { get; set; } + float AdvanceDir { get; set; } + int MoverState { get; set; } + int TriggerEventCount { get; set; } + float StayOpenTimeDest { get; set; } + int KeyframeCount { get; } + List Keyframes { get; } + string SfxOpenStart { get; set; } + string SfxOpenEnd { get; set; } + string SfxTransitioning { get; set; } + string SfxCloseStart { get; set; } + string SfxCloseEnd { get; set; } + string SfxLock { get; set; } + string SfxUnlock { get; set; } + string SfxUseLocked { get; set; } + } + + public class Mover : Trigger, IMover { public Mover() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCMover)) { @@ -232,4 +264,4 @@ public AnimationSample GetKeyframe(int i) return Native.ZkMover_getKeyframe(Handle, (ulong)i); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/MoverController.cs b/ZenKit/Vobs/MoverController.cs index ab33ef4..d59b157 100644 --- a/ZenKit/Vobs/MoverController.cs +++ b/ZenKit/Vobs/MoverController.cs @@ -10,7 +10,14 @@ public enum MoverMessageType Previous = 3 } - public class MoverController : VirtualObject + public interface IMoverController : IVirtualObject + { + string Target { get; set; } + MoverMessageType Message { get; set; } + int Key { get; set; } + } + + public class MoverController : VirtualObject, IMoverController { public MoverController() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCMoverController)) { @@ -56,4 +63,4 @@ protected override void Delete() Native.ZkMoverController_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Npc.cs b/ZenKit/Vobs/Npc.cs index dfd8c0d..cfe8c04 100644 --- a/ZenKit/Vobs/Npc.cs +++ b/ZenKit/Vobs/Npc.cs @@ -24,7 +24,14 @@ public enum NpcNewsId HasDefeated = 170, } - public class Talent + public interface ITalent + { + int Type { get; set; } + int Value { get; set; } + int Skill { get; set; } + } + + public class Talent : ITalent { internal readonly UIntPtr Handle; @@ -62,7 +69,15 @@ public int Skill } } - public class Slot + public interface ISlot + { + bool Used { get; set; } + string Name { get; set; } + IItem? Item { get; set; } + bool InInventory { get; set; } + } + + public class Slot : ISlot { private readonly UIntPtr handle; @@ -84,14 +99,14 @@ public string Name set => Native.ZkNpcSlot_setName(handle, value); } - public Item? Item + public IItem? Item { get { var val = Native.ZkNpcSlot_getItem(handle); return val == UIntPtr.Zero ? null : new Item(Native.ZkObject_takeRef(val)); } - set => Native.ZkNpcSlot_setItem(handle, value?.Handle ?? UIntPtr.Zero); + set => Native.ZkNpcSlot_setItem(handle, value == null ? UIntPtr.Zero : ((Item)value).Handle); } public bool InInventory @@ -101,7 +116,20 @@ public bool InInventory } } - public class News + public interface INews + { + bool Told { get; set; } + float SpreadTime { get; set; } + NpcNewsSpread SpreadType { get; set; } + NpcNewsId NewsId { get; set; } + bool Gossip { get; set; } + bool GuildVictim { get; set; } + string WitnessName { get; set; } + string OffenderName { get; set; } + string VictimName { get; set; } + } + + public class News : INews { private readonly UIntPtr handle; @@ -166,7 +194,108 @@ public string VictimName } } - public class Npc : VirtualObject + public interface INpc : IVirtualObject + { + string NpcInstance { get; set; } + Vector3 ModelScale { get; set; } + float ModelFatness { get; set; } + int Flags { get; set; } + int Guild { get; set; } + int GuildTrue { get; set; } + int Level { get; set; } + int Xp { get; set; } + int XpNextLevel { get; set; } + int Lp { get; set; } + int FightTactic { get; set; } + int FightMode { get; set; } + bool Wounded { get; set; } + bool Mad { get; set; } + int MadTime { get; set; } + bool Player { get; set; } + string StartAiState { get; set; } + string ScriptWaypoint { get; set; } + int Attitude { get; set; } + int AttitudeTemp { get; set; } + int NameNr { get; set; } + bool MoveLock { get; set; } + bool CurrentStateValid { get; set; } + string CurrentStateName { get; set; } + int CurrentStateIndex { get; set; } + bool CurrentStateIsRoutine { get; set; } + bool NextStateValid { get; set; } + string NextStateName { get; set; } + int NextStateIndex { get; set; } + bool NextStateIsRoutine { get; set; } + int LastAiState { get; set; } + bool HasRoutine { get; set; } + bool RoutineChanged { get; set; } + bool RoutineOverlay { get; set; } + int RoutineOverlayCount { get; set; } + int WalkmodeRoutine { get; set; } + bool WeaponmodeRoutine { get; set; } + bool StartNewRoutine { get; set; } + int AiStateDriven { get; set; } + Vector3 AiStatePos { get; set; } + string CurrentRoutine { get; set; } + bool Respawn { get; set; } + int RespawnTime { get; set; } + int BsInterruptableOverride { get; set; } + int NpcType { get; set; } + int SpellMana { get; set; } + IVirtualObject? CarryVob { get; set; } + IVirtualObject? Enemy { get; set; } + int OverlayCount { get; } + List Overlays { get; set; } + int TalentCount { get; } + List Talents { get; set; } + int ItemCount { get; } + List Items { get; set; } + int SlotCount { get; } + List Slots { get; } + int NewsCount { get; } + List News { get; } + List Protection { get; set; } + List Attributes { get; set; } + List HitChance { get; set; } + List Missions { get; set; } + int[] AiVars { get; set; } + List Packed { get; set; } + string GetOverlay(int i); + void ClearOverlays(); + void RemoveOverlay(int i); + void SetOverlay(int i, string overlay); + void AddOverlay(string overlay); + ITalent GetTalent(int i); + void ClearTalents(); + void RemoveTalent(int i); + void SetTalent(int i, ITalent talent); + void AddTalent(ITalent talent); + IItem GetItem(int i); + void ClearItems(); + void RemoveItem(int i); + void SetItem(int i, IItem item); + void AddItem(IItem item); + ISlot GetSlot(int i); + void ClearSlots(); + void RemoveSlot(int i); + ISlot AddSlot(); + INews GetNews(int i); + void ClearNews(); + void RemoveNews(int i); + INews AddNews(); + int GetProtection(int i); + void SetProtection(int i, int v); + int GetAttribute(int i); + void SetAttribute(int i, int v); + int GetHitChance(int i); + void SetHitChance(int i, int v); + int GetMission(int i); + void SetMission(int i, int v); + string GetPacked(int i); + void SetPacked(int i, string v); + } + + public class Npc : VirtualObject, INpc { public Npc() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCNpc)) { @@ -452,24 +581,24 @@ public int SpellMana set => Native.ZkNpc_setSpellMana(Handle, value); } - public VirtualObject? CarryVob + public IVirtualObject? CarryVob { get { var val = Native.ZkNpc_getCarryVob(Handle); return VirtualObject.FromNative(Native.ZkObject_takeRef(val)); } - set => Native.ZkNpc_setCarryVob(Handle, value?.Handle ?? System.UIntPtr.Zero); + set => Native.ZkNpc_setCarryVob(Handle, value == null ? UIntPtr.Zero : ((VirtualObject)value).Handle); } - public VirtualObject? Enemy + public IVirtualObject? Enemy { get { var val = Native.ZkNpc_getEnemy(Handle); return VirtualObject.FromNative(Native.ZkObject_takeRef(val)); } - set => Native.ZkNpc_setEnemy(Handle, value?.Handle ?? System.UIntPtr.Zero); + set => Native.ZkNpc_setEnemy(Handle, value == null ? UIntPtr.Zero : ((VirtualObject)value).Handle); } @@ -524,11 +653,11 @@ public void AddOverlay(string overlay) public int TalentCount => (int)Native.ZkNpc_getTalentCount(Handle); - public List Talents + public List Talents { get { - var talents = new List(); + var talents = new List(); for (var i = 0; i < TalentCount; ++i) { @@ -546,7 +675,7 @@ public List Talents } - public Talent GetTalent(int i) + public ITalent GetTalent(int i) { return new Talent(Native.ZkObject_takeRef(Native.ZkNpc_getTalent(Handle, (ulong)i))); } @@ -561,23 +690,23 @@ public void RemoveTalent(int i) Native.ZkNpc_removeTalent(Handle, (ulong)i); } - public void SetTalent(int i, Talent talent) + public void SetTalent(int i, ITalent talent) { - Native.ZkNpc_setTalent(Handle, (ulong)i, talent.Handle); + Native.ZkNpc_setTalent(Handle, (ulong)i, ((Talent)talent).Handle); } - public void AddTalent(Talent talent) + public void AddTalent(ITalent talent) { - Native.ZkNpc_addTalent(Handle, talent.Handle); + Native.ZkNpc_addTalent(Handle, ((Talent)talent).Handle); } public int ItemCount => (int)Native.ZkNpc_getItemCount(Handle); - public List Items + public List Items { get { - var items = new List(); + var items = new List(); for (var i = 0; i < ItemCount; ++i) { @@ -594,7 +723,7 @@ public List Items } - public Item GetItem(int i) + public IItem GetItem(int i) { return new Item(Native.ZkObject_takeRef(Native.ZkNpc_getItem(Handle, (ulong)i))); } @@ -609,23 +738,23 @@ public void RemoveItem(int i) Native.ZkNpc_removeItem(Handle, (ulong)i); } - public void SetItem(int i, Item item) + public void SetItem(int i, IItem item) { - Native.ZkNpc_setItem(Handle, (ulong)i, item.Handle); + Native.ZkNpc_setItem(Handle, (ulong)i, ((Item)item).Handle); } - public void AddItem(Item item) + public void AddItem(IItem item) { - Native.ZkNpc_addItem(Handle, item.Handle); + Native.ZkNpc_addItem(Handle, ((Item)item).Handle); } public int SlotCount => (int)Native.ZkNpc_getSlotCount(Handle); - public List Slots + public List Slots { get { - var items = new List(); + var items = new List(); for (var i = 0; i < ItemCount; ++i) { @@ -636,7 +765,7 @@ public List Slots } } - public Slot GetSlot(int i) + public ISlot GetSlot(int i) { return new Slot(Native.ZkNpc_getSlot(Handle, (ulong)i)); } @@ -651,18 +780,18 @@ public void RemoveSlot(int i) Native.ZkNpc_removeSlot(Handle, (ulong)i); } - public Slot AddSlot() + public ISlot AddSlot() { return new Slot(Native.ZkNpc_addSlot(Handle)); } public int NewsCount => (int)Native.ZkNpc_getNewsCount(Handle); - public List News + public List News { get { - var items = new List(); + var items = new List(); for (var i = 0; i < ItemCount; ++i) { @@ -673,7 +802,7 @@ public List News } } - public News GetNews(int i) + public INews GetNews(int i) { return new News(Native.ZkNpc_getNews(Handle, (ulong)i)); } @@ -688,7 +817,7 @@ public void RemoveNews(int i) Native.ZkNpc_removeSlot(Handle, (ulong)i); } - public News AddNews() + public INews AddNews() { return new News(Native.ZkNpc_addNews(Handle)); } @@ -869,4 +998,4 @@ public void SetPacked(int i, string v) Native.ZkNpc_setPacked(Handle, (ulong)i, v); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/ParticleEffectController.cs b/ZenKit/Vobs/ParticleEffectController.cs index 8599e16..dd5dc55 100644 --- a/ZenKit/Vobs/ParticleEffectController.cs +++ b/ZenKit/Vobs/ParticleEffectController.cs @@ -2,7 +2,14 @@ namespace ZenKit.Vobs { - public class ParticleEffectController : VirtualObject + public interface IParticleEffectController : IVirtualObject + { + string EffectName { get; set; } + bool KillWhenDone { get; set; } + bool InitiallyRunning { get; set; } + } + + public class ParticleEffectController : VirtualObject, IParticleEffectController { public ParticleEffectController() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCPFXController)) { @@ -48,4 +55,4 @@ protected override void Delete() Native.ZkParticleEffectController_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Sound.cs b/ZenKit/Vobs/Sound.cs index ecc62d8..f622f1e 100644 --- a/ZenKit/Vobs/Sound.cs +++ b/ZenKit/Vobs/Sound.cs @@ -15,7 +15,24 @@ public enum SoundTriggerVolumeType Ellipsoidal = 1 } - public class Sound : VirtualObject + public interface ISound : IVirtualObject + { + float Volume { get; set; } + SoundMode Mode { get; set; } + float RandomDelay { get; set; } + float RandomDelayVar { get; set; } + bool InitiallyPlaying { get; set; } + bool Ambient3d { get; set; } + bool Obstruction { get; set; } + float ConeAngle { get; set; } + SoundTriggerVolumeType VolumeType { get; set; } + float Radius { get; set; } + string SoundName { get; set; } + bool IsRunning { get; set; } + bool IsAllowedToRun { get; set; } + } + + public class Sound : VirtualObject, ISound { public Sound() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCVobSound)) { @@ -119,7 +136,14 @@ protected override void Delete() } } - public class SoundDaytime : Sound + public interface ISoundDaytime : ISound + { + float StartTime { get; set; } + float EndTime { get; set; } + string SoundNameDaytime { get; set; } + } + + public class SoundDaytime : Sound, ISoundDaytime { public SoundDaytime() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCVobSoundDaytime)) { @@ -163,4 +187,4 @@ protected override void Delete() Native.ZkSoundDaytime_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/TouchDamage.cs b/ZenKit/Vobs/TouchDamage.cs index f76168c..dfe5603 100644 --- a/ZenKit/Vobs/TouchDamage.cs +++ b/ZenKit/Vobs/TouchDamage.cs @@ -9,7 +9,23 @@ public enum TouchCollisionType Point = 2 } - public class TouchDamage : VirtualObject + public interface ITouchDamage : IVirtualObject + { + float Damage { get; set; } + bool IsBarrier { get; set; } + bool IsBlunt { get; set; } + bool IsEdge { get; set; } + bool IsFire { get; set; } + bool IsFly { get; set; } + bool IsMagic { get; set; } + bool IsPoint { get; set; } + bool IsFall { get; set; } + TimeSpan RepeatDelay { get; set; } + float VolumeScale { get; set; } + TouchCollisionType CollisionType { get; set; } + } + + public class TouchDamage : VirtualObject, ITouchDamage { public TouchDamage() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCTouchDamage)) { @@ -107,4 +123,4 @@ protected override void Delete() Native.ZkTouchDamage_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/Trigger.cs b/ZenKit/Vobs/Trigger.cs index 2e6bf39..d561a13 100644 --- a/ZenKit/Vobs/Trigger.cs +++ b/ZenKit/Vobs/Trigger.cs @@ -2,7 +2,29 @@ namespace ZenKit.Vobs { - public class Trigger : VirtualObject + public interface ITrigger : IVirtualObject + { + string Target { get; set; } + bool StartEnabled { get; set; } + bool SendUntrigger { get; set; } + bool ReactToOnTrigger { get; set; } + bool ReactToOnTouch { get; set; } + bool ReactToOnDamage { get; set; } + bool RespondToObject { get; set; } + bool RespondToPC { get; set; } + bool RespondToNPC { get; set; } + string VobTarget { get; set; } + int MaxActivationCount { get; set; } + TimeSpan RetriggerDelay { get; set; } + float DamageThreshold { get; set; } + TimeSpan FireDelay { get; set; } + float NextTimeTriggerable { get; set; } + IVirtualObject? OtherVob { get; set; } + int CountCanBeActivated { get; set; } + bool IsEnabled { get; set; } + } + + public class Trigger : VirtualObject, ITrigger { public Trigger() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCTrigger)) { @@ -112,14 +134,14 @@ public float NextTimeTriggerable set => Native.ZkTrigger_setNextTimeTriggerable(Handle, value); } - public VirtualObject? OtherVob + public IVirtualObject? OtherVob { get { var val = Native.ZkTrigger_getOtherVob(Handle); return VirtualObject.FromNative(Native.ZkObject_takeRef(val)); } - set => Native.ZkTrigger_setOtherVob(Handle, value?.Handle ?? UIntPtr.Zero); + set => Native.ZkTrigger_setOtherVob(Handle, value == null ? UIntPtr.Zero : ((VirtualObject)value).Handle); } public int CountCanBeActivated @@ -141,7 +163,11 @@ protected override void Delete() } } - public class CutsceneTrigger : Trigger + public interface ICutsceneTrigger : ITrigger + { + } + + public class CutsceneTrigger : Trigger, ICutsceneTrigger { public CutsceneTrigger(Read buf, GameVersion version) : base(buf, version) { @@ -155,4 +181,4 @@ internal CutsceneTrigger(UIntPtr handle) : base(handle) { } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/TriggerChangeLevel.cs b/ZenKit/Vobs/TriggerChangeLevel.cs index c1adf6d..5c3c5f6 100644 --- a/ZenKit/Vobs/TriggerChangeLevel.cs +++ b/ZenKit/Vobs/TriggerChangeLevel.cs @@ -2,7 +2,13 @@ namespace ZenKit.Vobs { - public class TriggerChangeLevel : Trigger + public interface ITriggerChangeLevel : ITrigger + { + string LevelName { get; set; } + string StartVob { get; set; } + } + + public class TriggerChangeLevel : Trigger, ITriggerChangeLevel { public TriggerChangeLevel() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCTriggerChangeLevel)) { @@ -41,4 +47,4 @@ protected override void Delete() Native.ZkTriggerChangeLevel_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/TriggerList.cs b/ZenKit/Vobs/TriggerList.cs index 77b97e9..26cd091 100644 --- a/ZenKit/Vobs/TriggerList.cs +++ b/ZenKit/Vobs/TriggerList.cs @@ -10,7 +10,13 @@ public enum TriggerBatchMode Random = 2 } - public class TriggerListTarget + public interface ITriggerListTarget + { + string Name { get; set; } + TimeSpan Delay { get; set; } + } + + public class TriggerListTarget : ITriggerListTarget { private readonly UIntPtr _handle; @@ -32,7 +38,20 @@ public TimeSpan Delay } } - public class TriggerList : Trigger + public interface ITriggerList : ITrigger + { + TriggerBatchMode Mode { get; set; } + byte ActTarget { get; set; } + bool SendOnTrigger { get; set; } + int TargetCount { get; } + List Targets { get; } + ITriggerListTarget GetTarget(int i); + ITriggerListTarget AddTarget(); + void RemoveTarget(int i); + void RemoveTargets(Predicate pred); + } + + public class TriggerList : Trigger, ITriggerList { public TriggerList() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCTriggerList)) { @@ -72,23 +91,23 @@ public bool SendOnTrigger public int TargetCount => (int)Native.ZkTriggerList_getTargetCount(Handle); - public List Targets + public List Targets { get { - var targets = new List(); + var targets = new List(); var count = TargetCount; for (var i = 0; i < count; ++i) targets.Add(GetTarget(i)); return targets; } } - public TriggerListTarget GetTarget(int i) + public ITriggerListTarget GetTarget(int i) { return new TriggerListTarget(Native.ZkTriggerList_getTarget(Handle, (ulong)i)); } - public TriggerListTarget AddTarget() + public ITriggerListTarget AddTarget() { return new TriggerListTarget(Native.ZkTriggerList_addTarget(Handle)); } @@ -98,7 +117,7 @@ public void RemoveTarget(int i) Native.ZkTriggerList_removeTarget(Handle, (ulong)i); } - public void RemoveTargets(Predicate pred) + public void RemoveTargets(Predicate pred) { Native.ZkTriggerList_removeTargets(Handle, (_, ptr) => pred(new TriggerListTarget(ptr)), UIntPtr.Zero); } @@ -108,4 +127,4 @@ protected override void Delete() Native.ZkTriggerList_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/TriggerScript.cs b/ZenKit/Vobs/TriggerScript.cs index 27e3c20..87f50a7 100644 --- a/ZenKit/Vobs/TriggerScript.cs +++ b/ZenKit/Vobs/TriggerScript.cs @@ -2,7 +2,12 @@ namespace ZenKit.Vobs { - public class TriggerScript : Trigger + public interface ITriggerScript : IVirtualObject + { + string Function { get; set; } + } + + public class TriggerScript : Trigger, ITriggerScript { public TriggerScript() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCTriggerScript)) { @@ -33,4 +38,4 @@ protected override void Delete() Native.ZkTriggerScript_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/TriggerUntouch.cs b/ZenKit/Vobs/TriggerUntouch.cs index 464f107..4f36ce8 100644 --- a/ZenKit/Vobs/TriggerUntouch.cs +++ b/ZenKit/Vobs/TriggerUntouch.cs @@ -2,7 +2,12 @@ namespace ZenKit.Vobs { - public class TriggerUntouch : VirtualObject + public interface ITriggerUntouch : IVirtualObject + { + string Target { get; set; } + } + + public class TriggerUntouch : VirtualObject, ITriggerUntouch { public TriggerUntouch() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCTriggerUntouch)) { @@ -33,4 +38,4 @@ protected override void Delete() Native.ZkTriggerUntouch_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/TriggerWorldStart.cs b/ZenKit/Vobs/TriggerWorldStart.cs index efa1ca8..50a8036 100644 --- a/ZenKit/Vobs/TriggerWorldStart.cs +++ b/ZenKit/Vobs/TriggerWorldStart.cs @@ -2,7 +2,14 @@ namespace ZenKit.Vobs { - public class TriggerWorldStart : VirtualObject + public interface ITriggerWorldStart : IVirtualObject + { + string Target { get; set; } + bool FireOnce { get; set; } + bool HasFired { get; set; } + } + + public class TriggerWorldStart : VirtualObject, ITriggerWorldStart { public TriggerWorldStart() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCTriggerWorldStart)) { @@ -47,4 +54,4 @@ protected override void Delete() Native.ZkTriggerWorldStart_del(Handle); } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/VirtualObject.cs b/ZenKit/Vobs/VirtualObject.cs index 14f435b..9c5e34e 100644 --- a/ZenKit/Vobs/VirtualObject.cs +++ b/ZenKit/Vobs/VirtualObject.cs @@ -155,7 +155,7 @@ public bool IsCached() Native.ZkVisual_del(Handle); } - public static Visual? FromNative(UIntPtr ptr) + public static IVisual? FromNative(UIntPtr ptr) { if (ptr == UIntPtr.Zero) return null; @@ -173,7 +173,11 @@ public bool IsCached() } } - public class VisualMesh : Visual + public interface IVisualMesh : IVisual + { + } + + public class VisualMesh : Visual, IVisualMesh { public VisualMesh() : base(Native.ZkVisual_new(VisualType.Mesh)) { @@ -184,7 +188,11 @@ internal VisualMesh(UIntPtr handle) : base(handle) } } - public class VisualMultiResolutionMesh : Visual + public interface IVisualMultiResolutionMesh : IVisual + { + } + + public class VisualMultiResolutionMesh : Visual, IVisualMultiResolutionMesh { public VisualMultiResolutionMesh() : base(Native.ZkVisual_new(VisualType.MultiResolutionMesh)) { @@ -195,7 +203,11 @@ internal VisualMultiResolutionMesh(UIntPtr handle) : base(handle) } } - public class VisualParticleEffect : Visual + public interface IVisualParticleEffect : IVisual + { + } + + public class VisualParticleEffect : Visual, IVisualParticleEffect { public VisualParticleEffect() : base(Native.ZkVisual_new(VisualType.ParticleEffect)) { @@ -206,7 +218,11 @@ internal VisualParticleEffect(UIntPtr handle) : base(handle) } } - public class VisualCamera : Visual + public interface IVisualCamera : IVisual + { + } + + public class VisualCamera : Visual, IVisualCamera { public VisualCamera() : base(Native.ZkVisual_new(VisualType.Camera)) { @@ -217,7 +233,11 @@ internal VisualCamera(UIntPtr handle) : base(handle) } } - public class VisualModel : Visual + public interface IVisualModel : IVisual + { + } + + public class VisualModel : Visual, IVisualModel { public VisualModel() : base(Native.ZkVisual_new(VisualType.Model)) { @@ -228,7 +248,11 @@ internal VisualModel(UIntPtr handle) : base(handle) } } - public class VisualMorphMesh : Visual + public interface IVisualMorphMesh : IVisual + { + } + + public class VisualMorphMesh : Visual, IVisualMorphMesh { public VisualMorphMesh() : base(Native.ZkVisual_new(VisualType.MorphMesh)) { @@ -342,41 +366,6 @@ public IVisual Cache() } } - public interface IVirtualObject : ICacheable - { - public bool Ambient { get; set; } - public float AnimationStrength { get; set; } - public AnimationType AnimationType { get; set; } - public int Bias { get; set; } - public AxisAlignedBoundingBox BoundingBox { get; set; } - public bool CdDynamic { get; set; } - public bool CdStatic { get; set; } - public List Children { get; } - public int ChildCount { get; } - public ShadowType DynamicShadows { get; set; } - public float FarClipScale { get; set; } - public int Id { get; } - public string Name { get; set; } - public bool PhysicsEnabled { get; set; } - public Vector3 Position { get; set; } - public string PresetName { get; set; } - public Matrix3x3 Rotation { get; set; } - public bool ShowVisual { get; set; } - public SpriteAlignment SpriteCameraFacingMode { get; set; } - public bool Static { get; set; } - public VirtualObjectType Type { get; } - public IVisual? Visual { get; set; } - - public IVirtualObject GetChild(int i); - - public void AddChild(IVirtualObject obj); - - public void RemoveChild(int i); - - public void RemoveChildren(Predicate pred); - } - - [Serializable] public class CachedVirtualObject : IVirtualObject { @@ -388,6 +377,7 @@ public class CachedVirtualObject : IVirtualObject public bool CdDynamic { get; set; } public bool CdStatic { get; set; } public List Children { get; set; } + public IEventManager? EventManager { get; set; } public int ChildCount => Children.Count; public ShadowType DynamicShadows { get; set; } public float FarClipScale { get; set; } @@ -402,6 +392,9 @@ public class CachedVirtualObject : IVirtualObject public bool Static { get; set; } public VirtualObjectType Type { get; set; } public IVisual? Visual { get; set; } + public byte SleepMode { get; set; } + public float NextOnTimer { get; set; } + public IAi? Ai { get; set; } public IVirtualObject Cache() { @@ -464,6 +457,9 @@ internal virtual CachedVirtualObject CacheFrom(IVirtualObject orig) PresetName = orig.PresetName; Name = orig.Name; Visual = orig.Visual?.Cache(); + SleepMode = orig.SleepMode; + NextOnTimer = orig.NextOnTimer; + Ai = orig.Ai; Children = orig.Children.ConvertAll(child => child.Cache()); return this; } @@ -475,7 +471,12 @@ public enum AiType Move = 1, } - public class Ai + public interface IAi + { + AiType Type { get; } + } + + public class Ai : IAi { internal readonly UIntPtr Handle; @@ -504,7 +505,26 @@ internal Ai(UIntPtr handle) } } - public class AiHuman : Ai + public interface IAiHuman : IAi + { + int WaterLevel { get; set; } + float FloorY { get; set; } + float WaterY { get; set; } + float CeilY { get; set; } + float FeetY { get; set; } + float HeadY { get; set; } + float FallDistY { get; set; } + float FallStartY { get; set; } + INpc? Npc { get; set; } + int WalkMode { get; set; } + int WeaponMode { get; set; } + int WModeAst { get; set; } + int WModeSelect { get; set; } + bool ChangeWeapon { get; set; } + int ActionMode { get; set; } + } + + public class AiHuman : Ai, IAiHuman { public AiHuman() : base(Native.ZkAi_new(AiType.Human)) { @@ -562,7 +582,7 @@ public float FallStartY set => Native.ZkAiHuman_setFallStartY(Handle, value); } - public Npc? Npc + public INpc? Npc { get { @@ -570,7 +590,7 @@ public Npc? Npc if (val == UIntPtr.Zero) return null; return new Npc(Native.ZkObject_takeRef(val)); } - set => Native.ZkAiHuman_setNpc(Handle, value?.Handle ?? UIntPtr.Zero); + set => Native.ZkAiHuman_setNpc(Handle, value == null ? UIntPtr.Zero : ((Npc)value).Handle); } public int WalkMode @@ -610,7 +630,13 @@ public int ActionMode } } - public class AiMove : Ai + public interface IAiMove : IAi + { + IVirtualObject? Vob { get; set; } + INpc? Owner { get; set; } + } + + public class AiMove : Ai, IAiMove { public AiMove() : base(Native.ZkAi_new(AiType.Move)) { @@ -620,28 +646,34 @@ internal AiMove(UIntPtr handle) : base(handle) { } - public VirtualObject? Vob + public IVirtualObject? Vob { get { var val = Native.ZkAiMove_getVob(Handle); return VirtualObject.FromNative(Native.ZkObject_takeRef(val)); } - set => Native.ZkAiMove_setVob(Handle, value?.Handle ?? UIntPtr.Zero); + set => Native.ZkAiMove_setVob(Handle, value == null ? UIntPtr.Zero : ((VirtualObject)value).Handle); } - public Npc? Owner + public INpc? Owner { get { var val = Native.ZkAiMove_getOwner(Handle); return new Npc(Native.ZkObject_takeRef(val)); } - set => Native.ZkAiMove_setOwner(Handle, value?.Handle ?? UIntPtr.Zero); + set => Native.ZkAiMove_setOwner(Handle, value == null ? UIntPtr.Zero : ((Npc)value).Handle); } } - public class EventManager + public interface IEventManager + { + bool Cleared { get; set; } + bool Active { get; set; } + } + + public class EventManager : IEventManager { internal readonly UIntPtr Handle; @@ -673,6 +705,42 @@ public bool Active } } + public interface IVirtualObject + { + VirtualObjectType Type { get; } + int Id { get; } + AxisAlignedBoundingBox BoundingBox { get; set; } + Vector3 Position { get; set; } + Matrix3x3 Rotation { get; set; } + bool ShowVisual { get; set; } + SpriteAlignment SpriteCameraFacingMode { get; set; } + bool CdStatic { get; set; } + bool CdDynamic { get; set; } + bool Static { get; set; } + ShadowType DynamicShadows { get; set; } + bool PhysicsEnabled { get; set; } + AnimationType AnimationType { get; set; } + int Bias { get; set; } + bool Ambient { get; set; } + float AnimationStrength { get; set; } + float FarClipScale { get; set; } + string PresetName { get; set; } + string Name { get; set; } + IVisual? Visual { get; set; } + byte SleepMode { get; set; } + float NextOnTimer { get; set; } + IAi? Ai { get; set; } + IEventManager? EventManager { get; set; } + int ChildCount { get; } + List Children { get; } + IVirtualObject Cache(); + bool IsCached(); + IVirtualObject GetChild(int i); + void AddChild(IVirtualObject obj); + void RemoveChild(int i); + void RemoveChildren(Predicate pred); + } + public class VirtualObject : IVirtualObject { internal readonly UIntPtr Handle; @@ -841,17 +909,17 @@ public float NextOnTimer set => Native.ZkVirtualObject_setNextOnTimer(Handle, value); } - public Ai? Ai + public IAi? Ai { get { var val = Native.ZkVirtualObject_getAi(Handle); return Vobs.Ai.FromNative(Native.ZkObject_takeRef(val)); } - set => Native.ZkVirtualObject_setAi(Handle, value?.Handle ?? UIntPtr.Zero); + set => Native.ZkVirtualObject_setAi(Handle, value == null ? UIntPtr.Zero : ((Ai)value).Handle); } - public EventManager? EventManager + public IEventManager? EventManager { get { @@ -859,7 +927,7 @@ public EventManager? EventManager if (val == UIntPtr.Zero) return null; return new EventManager(Native.ZkObject_takeRef(val)); } - set => Native.ZkVirtualObject_setEventManager(Handle, value?.Handle ?? UIntPtr.Zero); + set => Native.ZkVirtualObject_setEventManager(Handle, value == null ? UIntPtr.Zero : ((EventManager)value).Handle); } @@ -971,31 +1039,47 @@ protected virtual void Delete() } } - public class Spot : VirtualObject + public interface ISpot : IVirtualObject + { + } + + public class Spot : VirtualObject, ISpot { internal Spot(UIntPtr handle) : base(handle) { } } - public class Stair : VirtualObject + public interface IStair : IVirtualObject + { + } + + public class Stair : VirtualObject, IStair { internal Stair(UIntPtr handle) : base(handle) { } } - public class StartPoint : VirtualObject + public interface IStartPoint : IVirtualObject + { + } + + public class StartPoint : VirtualObject, IStartPoint { internal StartPoint(UIntPtr handle) : base(handle) { } } - public class Level : VirtualObject + public interface ILevel : IVirtualObject + { + } + + public class Level : VirtualObject, ILevel { internal Level(UIntPtr handle) : base(handle) { } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/ZoneFarPlane.cs b/ZenKit/Vobs/ZoneFarPlane.cs index 6a6058d..2c193c6 100644 --- a/ZenKit/Vobs/ZoneFarPlane.cs +++ b/ZenKit/Vobs/ZoneFarPlane.cs @@ -2,7 +2,13 @@ namespace ZenKit.Vobs { - public class ZoneFarPlane : VirtualObject + public interface IZoneFarPlane : IVirtualObject + { + float VobFarPlaneZ { get; set; } + float InnerRangePercentage { get; set; } + } + + public class ZoneFarPlane : VirtualObject, IZoneFarPlane { public ZoneFarPlane() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCZoneVobFarPlane)) { @@ -40,7 +46,11 @@ protected override void Delete() } } - public class ZoneFarPlaneDefault : ZoneFarPlane + public interface IZoneFarPlaneDefault : IZoneFarPlane + { + } + + public class ZoneFarPlaneDefault : ZoneFarPlane, IZoneFarPlaneDefault { public ZoneFarPlaneDefault(Read buf, GameVersion version) : base(buf, version) { @@ -54,4 +64,4 @@ internal ZoneFarPlaneDefault(UIntPtr handle) : base(handle) { } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/ZoneFog.cs b/ZenKit/Vobs/ZoneFog.cs index 60b3a5c..d9ba681 100644 --- a/ZenKit/Vobs/ZoneFog.cs +++ b/ZenKit/Vobs/ZoneFog.cs @@ -3,7 +3,16 @@ namespace ZenKit.Vobs { - public class ZoneFog : VirtualObject + public interface IZoneFog : IVirtualObject + { + float RangeCenter { get; set; } + float InnerRangePercentage { get; set; } + Color Color { get; set; } + bool FadeOutSky { get; set; } + bool OverrideColor { get; set; } + } + + public class ZoneFog : VirtualObject, IZoneFog { public ZoneFog() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCZoneZFog)) { @@ -59,7 +68,11 @@ protected override void Delete() } } - public class ZoneFogDefault : ZoneFog + public interface IZoneFogDefault : IZoneFog + { + } + + public class ZoneFogDefault : ZoneFog, IZoneFogDefault { public ZoneFogDefault() : base(Native.ZkVirtualObject_new(VirtualObjectType.zCZoneZFogDefault)) { @@ -77,4 +90,4 @@ internal ZoneFogDefault(UIntPtr handle) : base(handle) { } } -} \ No newline at end of file +} diff --git a/ZenKit/Vobs/ZoneMusic.cs b/ZenKit/Vobs/ZoneMusic.cs index 73deec5..b38794d 100644 --- a/ZenKit/Vobs/ZoneMusic.cs +++ b/ZenKit/Vobs/ZoneMusic.cs @@ -2,7 +2,20 @@ namespace ZenKit.Vobs { - public class ZoneMusic : VirtualObject + public interface IZoneMusic : IVirtualObject + { + bool IsEnabled { get; set; } + int Priority { get; set; } + bool IsEllipsoid { get; set; } + float Reverb { get; set; } + float Volume { get; set; } + bool IsLoop { get; set; } + bool LocalEnabled { get; set; } + bool DayEntranceDone { get; set; } + bool NightEntranceDone { get; set; } + } + + public class ZoneMusic : VirtualObject, IZoneMusic { public ZoneMusic() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCZoneMusic)) { @@ -82,7 +95,11 @@ protected override void Delete() } } - public class ZoneMusicDefault : ZoneMusic + public interface IZoneMusicDefault : IZoneMusic + { + } + + public class ZoneMusicDefault : ZoneMusic, IZoneMusicDefault { public ZoneMusicDefault() : base(Native.ZkVirtualObject_new(VirtualObjectType.oCZoneMusicDefault)) { @@ -100,4 +117,4 @@ internal ZoneMusicDefault(UIntPtr handle) : base(handle) { } } -} \ No newline at end of file +}