Пример #1
0
 public IdleTask(ParentNode _parent, AIBehaviour _behaviourRoot)
 {
     m_parent = _parent;
     m_parent.AddChild(this);
     m_behaviourRoot = _behaviourRoot;
     m_aimodelSelf   = m_behaviourRoot.Model;
 }
Пример #2
0
        public IHandlerBuilder Index()
        {
            var model = new AIModel(_AIs);

            return(ModScriban.Page(Resource.FromAssembly("ai_index.html"), (r, h) => new ViewModel <AIModel>(r, h, model))
                   .Title("Models"));
        }
Пример #3
0
    public void NewGeneration()
    {
        // sort by fitness
        brainsList.Sort(KartBrain.CompareFitness);

        for (int i = elitKeepCount; i < brainsList.Count; i++)
        {
            KartBrain parent1 = ChooseParent();
            KartBrain parent2 = ChooseParent();

            brainsList[i].aiModel = AIModel.Crossover(parent1.aiModel, parent2.aiModel);

            brainsList[i].MutateModel(mutationRate, mutationStrength);
        }

        for (int i = 0; i < brainsList.Count; ++i)
        {
            brainsList[i].ResetFitness();
        }

        ++generation;
        bestFitness        = 0;
        genertionStartTime = Time.time;
        SpawnKart();
    }
Пример #4
0
        public TransitionExport(Perso perso)
        {
            AIModel model = perso.brain.mind.AI_model;

            if (model == null)
            {
                return;
            }
            Behavior[] normalBehaviors = model.behaviors_normal; // normal/intelligence/rul behaviors
            Behavior[] reflexBehaviors = model.behaviors_reflex; // reflex behaviors

            this.normalStates = new List <State>();
            this.reflexStates = new List <State>();

            if (normalBehaviors != null)
            {
                foreach (Behavior b in normalBehaviors)
                {
                    normalStates.Add(CreateStateFromBehavior(b));
                }
            }

            if (reflexBehaviors != null)
            {
                foreach (Behavior b in reflexBehaviors)
                {
                    reflexStates.Add(CreateStateFromBehavior(b));
                }
            }

            stateDiagram = new StateDiagram();
            stateDiagram.normalStates = normalStates;
            stateDiagram.reflexStates = reflexStates;
            this.json = GetJson();
        }
Пример #5
0
    public override void Init()
    {
        base.Init();
        layer = GameLayer.Fight;

        playerModel = ModelManager.Get("PlayerModel") as PlayerModel;
        aiModel     = ModelManager.Get("AIModel") as AIModel;
    }
