Exemple #1
0
 public static IEnumerable <T> QueryProximity <T>(BoundingBox bbox, EntityFlags flags = 0) where T : EntityBase
 {
     return(GetEntitiesCommon <T>(NativeEntityMethods.QueryProximity(bbox, typeof(T).Name, flags)));
 }
Exemple #2
0
 public void SwitchToLightObject(ref LightParams lightParams)
 {
     NativeEntityMethods.BindAttachmentToLight(Handle, ref lightParams);
 }
Exemple #3
0
 /// <summary>
 /// Gets an array of entities that are of a given class.
 /// </summary>
 /// <typeparam name="T">The entity class to search for.</typeparam>
 /// <returns>An array of entities of type T.</returns>
 public static IEnumerable <T> GetByClass <T>() where T : EntityBase
 {
     return(GetEntitiesCommon <T>(NativeEntityMethods.GetEntitiesByClass(typeof(T).Name)));
 }
Exemple #4
0
 /// <summary>
 /// Gets a list of entities within the specified area.
 /// </summary>
 /// <param name="bbox"></param>
 /// <param name="flags"></param>
 /// <returns></returns>
 public static IEnumerable <T> GetInBox <T>(BoundingBox bbox, EntityQueryFlags flags = EntityQueryFlags.All) where T : EntityBase
 {
     return(GetEntitiesCommon <T>(NativeEntityMethods.GetEntitiesInBox(bbox, flags)));
 }
Exemple #5
0
 /// <summary>
 /// Sets the absolute of the specified joint
 /// </summary>
 /// <param name="jointName">Name of the joint</param>
 /// <param name="absolute">New absolute</param>
 /// <param name="characterSlot">Slot containing the character</param>
 public void SetJointAbsolute(string jointName, QuatT absolute, int characterSlot = 0)
 {
     NativeEntityMethods.SetJointAbsolute(this.GetIEntity(), jointName, characterSlot, absolute);
 }
Exemple #6
0
 public ParticleEmitter LoadParticleEmitter(ParticleEffect particleEffect, ref ParticleSpawnParameters spawnParams, int slot = -1)
 {
     return(ParticleEmitter.TryGet(NativeEntityMethods.LoadParticleEmitter(this.GetIEntity(), slot, particleEffect.Handle, ref spawnParams)));
 }
Exemple #7
0
 public static Area GetArea(int areaId)
 {
     return(TryGet(NativeEntityMethods.GetArea(areaId)));
 }
Exemple #8
0
 /// <summary>
 /// Requests movement at the specified slot, providing an animated character is currently loaded.
 /// </summary>
 /// <param name="request"></param>
 public void AddMovement(ref EntityMovementRequest request)
 {
     NativeEntityMethods.AddMovement(this.GetIAnimatedCharacter(), ref request);
 }
