public virtual void InitializeAI() { T entity = GetEntity(); entity.HasBrain = true; Navigator = GetComponent <BaseNavigator>(); if (UseAIDesign) { AIDesign = new AIDesign(); AIDesign.SetAvailableStates(GetStateList()); if (Events == null) { Events = new AIEvents(); } bool senseFriendlies = MaxGroupSize > 0; Senses.Init(entity, SenseRange, TargetLostRange, VisionCone, CheckVisionCone, CheckLOS, IgnoreNonVisionSneakers, ListenRange, HostileTargetsOnly, senseFriendlies, IgnoreSafeZonePlayers, SenseTypes); if (DefaultDesignSO == null) { Debug.LogWarning("Brain on " + base.gameObject.name + " is trying to load a null AI design!"); return; } Events.Memory.Position.Set(base.transform.position, 4); LoadAIDesign(AIDesigns.GetByNameOrInstance(DefaultDesignSO.Filename, InstanceSpecificDesign), null); AIInformationZone forPoint = AIInformationZone.GetForPoint(base.transform.position, false); if (forPoint != null) { forPoint.RegisterSleepableEntity(this); } } BaseEntity.Query.Server.AddBrain(entity); StartMovementTick(); }
public void SaveDesign() { if (AIDesign == null) { return; } ProtoBuf.AIDesign aIDesign = AIDesign.ToProto(currentStateContainerID); string text = "cfg/ai/"; string filename = DefaultDesignSO.Filename; switch (AIDesign.Scope) { case AIDesignScope.Default: text += filename; try { using (FileStream stream2 = File.Create(text)) { ProtoBuf.AIDesign.Serialize(stream2, aIDesign); } AIDesigns.RefreshCache(filename, aIDesign); } catch (Exception) { Debug.LogWarning("Error trying to save default AI Design: " + text); } break; case AIDesignScope.EntityServerWide: filename += "_custom"; text += filename; try { using (FileStream stream = File.Create(text)) { ProtoBuf.AIDesign.Serialize(stream, aIDesign); } AIDesigns.RefreshCache(filename, aIDesign); } catch (Exception) { Debug.LogWarning("Error trying to save server-wide AI Design: " + text); } break; case AIDesignScope.EntityInstance: break; } }