Пример #6
0
    public override void OnInspectorGUI()
    {
        MindComponent c = (MindComponent)target;

        Intelligence intelligenceNormal = c.mind.intelligenceNormal;
        Intelligence intelligenceReflex = c.mind.intelligenceReflex;
        AIModel      aiModel            = c.mind.AI_model;

        GUILayout.BeginHorizontal();
        if (aiModel.behaviors_normal != null && aiModel.behaviors_normal.Length > 0)
        {
            int           activeNormalComportIndex = intelligenceNormal.comport != null ? intelligenceNormal.comport.index + 1 : 0;
            List <string> normalComportStrings     = aiModel.behaviors_normal.Select(b => b.ToString()).ToList();
            normalComportStrings.Insert(0, "<null>");

            GUILayout.Label("Current normal behavior");
            int o = activeNormalComportIndex - 1;
            activeNormalComportIndex = EditorGUILayout.Popup(activeNormalComportIndex, normalComportStrings.ToArray()) - 1;
            if (activeNormalComportIndex != o)
            {
                c.writeNormalComport       = true;
                intelligenceNormal.comport = activeNormalComportIndex >= 0 ? aiModel.behaviors_normal[activeNormalComportIndex] : null;
            }
        }
        else
        {
            GUILayout.Label("No normal behaviors");
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        if (aiModel.behaviors_reflex != null && aiModel.behaviors_reflex.Length > 0)
        {
            int           activeReflexComportIndex = intelligenceReflex.comport != null ? intelligenceReflex.comport.index + 1 : 0;
            List <string> reflexComportStrings     = aiModel.behaviors_reflex.Select(b => b.ToString()).ToList();
            reflexComportStrings.Insert(0, "<null>");

            GUILayout.Label("Current reflex behavior");
            int o = activeReflexComportIndex - 1;
            activeReflexComportIndex = EditorGUILayout.Popup(activeReflexComportIndex, reflexComportStrings.ToArray()) - 1;
            if (activeReflexComportIndex != o)
            {
                c.writeReflexComport       = true;
                intelligenceReflex.comport = activeReflexComportIndex >= 0 ? aiModel.behaviors_reflex[activeReflexComportIndex] : null;
            }
        }
        else
        {
            GUILayout.Label("No reflex behaviors");
        }
        GUILayout.EndHorizontal();

        if (GUILayout.Button("Export transitions"))
        {
            MindComponent.print(c.TransitionExport);
        }
    }
Пример #7
0
 private void Awake()
 {
     kartController            = GetComponent <KartController>();
     rayCastSensors            = GetComponent <RayCastSensors>();
     rayCastSensors.RaysNumber = 9;
     rayCastSensors.rayLength  = 20f;
     int[] layersDim = new int[] { rayCastSensors.RaysNumber, 2 };
     aiModel   = new AIModel(layersDim);
     aiFitness = new AIFitness();
 }
Пример #8
0
    public EnemyModel(EnemyCharacterType enemyType, int damage, string currentWord, params string[] nextWords)
    {
        EnemyType   = enemyType;
        Damage      = damage;
        WordsHolder = new WordsHolder(currentWord, nextWords);
        WordsHitter = new WordsHitter(WordsHolder, GetCharHitsNeeded());
        AIModel     = new AIModel();

        WordsHolder.WordCycledEvent += OnWordCycledEvent;
    }
Пример #9
0
        public IHttpActionResult Save(Guid id, AIModel value)
        {
            if (string.IsNullOrWhiteSpace(value?.Result))
            {
                return(BadRequest("AI Result is required."));
            }

            var response = _contacts.SetAIResult(id, value.Result);

            return(Ok(new { success = response }));
        }
Пример #10
0
        private IEnumerator GenerateAICommands()
        {
            if (Model.GamePhase == GamePhase.TeamPicking || Model.GamePhase == GamePhase.MissionVoting)
            {
                yield return(new WaitForSeconds(AiWaitSec));
            }
            List <BaseCommand> commands = new List <BaseCommand>();

            Model.Players.Where(player => !TakenId.Contains(player.Id)).ToList().
            ForEach(player => commands.Add(AIModel.TryGenerateAICommand(Model, player)));
            commands.RemoveAll(command => command == null);
            commands.ForEach(command => Model.AddCommand(command));
        }
Пример #11
0
        public static AIModelMetaData FromAIModel(AIModel m, string name, string[] initialRule, string[] initialReflex)
        {
            Dictionary <PointerInMap, string>     offsetToBehaviourNameMap  = new Dictionary <PointerInMap, string>();
            Dictionary <PointerInMap, PersoNames> offsetToPersoModelNameMap = new Dictionary <PointerInMap, PersoNames>();

            string map = MapLoader.Loader.lvlName;

            foreach (var p in MapLoader.Loader.persos)
            {
                offsetToPersoModelNameMap.Add(new PointerInMap(map, p.offset.FileOffset), new PersoNames(p.namePerso, p.nameModel + "__" + p.nameFamily, p.nameFamily));
            }

            if (m.behaviors_normal != null)
            {
                foreach (var rule in m.behaviors_normal)
                {
                    offsetToBehaviourNameMap.Add(new PointerInMap(map, rule.Offset.offset), rule.NameSubstring);
                }
            }

            if (m.behaviors_reflex != null)
            {
                foreach (var reflex in m.behaviors_reflex)
                {
                    offsetToBehaviourNameMap.Add(new PointerInMap(map, reflex.Offset.offset), reflex.NameSubstring);
                }
            }

            if (m.macros != null)
            {
                foreach (var macro in m.macros)
                {
                    offsetToBehaviourNameMap.Add(new PointerInMap(map, macro.Offset.offset), macro.NameSubstring);
                }
            }

            List <DsgVar> dsgVars = new List <DsgVar>();

            int iter = 0;

            if (m.dsgVar?.dsgVarInfos != null)
            {
                foreach (var d in m.dsgVar.dsgVarInfos)
                {
                    dsgVars.Add(new DsgVar(d.type, m.dsgVar.defaultValues[iter].GetUntypedValue()));
                    iter++;
                }
            }

            return(new AIModelMetaData(m.Offset.offset, MapLoader.Loader.lvlName, name, initialRule, initialReflex, dsgVars, offsetToBehaviourNameMap, offsetToPersoModelNameMap));
        }
Пример #12
0
    public static AIModel Crossover(AIModel a, AIModel b)
    {
        if (!a.layersDim.SequenceEqual(b.layersDim))
        {
            Debug.LogError("Both models must share the same architecture to be mixed.");
        }
        AIModel res = new AIModel(a.layersDim);

        for (int i = 0; i < res.layers.Count; ++i)
        {
            res.layers[i] = Layer.Crossover(a.layers[i], b.layers[i]);
        }
        return(res);
    }
Пример #13
0
    public void SpawnMob(Vector3 position, Quaternion rotation, string mobModelName)
    {
        AIModel model = AIRepository.GetAIModelByName(mobModelName);

        if (model == null)
        {
            throw new ApplicationException("Could not find a model named " + mobModelName + ".");
        }

        MobActuator actuator;
        GameObject  mobObject = (GameObject)Instantiate(MobTemplate, position, rotation);

        actuator = mobObject.GetComponent <MobActuator>();
        actuator.RealizeModel(model);
    }
Пример #14
0
 public void PrintScripts()
 {
     if (loaded && hasStates)
     {
         if (perso.brain != null &&
             perso.brain.mind != null &&
             perso.brain.mind.AI_model != null)
         {
             AIModel ai = perso.brain.mind.AI_model;
             if (ai.behaviors_normal != null)
             {
                 for (int i = 0; i < ai.behaviors_normal.Length; i++)
                 {
                     if (ai.behaviors_normal[i].scripts != null)
                     {
                         for (int j = 0; j < ai.behaviors_normal[i].scripts.Length; j++)
                         {
                             perso.brain.mind.AI_model.behaviors_normal[i].scripts[j].print(perso);
                         }
                     }
                 }
             }
             if (ai.behaviors_reflex != null)
             {
                 for (int i = 0; i < ai.behaviors_reflex.Length; i++)
                 {
                     if (ai.behaviors_reflex[i].scripts != null)
                     {
                         for (int j = 0; j < ai.behaviors_reflex[i].scripts.Length; j++)
                         {
                             perso.brain.mind.AI_model.behaviors_reflex[i].scripts[j].print(perso);
                         }
                     }
                 }
             }
             if (ai.macros != null)
             {
                 for (int i = 0; i < ai.macros.Length; i++)
                 {
                     if (ai.macros[i].script != null)
                     {
                         perso.brain.mind.AI_model.macros[i].script.print(perso);
                     }
                 }
             }
         }
     }
 }
Пример #15
0
    AIBehaviour m_aibehaviourThis;              //The Behaviour to be used for this AI

    // Use this for initialization
    void Start()
    {
        m_aimodelThis = GetComponent <AIModel>();    //Initialize the model


#pragma warning disable 0219
        //From here on the Behaviourtree is constructed; For more info on this you can find a graphic of the tree:
        m_aibehaviourThis = new AIBehaviour(m_aimodelThis);
        {
            Selector selectorIdleOrAction = new Selector(m_aibehaviourThis);
            {
                Sequence sequenceConditionsOrIdle = new Sequence(selectorIdleOrAction);
                {
                    //if the player is dead => idle
                    //if the player is not dead and not in range => idle
                    //if the payer is not dead and in range => idle
                    Selector                   selectorDeadOrNotInRange = new Selector(sequenceConditionsOrIdle);
                    Condition_PlayerDead       conditionDead            = new Condition_PlayerDead(selectorDeadOrNotInRange, m_aibehaviourThis);
                    Inverter                   inverterNotInRange       = new Inverter(selectorDeadOrNotInRange);
                    Condition_InDetectionRange conditionInRange         = new Condition_InDetectionRange(inverterNotInRange, m_aibehaviourThis);
                    IdleTask                   idleTask = new IdleTask(sequenceConditionsOrIdle, m_aibehaviourThis);
                }
                Selector selectorFleeOrFight = new Selector(selectorIdleOrAction);
                {
                    Sequence sequenceConditionsThenFlee = new Sequence(selectorFleeOrFight);
                    {
                        Selector selectorTimerOrHealth = new Selector(sequenceConditionsThenFlee);
                        {
                            Condition_FleeTimerRunning conditionFleeDelay        = new Condition_FleeTimerRunning(selectorTimerOrHealth, m_aibehaviourThis);
                            Condition_HealthLow        conditionHealthHighEnough = new Condition_HealthLow(selectorTimerOrHealth, m_aibehaviourThis);
                        }
                        FleeTask fleetask = new FleeTask(sequenceConditionsThenFlee, m_aibehaviourThis);
                    }
                    AttackTask attackTask = new AttackTask(selectorFleeOrFight, m_aibehaviourThis);
                }
            }
        }
#pragma warning restore 0219
        m_aibehaviourThis.StartBehaviour();                             //After constructing the Behaviour, start it
        InvokeRepeating("UpdateAIBehaviour", m_fTickRate, m_fTickRate); //Start regularly updating the AI after one "tick"

        //Subscribe to the Model to see if it is Dead in order to stop ticking
        m_aimodelThis.m_modelstateCurrent
        .Where(m_modelstateCurrent => m_modelstateCurrent == ModelState.Dead)
        .Subscribe(m_modelstateCurrent => CancelInvoke());
    }
Пример #16
0
    private JSONObject GetBehaviorJSON(Perso perso, BehaviorOrMacro behavior,
                                       AIModel model, Behavior.BehaviorType?type, int index,
                                       bool includeScriptContents)
    {
        JSONObject behaviorJSON = new JSONObject();
        string     name;

        if (behavior is Macro)
        {
            Macro m = behavior as Macro;
            name = m.GetShortName(model, index);
            if (m.script == null)
            {
                name += " (null)";
            }
            if (m.script != null)
            {
                behaviorJSON["script"] = GetScriptJSON(perso, m.script, includeScriptContents);
            }
            behaviorJSON["type"] = "Macro";
        }
        else
        {
            Behavior b = behavior as Behavior;
            name = b.GetShortName(model, type.Value, index);
            JSONArray scripts = new JSONArray();
            foreach (Script script in b.scripts)
            {
                if (script != null)
                {
                    scripts.Add(GetScriptJSON(perso, script, includeScriptContents));
                }
            }
            behaviorJSON["scripts"] = scripts;
            behaviorJSON["type"]    = b.type.ToString();
            if (b.firstScript != null)
            {
                behaviorJSON["firstScript"] = GetScriptJSON(perso, b.firstScript, includeScriptContents);
            }
        }

        behaviorJSON["name"] = name;
        return(behaviorJSON);
    }
Пример #17
0
        private void ReadBehaviorCopy(Reader reader, Pointer offset, AIModel ai)
        {
            Behavior b = Behavior.Read(reader, offset);

            if (b != null && ai != null && ai.behaviors_normal != null)
            {
                foreach (Behavior originalBehavior in ai.behaviors_normal)
                {
                    if (b.ContentEquals(originalBehavior))
                    {
                        originalBehavior.copies.Add(b.offset);
                        b = null;
                        break;
                    }
                }
            }
            if (b != null && ai != null && ai.behaviors_reflex != null)
            {
                foreach (Behavior originalBehavior in ai.behaviors_reflex)
                {
                    if (b.ContentEquals(originalBehavior))
                    {
                        originalBehavior.copies.Add(b.offset);
                        b = null;
                        break;
                    }
                }
            }
            if (b != null && behaviors != null)
            {
                foreach (Behavior originalBehavior in behaviors)
                {
                    if (b.ContentEquals(originalBehavior))
                    {
                        originalBehavior.copies.Add(b.offset);
                        b = null;
                        break;
                    }
                }
            }
        }
Пример #18
0
        private void ReadLog(Stream logStream)
        {
            string logPattern         = @"^0x(?<offset>[a-fA-F0-9]+?) : \((?<type>[^\)]+?)\)(?<name>.*?)    0x(?<offset2>[a-fA-F0-9]+?)$";
            string comportNamePattern = @"^(?<family>[^\\]+?)\\(?<model>[^\\]+?)\\(?<model2>[^\\]+?)\.(?<type>...?)\^.*$";
            DCDAT  file = files_array[0] as DCDAT;

            using (StreamReader sr = new StreamReader(logStream)) {
                while (sr.Peek() >= 0)
                {
                    string line     = sr.ReadLine().Trim();
                    Match  logMatch = Regex.Match(line, logPattern, RegexOptions.IgnoreCase);
                    if (logMatch.Success)
                    {
                        string offsetStr  = logMatch.Groups["offset"].Value;
                        string type       = logMatch.Groups["type"].Value;
                        string name       = logMatch.Groups["name"].Value;
                        string offset2Str = logMatch.Groups["offset2"].Value;
                        if (offsetStr.Length < 8)
                        {
                            offsetStr = new String('0', offsetStr.Length - 8) + offsetStr;
                        }
                        uint    offsetUint = Convert.ToUInt32(offsetStr, 16);
                        Pointer offset     = file.GetUnsafePointer(offsetUint);
                        switch (type)
                        {
                        case "eST_Comport":
                            Behavior b = Behavior.FromOffset(offset);
                            if (b == null)
                            {
                                Match comportMatch = Regex.Match(name, comportNamePattern, RegexOptions.IgnoreCase);
                                if (comportMatch.Success)
                                {
                                    string  modelName = comportMatch.Groups["model"].Value;
                                    AIModel aiModel   = aiModels.FirstOrDefault(ai => ai.name == modelName);
                                    Reader  reader    = files_array[Mem.Fix].reader;
                                    Pointer.DoAt(ref reader, offset, () => {
                                        Behavior newB = Behavior.Read(reader, offset);
                                        if (aiModel != null && newB != null)
                                        {
                                            switch (comportMatch.Groups["type"].Value)
                                            {
                                            case "rul":
                                                foreach (Behavior originalBehavior in aiModel.behaviors_normal)
                                                {
                                                    if (newB.ContentEquals(originalBehavior))
                                                    {
                                                        originalBehavior.copies.Add(newB.offset);
                                                        b = originalBehavior;
                                                        break;
                                                    }
                                                }
                                                break;

                                            case "rfx":
                                                foreach (Behavior originalBehavior in aiModel.behaviors_reflex)
                                                {
                                                    if (newB.ContentEquals(originalBehavior))
                                                    {
                                                        originalBehavior.copies.Add(newB.offset);
                                                        b = originalBehavior;
                                                        break;
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                    });
                                }
                            }
                            if (b != null)
                            {
                                b.name = name;
                            }

                            /*if (name.Contains("piranha\\MIC_PiranhaSauteurVisible\\MIC_PiranhaSauteurVisible")) {
                             *  print("Offset: " + offset + " - " + b);
                             * }*/
                            break;

                        case "eST_State":
                            State state = State.FromOffset(offset);
                            if (state != null)
                            {
                                state.name = name;
                            }
                            break;

                        case "eST_Anim3d":
                            AnimationReference ar = FromOffset <AnimationReference>(offset);
                            if (ar != null)
                            {
                                ar.name = name;
                            }
                            break;

                        case "eST_Graph":
                            Graph g = Graph.FromOffset(offset);
                            if (g != null)
                            {
                                g.name = name;
                            }
                            break;

                        case "eST_Sector":
                            Sector s = Sector.FromOffset(offset);
                            if (s != null)
                            {
                                s.name     = name;
                                s.Gao.name = name;
                            }
                            break;
                        }
                    }
                }
            }
        }
Пример #19
0
 public Condition_FleeTimerRunning(ParentNode _parent, AIBehaviour _behaviourRoot)
 {
     m_parent = _parent;
     m_parent.AddChild(this);
     m_aimodelSelf = _behaviourRoot.Model;
 }
Пример #20
0
        public ActionResult SaveData(AIModel data)
        {
            var response = _contacts.SetAITraining(data.ContactId, data.Training);

            return(Json(new { success = response }, JsonRequestBehavior.AllowGet));
        }
Пример #21
0
 public SaveState(AIModel aiModel)
 {
     this.aiModel = aiModel;
 }
Пример #22
0
 //Standard Constructor
 public AIBehaviour(AIModel _aimodel)
 {
     m_aimodelSelf        = _aimodel;
     m_listtasknodeActive = new List <TaskNode>();
 }
 public Condition_InDetectionRange(ParentNode _parent, AIBehaviour _behaviourRoot)
 {
     m_parent = _parent;
     m_parent.AddChild(this);
     m_aimodelSelf = _behaviourRoot.Model;
 }
Пример #24
0
        public static string AIModelToCSharp_R2(string nameSpace, AIModel ai)
        {
            string dsgVars = "";//  TODO

            if (ai.dsgVar != null)
            {
                for (int i = 0; i < ai.dsgVar.dsgVarInfos.Length; i++)
                {
                    dsgVars += "public " + DsgVarUtil.DsgVarEntryToCSharpAssignment(ai.dsgVar, i) + Environment.NewLine;
                }
            }

            List <string> ruleStatesInitializer   = new List <string>();
            List <string> reflexStatesInitializer = new List <string>();

            TranslatedScript.TranslationSettings translationSettings = new TranslatedScript.TranslationSettings()
            {
                expandEntryActions = false,
                expandStrings      = false,
                useStateIndex      = true,
                exportMode         = true,
                useHashIdentifiers = true
            };

            string behaviorsNormal = "";

            if (ai.behaviors_normal != null)
            {
                for (int i = 0; i < ai.behaviors_normal.Length; i++)
                {
                    if (ai.behaviors_normal[i].scripts != null)
                    {
                        string combinedScript = "public async Task Rule_" + i + "_" + ai.behaviors_normal[i].name + "() {" + Environment.NewLine;
                        ruleStatesInitializer.Add("Rule_" + i + "_" + ai.behaviors_normal[i].name);
                        for (int j = 0; j < ai.behaviors_normal[i].scripts.Length; j++)
                        {
                            TranslatedScript ts = new TranslatedScript(ai.behaviors_normal[i].scripts[j], null);
                            ts.settings     = translationSettings;
                            combinedScript += "// Script " + j + Environment.NewLine + ts.ToCSharpString_R2() + Environment.NewLine;
                        }
                        combinedScript  += "}";
                        behaviorsNormal += combinedScript + Environment.NewLine;
                    }
                }
            }

            string behaviorsReflex = "";

            if (ai.behaviors_reflex != null)
            {
                for (int i = 0; i < ai.behaviors_reflex.Length; i++)
                {
                    if (ai.behaviors_reflex[i].scripts != null)
                    {
                        string combinedScript = "public async Task Reflex_" + i + "_" + ai.behaviors_reflex[i].name + "() {" + Environment.NewLine;
                        for (int j = 0; j < ai.behaviors_reflex[i].scripts.Length; j++)
                        {
                            reflexStatesInitializer.Add("Reflex_" + i + "_" + ai.behaviors_reflex[i].name);
                            TranslatedScript ts = new TranslatedScript(ai.behaviors_reflex[i].scripts[j], null);
                            ts.settings     = translationSettings;
                            combinedScript += "// Script " + j + Environment.NewLine + ts.ToCSharpString_R2() + Environment.NewLine;
                        }
                        combinedScript  += "}";
                        behaviorsReflex += combinedScript + Environment.NewLine;
                    }
                }
            }

            string macros = "";

            if (ai.macros != null)
            {
                for (int i = 0; i < ai.macros.Length; i++)
                {
                    if (ai.macros[i].script != null)
                    {
                        string           combinedScript = "private async Task Macro_" + i + "() {" + Environment.NewLine;
                        TranslatedScript ts             = new TranslatedScript(ai.macros[i].script, null);
                        ts.settings     = translationSettings;
                        combinedScript += ts.ToCSharpString_R2() + Environment.NewLine + "}";
                        macros         += combinedScript + Environment.NewLine;
                    }
                }
            }

            // DONE TODO: replace evalMacro calls by replacing regex "evalMacro\([a-zA-Z0-9_]*\.Macro\[([0-9]+)\]\)" to "yield return Macro_$1()"
            // TODO: replace Proc_ChangeMyComport\([a-zA-Z0-9_]+\.Rule\[[0-9]+\]\[\"([^"]+)\"\]\)     with     sm.ChangeActiveRuleState("$1")
            // TODO: replace Cond_IsValidObject\(([^\)]+)\)    with $1 != null

            string startString = "protected override void Start() {" + Environment.NewLine + "base.Start();" + Environment.NewLine + Environment.NewLine;

            if (ruleStatesInitializer.Count > 0)
            {
                startString += "smRule.SetState(" + ruleStatesInitializer[0] + ");" + Environment.NewLine;
            }

            if (reflexStatesInitializer.Count > 0)
            {
                startString += "smReflex.SetState(" + reflexStatesInitializer[0] + ");" + Environment.NewLine;
            }

            startString += "}";

            string[] usingItems = new string[] {
                "UnityEngine",
                "System.Threading.Tasks",
                "System.Collections.Generic",
                "OpenSpaceImplementation",
                "OpenSpaceImplementation.AI",
                "OpenSpaceImplementation.Materials",
                "OpenSpaceImplementation.Input",
                "OpenSpaceImplementation.Sound",
                "OpenSpaceImplementation.Strings",
                "OpenSpaceImplementation.Waypoints",
                "OpenSpaceImplementation.Animation"
            };

            string usingBlock = string.Join(Environment.NewLine, usingItems.Select(i => "using " + i + ";"));

            string[] resultItems = new string[] {
                usingBlock,
                "namespace " + nameSpace + " {",
                "public partial class " + ai.name + " : Perso {",
                dsgVars,
                startString,
                behaviorsNormal,
                behaviorsReflex,
                macros,
                "}",
                "}"
            };

            return(string.Join(Environment.NewLine, resultItems));
        }
Пример #25
0
    private Script GetScriptFromRequest(JSONNode msg)
    {
        if (selector.selectedPerso == null ||
            selector.selectedPerso.perso.brain == null ||
            selector.selectedPerso.perso.brain.mind == null ||
            selector.selectedPerso.perso.brain.mind.AI_model == null)
        {
            return(null);
        }
        AIModel ai     = selector.selectedPerso.perso.brain.mind.AI_model;
        string  offset = msg["scriptOffset"];

        switch ((string)msg["behaviorType"])
        {
        case "Rule":
            if (ai.behaviors_normal == null)
            {
                return(null);
            }
            foreach (Behavior be in ai.behaviors_normal)
            {
                if (be.firstScript != null && be.firstScript.offset.ToString() == offset)
                {
                    return(be.firstScript);
                }
                foreach (Script s in be.scripts)
                {
                    if (s.offset.ToString() == offset)
                    {
                        return(s);
                    }
                }
            }
            break;

        case "Reflex":
            if (ai.behaviors_reflex == null)
            {
                return(null);
            }
            foreach (Behavior be in ai.behaviors_reflex)
            {
                if (be.firstScript != null && be.firstScript.offset.ToString() == offset)
                {
                    return(be.firstScript);
                }
                foreach (Script s in be.scripts)
                {
                    if (s.offset.ToString() == offset)
                    {
                        return(s);
                    }
                }
            }
            break;

        case "Macro":
            if (ai.macros == null)
            {
                return(null);
            }
            foreach (Macro m in ai.macros)
            {
                if (m.script != null && m.script.offset.ToString() == offset)
                {
                    return(m.script);
                }
            }
            break;
        }
        return(null);
    }
Пример #26
0
 public void SetModel(AIModel model)
 {
     aiModel = model;
     rayCastSensors.RaysNumber = aiModel.layersDim[0];
     aiFitness.Reset();
 }
Пример #27
0
 public Condition_HealthLow(ParentNode _parent, AIBehaviour _behaviourRoot)
 {
     m_parent = _parent;
     m_parent.AddChild(this);
     m_aimodelSelf = _behaviourRoot.Model;
 }
Пример #28
0
        public static Perso Read(Reader reader, Pointer offset, SuperObject so)
        {
            MapLoader l = MapLoader.Loader;
            Perso     p = new Perso(offset, so);

            //l.print("Perso " + offset);
            l.persos.Add(p);
            p.off_3dData  = Pointer.Read(reader); // 0x0
            p.off_stdGame = Pointer.Read(reader); // 4 Standard Game info
            p.off_dynam   = Pointer.Read(reader); // 0x8 Dynam
            if (Settings.s.engineVersion == Settings.EngineVersion.Montreal)
            {
                reader.ReadUInt32();
            }
            p.off_brain   = Pointer.Read(reader); // 0xC
            p.off_camera  = Pointer.Read(reader); // 0x10 is Camera in Rayman 2
            p.off_collSet = Pointer.Read(reader); // 0x14 collset
            p.off_msWay   = Pointer.Read(reader); // 0x18
            p.off_msLight = Pointer.Read(reader); // 0x1C - MSLight
            if (Settings.s.engineVersion <= Settings.EngineVersion.Montreal)
            {
                reader.ReadUInt32();
            }
            p.off_sectInfo = Pointer.Read(reader); // 0x20 // Pointer to struct that points to active sector
            reader.ReadUInt32();                   // 0x24
            reader.ReadUInt32();
            if (Settings.s.game == Settings.Game.RA || Settings.s.game == Settings.Game.RM)
            {
                reader.ReadUInt32();
            }
            if (Settings.s.engineVersion < Settings.EngineVersion.R3)
            {
                reader.ReadUInt32();
                reader.ReadUInt32();
                reader.ReadUInt32();
                reader.ReadUInt32();
            }

            Pointer.DoAt(ref reader, p.off_3dData, () => {
                p.p3dData = Perso3dData.Read(reader, p.off_3dData);
            });

            Pointer.DoAt(ref reader, p.off_stdGame, () => {
                p.stdGame = StandardGame.Read(reader, p.off_stdGame);
                if (Settings.s.hasObjectTypes)
                {
                    p.nameFamily = p.stdGame.GetName(0);
                    p.nameModel  = p.stdGame.GetName(1);
                    p.namePerso  = p.stdGame.GetName(2);
                }
                else
                {
                    p.nameFamily = "Family" + p.stdGame.objectTypes[0];
                    p.nameModel  = "Model" + p.stdGame.objectTypes[1];
                    p.namePerso  = "Instance" + p.stdGame.objectTypes[2];
                    if (p.p3dData != null && p.p3dData.family != null && p.p3dData.family.name == null)
                    {
                        p.p3dData.family.name         = p.nameFamily;
                        p.p3dData.family.family_index = p.stdGame.objectTypes[0];

                        if (UnitySettings.CreateFamilyGameObjects && p.p3dData.family.Gao != null)
                        {
                            p.p3dData.family.Gao.name = "[Family] " + p.nameFamily;
                        }
                    }
                }
            });

            l.print("[" + p.nameFamily + "] " + p.nameModel + " | " + p.namePerso + " - offset: " + offset + " superObject offset: " + (so != null?so.offset.ToString():"null"));
            if (Settings.s.engineVersion > Settings.EngineVersion.Montreal && Settings.s.game != Settings.Game.R2Revolution)
            {
                Pointer.DoAt(ref reader, p.off_dynam, () => {
                    p.dynam = Dynam.Read(reader, p.off_dynam);
                });
            }

            Pointer.DoAt(ref reader, p.off_brain, () => {
                p.brain = Brain.Read(reader, p.off_brain);
                if (p.brain != null && p.brain.mind != null && p.brain.mind.AI_model != null && p.nameModel != null)
                {
                    p.brain.mind.AI_model.name = p.nameModel;
                }
            });

            /*if (l.mode == MapLoader.Mode.Rayman2PC && off_msWay != null) {
             * MS_Way is always empty at start, instead check DsgVars for graphs
             *  Pointer off_current = Pointer.Goto(ref reader, off_msWay);
             *
             *  p.msWay = MSWay.Read(reader, off_msWay);
             *  Pointer.Goto(ref reader, off_current);
             *
             *  // Graph read?
             *  if (p.msWay.graph != null) {
             *      GameObject go_msWay = new GameObject("MSWay");
             *      go_msWay.transform.SetParent(p.Gao.transform);
             *
             *      GameObject go_graph = new GameObject("Graph");
             *      go_graph.transform.SetParent(go_msWay.transform);
             *
             *      int nodeNum = 0;
             *      foreach (GraphNode node in p.msWay.graph.nodeList) {
             *          GameObject go_graphNode = new GameObject("GraphNode[" + nodeNum + "].WayPoint");
             *          go_graphNode.transform.position.Set(node.wayPoint.position.x, node.wayPoint.position.y, node.wayPoint.position.z);
             *          go_graphNode.transform.SetParent(go_graph.transform);
             *          nodeNum++;
             *      }
             *  }
             * }*/
            if (p.p3dData != null && p.p3dData.family != null)
            {
                if (p.p3dData.off_objectList != null && p.p3dData.family.GetIndexOfPhysicalList(p.p3dData.off_objectList) == -1)
                {
                    ObjectList ol = ObjectList.FromOffsetOrRead(p.p3dData.off_objectList, reader);
                    p.p3dData.family.AddNewPhysicalList(ol);

                    /*if (ol != null) {
                     *      p.p3dData.family.AddNewPhysicalList(ol);
                     *      ol.Gao.transform.SetParent(p.p3dData.family.Gao.transform);
                     * }*/
                }
                if (p.p3dData.off_objectListInitial != null && p.p3dData.family.GetIndexOfPhysicalList(p.p3dData.off_objectListInitial) == -1)
                {
                    ObjectList ol = ObjectList.FromOffsetOrRead(p.p3dData.off_objectListInitial, reader);
                    p.p3dData.family.AddNewPhysicalList(ol);

                    /*if (ol != null) {
                     *      p.p3dData.family.AddNewPhysicalList(ol);
                     *      ol.Gao.transform.SetParent(p.p3dData.family.Gao.transform);
                     * }*/
                }
                if (p.brain != null && p.brain.mind != null && p.brain.mind.AI_model != null &&
                    !(Settings.s.engineVersion == Settings.EngineVersion.R3 && Settings.s.loadFromMemory))      // Weird bug for R3 memory loading
                // Add physical objects tables hidden in scripts
                {
                    AIModel ai = p.brain.mind.AI_model;
                    if (ai.behaviors_normal != null)
                    {
                        for (int i = 0; i < ai.behaviors_normal.Length; i++)
                        {
                            if (ai.behaviors_normal[i].scripts != null)
                            {
                                for (int j = 0; j < ai.behaviors_normal[i].scripts.Length; j++)
                                {
                                    List <ScriptNode> nodes = p.brain.mind.AI_model.behaviors_normal[i].scripts[j].scriptNodes;
                                    foreach (ScriptNode node in nodes)
                                    {
                                        if (node.param_ptr != null && node.nodeType == ScriptNode.NodeType.ObjectTableRef)
                                        {
                                            ObjectList ol = ObjectList.FromOffsetOrRead(node.param_ptr, reader);
                                            ol.unknownFamilyName = p.p3dData.family.name;
                                            ol.AddToFamilyLists(p);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (ai.behaviors_reflex != null)
                    {
                        for (int i = 0; i < ai.behaviors_reflex.Length; i++)
                        {
                            if (ai.behaviors_reflex[i].scripts != null)
                            {
                                for (int j = 0; j < ai.behaviors_reflex[i].scripts.Length; j++)
                                {
                                    List <ScriptNode> nodes = p.brain.mind.AI_model.behaviors_reflex[i].scripts[j].scriptNodes;
                                    foreach (ScriptNode node in nodes)
                                    {
                                        if (node.param_ptr != null && node.nodeType == ScriptNode.NodeType.ObjectTableRef)
                                        {
                                            ObjectList ol = ObjectList.FromOffsetOrRead(node.param_ptr, reader);
                                            ol.unknownFamilyName = p.p3dData.family.name;
                                            ol.AddToFamilyLists(p);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (ai.macros != null)
                    {
                        for (int i = 0; i < ai.macros.Length; i++)
                        {
                            if (ai.macros[i].script != null)
                            {
                                List <ScriptNode> nodes = p.brain.mind.AI_model.macros[i].script.scriptNodes;
                                foreach (ScriptNode node in nodes)
                                {
                                    if (node.param_ptr != null && node.nodeType == ScriptNode.NodeType.ObjectTableRef)
                                    {
                                        ObjectList ol = ObjectList.FromOffsetOrRead(node.param_ptr, reader);
                                        ol.unknownFamilyName = p.p3dData.family.name;
                                        ol.AddToFamilyLists(p);
                                    }
                                }
                            }
                        }
                    }
                }
                if (p.p3dData.family.GetIndexOfPhysicalList(p.p3dData.off_objectList) != -1)
                {
                    p.p3dData.objectList = ObjectList.FromOffset(p.p3dData.off_objectList);
                }
            }

            Pointer.DoAt(ref reader, p.off_collSet, () => {
                p.collset = CollSet.Read(reader, p, p.off_collSet);
            });

            Pointer.DoAt(ref reader, p.off_sectInfo, () => {
                p.sectInfo = PersoSectorInfo.Read(reader, p.off_sectInfo);
            });

            return(p);
        }