Exemple #9
0
        void LoadPlugins(bool initialLoad)
        {
            var pluginsDirectory = PathUtils.PluginsFolder;

            if (!Directory.Exists(pluginsDirectory))
            {
                return;
            }

            bool hasDefaultGameRules = false;

            foreach (var directory in Directory.GetDirectories(pluginsDirectory))
            {
                var compilerDll = Path.Combine(directory, "Compiler.dll");
                if (File.Exists(compilerDll))
                {
                    var assembly = LoadAssembly(compilerDll);

                    var compilerType = assembly.GetTypes().First(x => x.Implements <ScriptCompiler>());
                    Debug.LogAlways("        Initializing {0}...", compilerType.Name);

                    var compiler = Activator.CreateInstance(compilerType) as ScriptCompiler;

                    var assemblyPaths = Directory.GetFiles(directory, "*.dll", SearchOption.AllDirectories);
                    var assemblies    = new List <Assembly>();

                    foreach (var assemblyPath in assemblyPaths)
                    {
                        if (assemblyPath != compilerDll)
                        {
                            assemblies.Add(LoadAssembly(assemblyPath));
                        }
                    }

                    var scripts = compiler.Process(assemblies);

                    foreach (var unprocessedScript in scripts)
                    {
                        var script = unprocessedScript;

                        if (initialLoad)
                        {
                            if (script.RegistrationParams == null)
                            {
                                continue;
                            }
                            else if (script.RegistrationParams is ActorRegistrationParams)
                            {
                                var registrationParams = (ActorRegistrationParams)script.RegistrationParams;

                                NativeActorMethods.RegisterActorClass(script.ScriptName, script.Type.Implements(typeof(NativeActor)));
                            }
                            else if (script.RegistrationParams is EntityRegistrationParams)
                            {
                                var registrationParams = (EntityRegistrationParams)script.RegistrationParams;

                                if (registrationParams.name == null)
                                {
                                    registrationParams.name = script.ScriptName;
                                }
                                if (registrationParams.category == null)
                                {
                                    registrationParams.category = "Default";
                                }

                                NativeEntityMethods.RegisterEntityClass(registrationParams);

                                script.RegistrationParams = registrationParams;
                            }
                            else if (script.RegistrationParams is GameRulesRegistrationParams)
                            {
                                var registrationParams = (GameRulesRegistrationParams)script.RegistrationParams;

                                if (registrationParams.name == null)
                                {
                                    registrationParams.name = script.ScriptName;
                                }

                                NativeGameRulesMethods.RegisterGameMode(registrationParams.name);

                                if (registrationParams.defaultGamemode || !hasDefaultGameRules)
                                {
                                    NativeGameRulesMethods.SetDefaultGameMode(registrationParams.name);

                                    hasDefaultGameRules = true;
                                }

                                script.RegistrationParams = registrationParams;
                            }
                            else if (script.RegistrationParams is FlowNodeRegistrationParams)
                            {
                                var registrationParams = (FlowNodeRegistrationParams)script.RegistrationParams;

                                if (registrationParams.name == null)
                                {
                                    registrationParams.name = script.ScriptName;
                                }
                                if (registrationParams.category == null)
                                {
                                    registrationParams.category = script.Type.Namespace;
                                }
                                if (registrationParams.filter == 0)
                                {
                                    registrationParams.filter = FlowNodeFilter.Approved;
                                }

                                script.RegistrationParams = registrationParams;

                                script.ScriptName = registrationParams.category + ":" + registrationParams.name;
                            }
                            else if (script.RegistrationParams is EntityFlowNodeRegistrationParams)
                            {
                                var registrationParams = (EntityFlowNodeRegistrationParams)script.RegistrationParams;

                                script.ScriptName = "entity" + ":" + registrationParams.entityName;
                            }
                        }

                        Scripts.Add(script);
                    }
                }
            }
        }
Exemple #10
0
        void ProcessWaitingScripts(bool initialLoad)
        {
            bool hasDefaultGameRules = false;

            foreach (var pluginPair in PluginTypes)
            {
                ICryMonoPlugin plugin = pluginPair.Key;

                foreach (Type type in pluginPair.Value)
                {
                    var script = FindScript(ScriptType.Any, x => x.Type == type);
                    if (script == null)
                    {
                        if (!CryScript.TryCreate(type, out script))
                        {
                            continue;
                        }
                    }

                    script.RegistrationParams = plugin.GetRegistrationParams(script.ScriptType, type);

                    if (!script.Registered)
                    {
                        if (script == null || script.RegistrationParams == null)
                        {
                            continue;
                        }

                        // Contain types that can only be registered at startup here.
                        if (initialLoad)
                        {
                            if (script.RegistrationParams is ActorRegistrationParams)
                            {
                                var registrationParams = (ActorRegistrationParams)script.RegistrationParams;

                                NativeActorMethods.RegisterActorClass(script.ScriptName, script.Type.Implements(typeof(NativeActor)), registrationParams.isAI);
                            }
                            else if (script.RegistrationParams is EntityRegistrationParams)
                            {
                                var registrationParams = (EntityRegistrationParams)script.RegistrationParams;

                                if (registrationParams.name == null)
                                {
                                    registrationParams.name = script.ScriptName;
                                }
                                if (registrationParams.category == null)
                                {
                                    registrationParams.category = "Default";
                                }

                                NativeEntityMethods.RegisterEntityClass(registrationParams);

                                script.RegistrationParams = registrationParams;
                            }
                        }

                        if (script.RegistrationParams is GameRulesRegistrationParams)
                        {
                            var registrationParams = (GameRulesRegistrationParams)script.RegistrationParams;

                            if (registrationParams.name == null)
                            {
                                registrationParams.name = script.ScriptName;
                            }

                            NativeGameRulesMethods.RegisterGameMode(registrationParams.name);

                            if (registrationParams.defaultGamemode || !hasDefaultGameRules)
                            {
                                NativeGameRulesMethods.SetDefaultGameMode(registrationParams.name);

                                hasDefaultGameRules = true;
                            }

                            script.RegistrationParams = registrationParams;
                        }
                        else if (script.RegistrationParams is FlowNodeRegistrationParams)
                        {
                            var registrationParams = (FlowNodeRegistrationParams)script.RegistrationParams;

                            if (registrationParams.name == null)
                            {
                                registrationParams.name = script.ScriptName;
                            }
                            if (registrationParams.category == null)
                            {
                                registrationParams.category = script.Type.Namespace;
                            }
                            if (registrationParams.filter == 0)
                            {
                                registrationParams.filter = FlowNodeFilter.Approved;
                            }

                            script.RegistrationParams = registrationParams;

                            script.ScriptName = registrationParams.category + ":" + registrationParams.name;
                        }
                        else if (script.RegistrationParams is EntityFlowNodeRegistrationParams)
                        {
                            var registrationParams = (EntityFlowNodeRegistrationParams)script.RegistrationParams;

                            script.ScriptName = "entity" + ":" + registrationParams.entityName;
                        }

                        script.Registered = true;
                        Scripts.Add(script);
                    }
                }
            }
        }
