/// <summary> /// Used to add actions to queue. The method checks for duplicate actions and prevents them from being put to queue. /// </summary> private void AddActionToQueue(Action action) { if (!actionQueue.Contains(action)) actionQueue.Add(action); }
private void InitDefaultCombat() { defaultAction = new Action(Constants.ActionType.Default); defaultAction.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerGreaterThan, subject.Vision)); preDeterminedActions.Add(defaultAction); chase = new Action(Constants.ActionType.Chase); chase.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerLowerThan, subject.Vision)); chase.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerGreaterThan, subject.AttackRange)); preDeterminedActions.Add(chase); stop = new Action(Constants.ActionType.Stop); stop.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerLowerThan, subject.AttackRange)); stop.AddCondition(new Condition(Constants.ConditionType.VelocityOtherThan, 0f)); preDeterminedActions.Add(stop); flee = new Action(Constants.ActionType.Flee, true); flee.AddCondition(new Condition(Constants.ConditionType.HealthLowerThan, subject.maxHealth / 4)); flee.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerLowerThan, subject.Vision)); flee.AddCondition(new Condition(Constants.ConditionType.Blocked, false)); //preDeterminedActions.Add(flee); /*cower = new Action(Constants.ActionType.Stop, true); cower.AddCondition(new Condition(Constants.ConditionType.HealthLowerThan, subject.maxHealth / 4)); cower.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerGreaterThan, subject.Vision)); preDeterminedActions.Add(cower);*/ }
private void InitWormLatching() { latch = new Action(Constants.ActionType.Latch, true); latch.AddCondition(new Condition(Constants.ConditionType.CollidesWithPlayer, true)); preDeterminedActions.Add(latch); }
private void InitAttackAndFlee() { defaultAction = new Action(Constants.ActionType.Default); defaultAction.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerGreaterThan, subject.Vision)); preDeterminedActions.Add(defaultAction); flee = new Action(Constants.ActionType.Default); flee.AddCondition(new Condition(Constants.ConditionType.AttackReady, false)); preDeterminedActions.Add(flee); chase = new Action(Constants.ActionType.Chase); chase.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerLowerThan, subject.Vision)); chase.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerGreaterThan, subject.AttackRange)); chase.AddCondition(new Condition(Constants.ConditionType.AttackReady, true)); preDeterminedActions.Add(chase); attack = new Action(Constants.ActionType.Attack); attack.AddCondition(new Condition(Constants.ConditionType.DistanceToPlayerLowerThan, subject.AttackRange)); attack.AddCondition(new Condition(Constants.ConditionType.AttackReady, true)); preDeterminedActions.Add(attack); }