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; } } }
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); } }
private void Awake() { _fBehaviour = GetComponent <Fuzzy.FuzzyBehaviour>(); _body = GetComponent <Rigidbody>(); }
/// <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)); }
/// <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; }