Exemple #11
0
 public void Break(BreakageParameters breakageParams)
 {
     NativeEntityMethods.BreakIntoPieces(Owner.GetIEntity(), 0, 0, breakageParams);
 }
Exemple #12
0
 public void ClearBinding()
 {
     NativeEntityMethods.ClearAttachmentBinding(Handle);
 }
Exemple #13
0
 public void SwitchToParticleEffectObject(ParticleEffect effect, Vec3 offset, Vec3 dir, float scale)
 {
     NativeEntityMethods.BindAttachmentToParticleEffect(Handle, effect.Handle, offset, dir, scale);
 }
Exemple #14
0
 /// <summary>
 /// Plays a raw animation.
 /// </summary>
 /// <param name="animationName">Name of the animation we wish to play</param>
 /// <param name="flags"></param>
 /// <param name="slot">Slot on which to play the animation</param>
 /// <param name="layer">Animation layer to play the animation in.</param>
 /// <param name="blend">Transition time between two animations.</param>
 /// <param name="speed">Animation playback speed</param>
 public void PlayAnimation(string animationName, AnimationFlags flags = 0, int slot = 0, int layer = 0, float blend = 0.175f, float speed = 1.0f)
 {
     NativeEntityMethods.PlayAnimation(this.GetIEntity(), animationName, slot, layer, blend, speed, flags);
 }
Exemple #15
0
        public static IEnumerable <AreaQueryResult> QueryAreas(EntityId id, Vec3 pos, int maxResults, bool forceCalculation)
        {
            var objAreas = NativeEntityMethods.QueryAreas(id, pos, maxResults, forceCalculation);

            return(objAreas.Cast <AreaQueryResult>());
        }
Exemple #16
0
 /// <summary>
 /// Frees the specified slot of all objects.
 /// </summary>
 /// <param name="slot"></param>
 public void FreeSlot(int slot)
 {
     NativeEntityMethods.FreeSlot(this.GetIEntity(), slot);
 }
Exemple #17
0
 public EntityId GetEntityIdByIndex(int index)
 {
     return(NativeEntityMethods.GetAreaEntityByIdx(Handle, index));
 }
Exemple #18
0
 /// <summary>
 /// Gets the absolute of the specified joint
 /// </summary>
 /// <param name="jointName">Name of the joint</param>
 /// <param name="characterSlot">Slot containing the character</param>
 /// <returns>Absolute of the specified joint</returns>
 public QuatT GetJointAbsolute(string jointName, int characterSlot = 0)
 {
     return(NativeEntityMethods.GetJointAbsolute(this.GetIEntity(), jointName, characterSlot));
 }
