Exemplo n.º 1
0
    public void OnEnable()
    {
        target = (FuzzyBehaviour)base.target;
        if (displayer == null && target != null)
        {
            displayer = new EditorConditionDisplay(target);
        }

        if (target.Config == null)
        {
            FuzzyBehaviourConfig __configFile = FindConfigFile();
            if (__configFile != null)
            {
                __configFile  = CreateConfigInstance();
                target.Config = __configFile;
            }
        }
    }
Exemplo n.º 2
0
    public void OnEnable()
    {
        target = (FuzzyBehaviour)base.target;

        _conditionDisplayer = new EditorConditionDisplay(target);

        if (_displayFunctions == null)
        {
            _displayFunctions = new List <bool>();
        }

        if (target.ConceptList.Count != _displayFunctions.Count)
        {
            _displayFunctions.Clear();
            foreach (Concept concept in target.ConceptList)
            {
                _displayFunctions.Add(false);
            }
        }
    }
    void Update()
    {
        sensor.updateSensor();
        behaviourSelector.selectBehaviour();
        switch (behaviourSelector.behaviourIndex)
        {
        case 0:
            currentBehaviour = avoidBehavior;
            break;

        case 1:
            currentBehaviour = shelterBehavior;
            break;

        case 2:
            currentBehaviour = atkRedShipBehaviour;
            break;

        case 3:
            currentBehaviour = atkClosestBehaviour;
            break;

        case 4:
            currentBehaviour = atkLowestBehaviour;
            break;

        default:
            Debug.Log("index error");
            Time.timeScale = 0;
            break;
        }
        currentBehaviour.updateOutputs();
        horizontalAxisInput = currentBehaviour.movementOutput;
        spacebarInput       = currentBehaviour.spacebarOutput;
        if (Mathf.Abs(currentBehaviour.movementOutput) > 1)
        {
            Debug.Log("input error, behaviour " + behaviourIndex);
        }
    }
Exemplo n.º 4
0
 private void Awake()
 {
     _fBehaviour = GetComponent <Fuzzy.FuzzyBehaviour>();
     _body       = GetComponent <Rigidbody>();
 }
