コード例 #1
0
        /// <summary>
        /// Removes an actor by channelId
        /// </summary>
        /// <param name="channelId"></param>
        public static void Remove(int channelId)
        {
            var actorInfo = NativeActorMethods.GetActorInfoByChannelId((ushort)channelId);

            if (actorInfo.Id != 0)
            {
                NativeActorMethods.RemoveActor(actorInfo.Id);
            }
        }
コード例 #2
0
        void RemoteInvocation(EntityBase target, MethodInfo method, NetworkTarget netTarget, int channelId = -1, params object[] args)
        {
#if !(RELEASE && RELEASE_DISABLE_CHECKS)
            if (!method.ContainsAttribute <RemoteInvocationAttribute>())
            {
                throw new AttributeUsageException("Method did not contain RemoteInvocation attribute");
            }
            if (target == null)
            {
                throw new RemoteInvocationException("Non-static method owner does not derive from EntityBase.");
            }
#endif

            NativeActorMethods.RemoteInvocation(Id, target.Id, method.Name, args, netTarget, channelId);
        }
コード例 #3
0
        internal static EntityBase CreateNativeEntity(EntityId id, IntPtr entityPointer)
        {
            // check if actor
            var actorInfo = NativeActorMethods.GetActorInfoById((uint)id._value);

            if (actorInfo.Id != 0)
            {
                return(Actor.CreateNativeActor(actorInfo));
            }

            var nativeEntity = new NativeEntity(id, entityPointer);

            ScriptManager.Instance.AddScriptInstance(nativeEntity, ScriptType.Entity);

            return(nativeEntity);
        }
コード例 #4
0
        internal static T CreateCommon <T>(string className, int channelId, string name = "Dude", Vec3?pos = null, Quat?rot = null, Vec3?scale = null) where T : ActorBase
        {
            var actor = Get <T>(channelId);

            if (actor != null)
            {
                return(actor);
            }

            var info = NativeActorMethods.CreateActor(channelId, name, className, pos ?? new Vec3(0, 0, 0), rot ?? Quat.Identity, scale ?? new Vec3(1, 1, 1));

            if (info.Id == 0)
            {
                throw new Exception("Actor creation failed, make sure your IActor implementation is registered with the same name as your managed actor class.");
            }

            return(Get <T>(channelId));
        }
コード例 #5
0
        /// <summary>
        /// Gets the actor with the specified channel id if it exists.
        /// </summary>
        /// <param name="channelId">channelId of the actor you want to obtain</param>
        /// <returns>Actor if found, null otherwise</returns>
        public static ActorBase Get(int channelId)
        {
            var actor = Get <ActorBase>(channelId);

            if (actor != null)
            {
                return(actor);
            }

            var entityInfo = NativeActorMethods.GetActorInfoByChannelId((ushort)channelId);

            if (entityInfo.Id != 0)
            {
                return(CreateNativeActor(entityInfo));
            }

            return(null);
        }
コード例 #6
0
        /// <summary>
        /// Gets the actor with the specified entity id if it exists.
        /// </summary>
        /// <param name="actorId">entityId of the actor you want to obtain</param>
        /// <returns>Actor if found, null otherwise</returns>
        public static ActorBase Get(EntityId actorId)
        {
            var actor = Get <ActorBase>(actorId);

            if (actor != null)
            {
                return(actor);
            }

            // Couldn't find a CryMono entity, check if a non-managed one exists.
            var actorInfo = NativeActorMethods.GetActorInfoById(actorId);

            if (actorInfo.Id != 0)
            {
                return(CreateNativeActor(actorInfo));
            }

            return(null);
        }
コード例 #7
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);
                    }
                }
            }
        }
コード例 #8
0
 /// <summary>
 /// Removes an actor by entity id.
 /// </summary>
 /// <param name="id"></param>
 public static void Remove(EntityId id)
 {
     NativeActorMethods.RemoveActor(id);
 }
コード例 #9
0
ファイル: ScriptManager.cs プロジェクト: BenChung/CryMono
        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);
                    }
                }
            }
        }