示例#1
0
    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();
    }
示例#2
0
    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;
        }
    }