Exemplo n.º 5
0
        /// <summary>
        /// Initiates the Rule Evaluation and Defuzzification processes.
        /// </summary>
        /// <returns>BehaviourState to be adopted by the NPC</returns>
        public BehaviourState GetBehaviour()
        {
            FuzzyBehaviour highestOutput = GetFuzzyOutput();

            return(Defuzzify(highestOutput));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Converts fuzzy output to crisp output by finding the appropriate set of crisp behaviours
        /// associated with the fuzzy output and choosing a random behaviour from this set.
        /// </summary>
        /// <param name="fuzzyOutput">FuzzyBehaviour representing a possible set of behaviours.</param>
        /// <returns>A random BehaviourState associated to the fuzzy output</returns>
        private BehaviourState Defuzzify(FuzzyBehaviour fuzzyOutput)
        {
            Random rand = new Random((int)DateTime.Now.Ticks);
            int    next;

            switch (fuzzyOutput)
            {
            case FuzzyBehaviour.CloseIn:
            {
                next = rand.Next(1, 8);
                switch (next)
                {
                case 1:
                case 2:
                case 3:
                    return(BehaviourState.MeleePursue);

                case 4:
                case 5:
                case 6:
                    return(BehaviourState.MeleeCreep);

                case 7:
                    return(BehaviourState.Wander);
                }
                break;
            }

            case FuzzyBehaviour.Flee:
            {
                next = rand.Next(1, 5);
                switch (next)
                {
                case 1:
                case 2:
                case 3:
                    return(BehaviourState.Flee);

                case 4:
                    return(BehaviourState.RangedPursue);
                }
                break;
            }

            case FuzzyBehaviour.MeleeFight:
            {
                return(BehaviourState.MeleePursue);
            }

            case FuzzyBehaviour.MeleeTroll:
            {
                next = rand.Next(1, 5);
                switch (next)
                {
                case 1:
                    return(BehaviourState.MeleePursue);

                case 2:
                    return(BehaviourState.RangedPursue);

                case 3:
                    return(BehaviourState.RangedCreep);

                case 4:
                    return(BehaviourState.Flee);
                }
                break;
            }

            case FuzzyBehaviour.RangedFight:
            {
                next = rand.Next(1, 10);
                switch (next)
                {
                case 1:
                case 2:
                case 3:
                case 4:
                    return(BehaviourState.RangedPursue);

                case 5:
                case 6:
                case 7:
                case 8:
                    return(BehaviourState.RangedCreep);

                case 9:
                    return(BehaviourState.MeleePursue);
                }
                break;
            }

            case FuzzyBehaviour.RangedTroll:
            {
                next = rand.Next(1, 6);
                switch (next)
                {
                case 1:
                    return(BehaviourState.MeleePursue);

                case 2:
                    return(BehaviourState.MeleeCreep);

                case 3:
                    return(BehaviourState.Wander);

                case 4:
                    return(BehaviourState.Flee);

                case 5:
                    return(BehaviourState.RangedPursue);
                }
                break;
            }
            }
            return(BehaviourState.Flee);
        }
 /// <summary>
 /// Converts fuzzy output to crisp output by finding the appropriate set of crisp behaviours 
 /// associated with the fuzzy output and choosing a random behaviour from this set.
 /// </summary>
 /// <param name="fuzzyOutput">FuzzyBehaviour representing a possible set of behaviours.</param>
 /// <returns>A random BehaviourState associated to the fuzzy output</returns>
 private BehaviourState Defuzzify(FuzzyBehaviour fuzzyOutput)
 {
     Random rand = new Random((int)DateTime.Now.Ticks);
     int next;
     switch (fuzzyOutput)
     {
         case FuzzyBehaviour.CloseIn:
             {
                 next = rand.Next(1, 8);
                 switch (next)
                 {
                     case 1:
                     case 2:
                     case 3:
                         return BehaviourState.MeleePursue;
                     case 4:
                     case 5:
                     case 6:
                         return BehaviourState.MeleeCreep;
                     case 7:
                         return BehaviourState.Wander;
                 }
                 break;
             }
         case FuzzyBehaviour.Flee:
             {
                 next = rand.Next(1, 5);
                 switch (next)
                 {
                     case 1:
                     case 2:
                     case 3:
                         return BehaviourState.Flee;
                     case 4:
                         return BehaviourState.RangedPursue;
                 }
                 break;
             }
         case FuzzyBehaviour.MeleeFight:
             {
                 return BehaviourState.MeleePursue;
             }
         case FuzzyBehaviour.MeleeTroll:
             {
                 next = rand.Next(1, 5);
                 switch (next)
                 {
                     case 1:
                         return BehaviourState.MeleePursue;
                     case 2:
                         return BehaviourState.RangedPursue;
                     case 3:
                         return BehaviourState.RangedCreep;
                     case 4:
                         return BehaviourState.Flee;
                 }
                 break;
             }
         case FuzzyBehaviour.RangedFight:
             {
                 next = rand.Next(1, 10);
                 switch (next)
                 {
                     case 1:
                     case 2:
                     case 3:
                     case 4:
                         return BehaviourState.RangedPursue;
                     case 5:
                     case 6:
                     case 7:
                     case 8:
                         return BehaviourState.RangedCreep;
                     case 9:
                         return BehaviourState.MeleePursue;
                 }
                 break;
             }
         case FuzzyBehaviour.RangedTroll:
             {
                 next = rand.Next(1, 6);
                 switch (next)
                 {
                     case 1:
                         return BehaviourState.MeleePursue;
                     case 2:
                         return BehaviourState.MeleeCreep;
                     case 3:
                         return BehaviourState.Wander;
                     case 4:
                         return BehaviourState.Flee;
                     case 5:
                         return BehaviourState.RangedPursue;
                 }
                 break;
             }
     }
     return BehaviourState.Flee;
 }