Exemple #19
0
 /// <summary>
 /// Retrieves the flags of the specified slot.
 /// </summary>
 /// <param name="slot">Index of the slot</param>
 /// <returns>The slot flags, or 0 if specified slot is not valid.</returns>
 public EntitySlotFlags GetSlotFlags(int slot = 0)
 {
     return(NativeEntityMethods.GetSlotFlags(this.GetIEntity(), slot));
 }
Exemple #20
0
 /// <summary>
 /// Gets the default relative of the specified joint
 /// </summary>
 /// <param name="jointName">Name of the joint</param>
 /// <param name="characterSlot">Slot containing the character</param>
 /// <returns>Default relative of the specified joint</returns>
 public QuatT GetJointRelativeDefault(string jointName, int characterSlot = 0)
 {
     return(NativeEntityMethods.GetJointRelativeDefault(this.GetIEntity(), jointName, characterSlot));
 }
Exemple #21
0
 /// <summary>
 /// Sets the flags of the specified slot.
 /// </summary>
 /// <param name="flags">Flags to set.</param>
 /// <param name="slot">Index of the slot, if -1 apply to all existing slots.</param>
 public void SetSlotFlags(EntitySlotFlags flags, int slot = 0)
 {
     NativeEntityMethods.SetSlotFlags(this.GetIEntity(), slot, flags);
 }
Exemple #22
0
 /// <summary>
 /// Invalidate the TriggerBounds, so it gets recalculated and catches things which are already inside when it gets enabled.
 /// </summary>
 public void InvalidateTrigger()
 {
     NativeEntityMethods.InvalidateTrigger(this.GetIEntity());;
 }
Exemple #23
0
 /// <summary>
 /// Gets the number of attachments at the specified character slot.
 /// </summary>
 /// <param name="characterSlot">Index of the slot we wish to get the attachment count of</param>
 /// <returns>Number of attachments at the specified slot</returns>
 public int GetAttachmentCount(int characterSlot = 0)
 {
     return(NativeEntityMethods.GetAttachmentCount(this.GetIEntity(), characterSlot));
 }
Exemple #24
0
 public static IEnumerable <EntityBase> GetByClasses(string[] classNames)
 {
     return(GetEntitiesCommon <Entity>(NativeEntityMethods.GetEntitiesByClasses(classNames.Cast <object>().ToArray())));
 }
Exemple #25
0
 /// <summary>
 /// Loads a light source to the specified slot, or to the next available slot.
 /// </summary>
 /// <param name="parameters">New params of the light source we wish to load</param>
 /// <param name="slot">Slot we want to load the light into, if -1 chooses the next available slot.</param>
 /// <returns>The slot where the light source was loaded, or -1 if loading failed.</returns>
 public int LoadLight(LightParams parameters, int slot = 1)
 {
     return(NativeEntityMethods.LoadLight(this.GetIEntity(), slot, parameters));
 }
Exemple #26
0
 public static IEnumerable <EntityBase> QueryProximity(BoundingBox bbox, string className, EntityFlags flags = 0)
 {
     return(GetEntitiesCommon <EntityBase>(NativeEntityMethods.QueryProximity(bbox, className, flags)));
 }
Exemple #27
0
 /// <summary>
 /// Gets the path to the currently loaded object.
 /// </summary>
 /// <param name="slot">Slot containing the object we want to know the path of.</param>
 /// <returns>Path to the currently loaded object at the specified slot.</returns>
 public string GetObjectFilePath(int slot = 0)
 {
     return(NativeEntityMethods.GetStaticObjectFilePath(this.GetIEntity(), slot));
 }
Exemple #28
0
 public static EntityLink Create(EntityBase parent, EntityBase slave, string linkName, Vec3?relativePos = null, Quat?relativeRot = null)
 {
     return(new EntityLink(NativeEntityMethods.AddEntityLink(parent.GetIEntity(), linkName, slave.Id, relativeRot ?? Quat.Identity, relativePos ?? Vec3.Zero), parent));
 }
Exemple #29
0
 public void SwitchToEntityObject(EntityId entityId)
 {
     NativeEntityMethods.BindAttachmentToEntity(Handle, entityId);
 }