/// <summary> /// Awake this instance. /// </summary> void Awake() { col = GetComponent <Collider2D>(); aiBehavior = GetComponentInParent <AiBehavior>(); Debug.Assert(col && aiBehavior, "Wrong initial parameters"); col.enabled = false; }
/// <summary> /// Awake this instance. /// </summary> void Awake() { cooldownCounter = cooldown; aiBehavior = GetComponent <AiBehavior>(); defPoint = transform.parent.GetComponentInChildren <DefendPoint>(); Debug.Assert(aiBehavior && spawnPoint && defPoint, "Wrong initial parameters"); }
// Update is called once per frame void Update() { waited += Time.deltaTime; if (waited < Frequency) { return; } string aiLog = ""; float bestAiValue = float.MinValue; AiBehavior bestAi = null; AiSupport.GetSupport(gameObject).Refresh(); //select best AI foreach (var ai in Ais) { ai.TimePassed += waited; var aiValue = ai.GetWeight() * ai.WeightMultiplier + Random.Range(0, Confusion); aiLog += ai.GetType().Name + ": " + aiValue + "\n"; if (aiValue > bestAiValue) { bestAiValue = aiValue; bestAi = ai; } } Debug.Log(aiLog); bestAi.Execute(); waited = 0; }
/// <summary> /// Awake this instance. /// </summary> void Awake() { aiBehavior = GetComponent <AiBehavior>(); navAgent = GetComponent <NavAgent>(); anim = GetComponentInParent <Animation>(); Debug.Assert(aiBehavior && navAgent, "Wrong initial parameters"); }
public override void Act() { bombLaunched = false; controller.GenerateBomb(); myBehaviour = gameObject.GetComponent <Hide>(); bombLaunched = true; // Invoke("RunAway",0.5f); }
/// <summary> /// Awake this instance. /// </summary> void Awake() { aiBehavior = GetComponent <AiBehavior>(); meleeAttack = GetComponentInChildren <AttackMelee>() as IAttack; rangedAttack = GetComponentInChildren <AttackRanged>(); nav = GetComponent <NavAgent>(); Debug.Assert((aiBehavior != null) && ((meleeAttack != null) || (rangedAttack != null)), "Wrong initial parameters"); }
/// <summary> /// Crée un mob avec la vie maximale et initiale indiquée, modifiée par le niveau courant. /// Par défaut, un comportement générique (AiBehavior) lui est assigné, qui va déterminer ses destinations et /// ses cibles, si elles sont en ligne de vue directe. /// </summary> /// <param name="position"> La position initiale du mob </param> /// <param name="lifeMax"> La vie maximale du mob </param> /// <param name="showingLife"> Indique si la vie du mob est temporairement affichée au dessus de lui </param> public Mob(Point position, int lifeMax, bool showingLife) : base(position, (int)(lifeMax * World.GetWorld().LifeRatio()), showingLife) { _targets = new Queue <Point>(); Faction = Faction.Cultists; Behavior = new AiBehavior(this); ScoreValue = 1; }
public void setBehaviorsNumber(int number) { probabilities = new float[number]; behaviors = new AiBehavior[number]; float initialValue = 100 / number; for (int i = 0; i < probabilities.Length; i++) { probabilities[i] = initialValue; } }
public override void Start(GameController gc) { playerBehavior = new HumanBehavior(playerShip, 1); gc.SpawnEntity(playerShip, "ship_blue"); enemyBehavior = new AiBehavior(enemyShip); gc.SpawnEntity(enemyShip, "ship_red"); collector += gc.uiController.ShowEntityHealth(playerShip, true); collector += gc.uiController.ShowEntityHealth(enemyShip, false); }
public void RandomAction() { float randomNumber = Random.Range(0, 100) % 100; int i = 0; while (randomNumber > 0 && i < probabilities.Length) { if (randomNumber <= probabilities[i]) { current = behaviors[i]; current.Act(); } randomNumber -= probabilities[i]; i++; } }
/// <summary> /// Crée un mob avec toutes les données fournies par la classe MobData. /// Un comportement générique est assigné au mob pour lui déterminer ses destinations et ses cibles, si elles /// sont en ligne de vue directe. /// L'ordre des sorts fournis correspond à leur niveau de priorité, le premier étant le plus prioritaire. /// Utilise également le taux de loot indiqué par le paramètre data. /// </summary> /// <param name="position"> La position initiale du mob </param> /// <param name="data"> Les différents paramètres du mob </param> public Mob(Point position, MobData data) : base(position, (int)(data.Life * World.GetWorld().LifeRatio()), true) { _targets = new Queue <Point>(); Faction = Faction.Cultists; Behavior = new AiBehavior(this); Speed = data.Speed; SpriteHandler = new AnimationHandler(this, data.Animations); SetCollision(new ActorCollision(this, new Rectangle(data.Size, data.Size), HitboxType.Medium)); for (var i = 0; i < data.Spells.Length; ++i) { CreateSpell(i, data.Spells[i]); } LootRate = data.LootRate; ScoreValue = data.ScoreValue; }
protected override void process(Entity entity) { AiBehavior aiBehavior = (AiBehavior)_BehaviorMapper.get(entity); Life life = (Life)_LifeMapper.get(entity); if (life.IsAlive) { aiBehavior.Behavior.Behave(); } else { if (!aiBehavior.Behavior.IsClean) { aiBehavior.Behavior.deathCleanup(); } } }
private static void Postfix( MobileParty __instance, float ____attackInitiative, float ____avoidInitiative, AiBehavior bestInitiativeBehavior, MobileParty bestInitiativeTargetParty, ref float bestInitiativeBehaviorScore, Vec2 avarageEnemyVec) { if (__instance == null) { return; } Hero leaderHero = __instance.LeaderHero; int num; if (leaderHero == null) { num = 0; } else { PartyOrder order = leaderHero.getOrder(); if (order == null) { num = 0; } else { int behavior = (int)order.Behavior; num = 1; } } if (num == 0 || bestInitiativeTargetParty == null || (__instance.IsJoiningArmy || bestInitiativeBehavior != AiBehavior.EngageParty) || !bestInitiativeTargetParty.IsBandit || __instance.LeaderHero.getOrder().Behavior != AiBehavior.PatrolAroundPoint && (__instance.LeaderHero.getOrder().Behavior != AiBehavior.EscortParty || (double)____attackInitiative <= 0.0)) { return; } Vec2 v = (bestInitiativeTargetParty.BesiegedSettlement != null ? bestInitiativeTargetParty.GetVisualPosition().AsVec2 : bestInitiativeTargetParty.Position2D) - __instance.Position2D; if ((double)bestInitiativeBehaviorScore >= 1.10000002384186 || (double)__instance.GetCachedPureSpeed() <= (double)bestInitiativeTargetParty.GetCachedPureSpeed() * 1.05 && (double)bestInitiativeTargetParty.Bearing.DotProduct(v) > 0.0) { return; } bestInitiativeBehaviorScore = 1.1f; }
/// <summary> /// Stun effect handler (bool). /// </summary> /// <param name="trigger">Trigger.</param> /// <param name="modifier">Modifier.</param> private void Stun(EffectTrigger trigger, float modifier) { AiBehavior aiBehavior = GetComponent <AiBehavior>(); NavAgent navAgent = GetComponent <NavAgent>(); switch (trigger) { case EffectTrigger.Added: aiBehavior.enabled = false; navAgent.enabled = false; break; case EffectTrigger.Removed: aiBehavior.enabled = true; navAgent.enabled = true; break; } }
/// <summary> /// User click handler. /// </summary> /// <param name="obj">Object.</param> /// <param name="param">Parameter.</param> private void UserClick(GameObject obj, string param) { if (myState == MyState.Active) { myState = MyState.Inactive; Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 delta = position - (Vector2)tower.transform.position; delta = Vector2.ClampMagnitude(delta, tower.range.transform.localScale.x); transform.position = tower.transform.position + (Vector3)delta; LookAtDirection2D((Vector2)(tower.transform.position - transform.position)); SetVisible(false); // Move defenders to new flag position foreach (KeyValuePair <GameObject, Transform> pair in activeDefenders) { AiBehavior aiBehavior = pair.Key.GetComponent <AiBehavior>(); aiBehavior.ChangeState(aiBehavior.GetComponent <AiStateMove>()); } Destroy(activeDefendFlag); } }
/// <summary> /// Start this instance. /// </summary> void Start() { Debug.Assert(spawnPoint, "Wrong initial settings"); BuildingPlace buildingPlace = GetComponentInParent <BuildingPlace>(); defPoint = buildingPlace.GetComponentInChildren <DefendPoint>(); cooldownCounter = cooldown; // Upgrade all existing defenders on tower build foreach (Transform point in defPoint.GetDefendPoints()) { // If defend point already has defender AiBehavior defender = point.GetComponentInChildren <AiBehavior>(); if (defender != null) { // Spawn new defender in the same place Spawn(defender.transform, point); // Destroy old defender Destroy(defender.gameObject); } } }
// Update is called once per frame void Update() { waited += Time.deltaTime; if (waited < frequency) { return; } float bestAiValue = float.MinValue; AiBehavior bestAi = null; foreach (var ai in gameObject.GetComponents <AiBehavior>()) { if (ai.obsolete) { continue; } if (ai is AiBuild && ((AiBuild)ai).prefab.GetComponent <CreateBuildingAction>().cost > playerInfo.money) { continue; } ai.timePassed += waited; var aiValue = ai.getWeight() * ai.weightMultiplier + Random.Range(0, confustion); if (aiValue > bestAiValue) { bestAiValue = aiValue; bestAi = ai; } } if (bestAi != null) { bestAi.execute(playerInfo); waited = 0; } }
/// <summary> /// Awake this instance. /// </summary> void Awake() { aiBehavior = GetComponent <AiBehavior>(); navAgent = GetComponent <NavAgent>(); anim = GetComponent <Animation>(); Debug.Assert(aiBehavior && navAgent, "Wrong initial parameters"); if (anim != null) { // Start moving navAgent.Move = true; // Play animation if (gameObject.name == "Orc(Clone)") { anim.Play(); } else if (gameObject.name == "Dog(Clone)") { anim.Play("DogMove"); } } }
void Update() { waited += Time.deltaTime; if (waited < frequency) { return; } waited = 0f; float bestUtilityValue = float.MinValue; AiBehavior bestAi = null; foreach (var ai in Ais) { var aiValue = ai.GetUtiltyValues(); if (aiValue > bestUtilityValue) { bestUtilityValue = aiValue; bestAi = ai; } bestAi.Execute(); } }
private void Start() { cur_Food = food_Max - 1; cur_Health = health_Max; cur_Sleep = sleep_Max; agent = GetComponent <NavMeshAgent>(); switch (foodType) { case FoodType.Carnivore: aiBehavior += Behavior_Carnivore; break; case FoodType.Herbivore: aiBehavior += Behavior_Herbivore; break; case FoodType.Omnivore: aiBehavior += Behavior_Omnivore; break; } switch (moodType) { case MoodType.Aggressive: aiBehavior += Behavior_Aggressive; break; case MoodType.Neutral: aiBehavior += Behavior_Neutral; break; case MoodType.Passive: aiBehavior += Behavior_Passive; break; } aiBehavior(); }
public void setBuildingBehaviours(bool removeOnDelete, AiBehavior removeBehaviour) { if (removeOnDelete && removeBehaviour != null) { Destroy(removeBehaviour); } foreach (var b in playerInfo.availableBuildings) { addBehaviour(b.name); } if (buildPosChangeDirection == 0) { buildPos.x += 5; buildPosChangeDirection = 1; } else if (buildPosChangeDirection == 1) { buildPos.z += 5; buildPosChangeDirection = 0; } }
/// <summary> /// Awake this instance. /// </summary> public virtual void Awake() { aiBehavior = GetComponent <AiBehavior> (); anim = GetComponentInParent <Animator>(); Debug.Assert(aiBehavior, "Wrong initial parameters"); }
private void Start() { shark = transform.parent.GetComponent <AiBehavior>(); }
/// <summary> /// Awake this instance. /// </summary> void Awake() { aiBehavior = GetComponent <AiBehavior> (); Debug.Assert(aiBehavior, "Wrong initial parameters"); }
private void determineState() { switch (SleepStatus) { case StatusType.High: priority_Sleep = evaluateStatus(cur_Sleep, sleep_Max) * 0.25f; break; case StatusType.Med: priority_Sleep = evaluateStatus(cur_Sleep, sleep_Max) * 0.5f; break; case StatusType.Low: priority_Sleep = evaluateStatus(cur_Sleep, sleep_Max) * 1; break; } switch (foodStatus) { case StatusType.High: priority_Food = evaluateStatus(cur_Food, food_Max) * 0.25f; break; case StatusType.Med: priority_Food = evaluateStatus(cur_Food, food_Max) * 0.5f; break; case StatusType.Low: priority_Food = evaluateStatus(cur_Food, food_Max) * 1; break; } // Debug.Log("Food Priority :" + priority_Food); if (priority_Food <= priority_Sleep) { if (sleeping) { Debug.Log("I am Sleeping"); aiBehavior -= Behavior_Sleep; sleeping = false; } if (!eating) { Debug.Log("I am Eating"); aiBehavior += Behavior_Eat; eating = true; } } if (priority_Sleep < priority_Food) { Debug.Log("This happens"); //Debug.Log("Sleep Prioirty :" + priority_Sleep); if (!sleeping) { Debug.Log("I am Sleeping"); aiBehavior += Behavior_Sleep; sleeping = true; } if (eating) { Debug.Log("I am Eating"); aiBehavior -= Behavior_Eat; eating = false; } } priority_Sleep = Mathf.Clamp01(priority_Sleep); priority_Food = Mathf.Clamp01(priority_Food); }
public void SetBehavior(AiBehavior inBehavior) { //Debug.Log("BehaviorChangeRPC to " + inBehavior.ToString() + " ship " + this.gameObject.name); if (inBehavior != null) behavior = inBehavior; behaviorName = inBehavior.GetType().ToString(); //Debug.Log("BehaviorChanged to " + behavior.ToString() + " ship " + this.gameObject.name); }
/// <summary> /// Raises the selection changed event. /// </summary> private void OnSelectionChanged() { myState = MyState.Disabled; unitData.Clear(); // Check for selected gameobject and fill unit descriptor if (Selection.GetFiltered <GameObject>(SelectionMode.ExcludePrefab).Length == 1) { unitData.tower = (Selection.activeObject as GameObject).GetComponentInParent <Tower>(); if (unitData.tower != null) // Tower { unitData.spawner = (Selection.activeObject as GameObject).GetComponentInParent <DefendersSpawner>(); if (unitData.spawner != null) // Barracks { myState = MyState.Barracks; unitData.gameObject = unitData.tower.gameObject; unitData.price = unitData.spawner.GetComponent <Price>(); unitData.tower = unitData.spawner.GetComponent <Tower>(); if (unitData.tower != null) { unitData.range = unitData.tower.range; if (unitData.tower.actions != null) { unitData.towerActions = unitData.tower.actions.GetComponent <TowerActionsInspector>(); } } if (unitData.spawner.prefab != null) { contents.chooseDefenderButton.image = AssetPreview.GetAssetPreview(unitData.spawner.prefab); } else { contents.chooseDefenderButton.image = null; } } else // Ranged tower { myState = MyState.Tower; unitData.gameObject = unitData.tower.gameObject; unitData.price = unitData.gameObject.GetComponent <Price>(); unitData.range = unitData.tower.range; if (unitData.tower.actions != null) { unitData.towerActions = unitData.tower.actions.GetComponent <TowerActionsInspector>(); } unitData.attack = unitData.gameObject.GetComponentInChildren <Attack>(); if (unitData.attack != null) { AiTriggerCollider trigger = unitData.attack.GetComponent <AiTriggerCollider>(); if (trigger != null) { unitData.targetCommon = trigger.tags.Contains("Enemy") ? true : false; unitData.targetFlying = trigger.tags.Contains("FlyingEnemy") ? true : false; } if ((unitData.attack is AttackRanged) && (unitData.attack as AttackRanged).arrowPrefab != null) { contents.chooseBulletButton.image = AssetPreview.GetAssetPreview((unitData.attack as AttackRanged).arrowPrefab); } else { contents.chooseBulletButton.image = null; } } } } else // Unit { AiBehavior aiBehavior = (Selection.activeObject as GameObject).GetComponentInParent <AiBehavior>(); if (aiBehavior != null) { unitData.gameObject = aiBehavior.gameObject; switch (unitData.gameObject.tag) { case "Enemy": goto case "FlyingEnemy"; case "FlyingEnemy": unitData.price = unitData.gameObject.GetComponent <Price>(); unitData.flying = unitData.gameObject.CompareTag("FlyingEnemy") ? true : false; unitData.aiFeature = unitData.gameObject.GetComponentInChildren <FeaturesInspector>(); goto case "Defender"; case "Defender": myState = unitData.gameObject.CompareTag("Defender") ? MyState.Defender : MyState.Enemy; unitData.navAgent = unitData.gameObject.GetComponent <NavAgent>(); unitData.damageTaker = unitData.gameObject.GetComponent <DamageTaker>(); unitData.attackType = 0; unitData.attack = unitData.gameObject.GetComponentInChildren <Attack>(); if (unitData.attack != null && (unitData.attack is AttackMelee)) { unitData.attackType = 1; AiTriggerCollider trigger = unitData.attack.GetComponent <AiTriggerCollider>(); if (trigger != null) { unitData.targetCommon = trigger.tags.Contains("Enemy") ? true : false; unitData.targetFlying = trigger.tags.Contains("FlyingEnemy") ? true : false; } } else if (unitData.attack != null && (unitData.attack is AttackRanged)) { unitData.attackType = 2; AiTriggerCollider trigger = unitData.attack.GetComponent <AiTriggerCollider>(); if (trigger != null) { unitData.targetCommon = trigger.tags.Contains("Enemy") ? true : false; unitData.targetFlying = trigger.tags.Contains("FlyingEnemy") ? true : false; } if ((unitData.attack as AttackRanged).arrowPrefab != null) { contents.chooseBulletButton.image = AssetPreview.GetAssetPreview((unitData.attack as AttackRanged).arrowPrefab); } else { contents.chooseBulletButton.image = null; } } break; } } } } }
/// <summary> /// Update this instance. /// </summary> void Update() { if (paused == false) { // User press mouse button if (Input.GetMouseButtonDown(0) == true) { // Check if pointer over UI components GameObject hittedObj = null; PointerEventData pointerData = new PointerEventData(EventSystem.current); pointerData.position = Input.mousePosition; List <RaycastResult> results = new List <RaycastResult>(); EventSystem.current.RaycastAll(pointerData, results); if (results.Count > 0) // UI components on pointer { // Search for Action Icon hit in results foreach (RaycastResult res in results) { if (res.gameObject.CompareTag("ActionIcon")) { hittedObj = res.gameObject; break; } } // Send message with user click data on UI component EventManager.TriggerEvent("UserUiClick", hittedObj, null); } else // No UI components on pointer { // Check if pointer over colliders RaycastHit2D[] hits = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Camera.main.transform.forward); foreach (RaycastHit2D hit in hits) { // If this object has unit info if (hit.collider.CompareTag("UnitInfo")) { Tower tower = hit.collider.GetComponentInParent <Tower>(); if (tower != null) { hittedObj = tower.gameObject; break; } AiBehavior aiBehavior = hit.collider.GetComponentInParent <AiBehavior>(); if (aiBehavior != null) { hittedObj = aiBehavior.gameObject; break; } hittedObj = hit.collider.gameObject; break; } } // Send message with user click data on game space EventManager.TriggerEvent("UserClick", hittedObj, null); } // If there is no hitted object - start camera drag if (hittedObj == null) { cameraIsDragged = true; dragOrigin = Input.mousePosition; } } if (Input.GetMouseButtonUp(0) == true) { // Stop drag camera on mouse release cameraIsDragged = false; } if (cameraIsDragged == true) { Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - dragOrigin); // Camera dragging (inverted) cameraControl.MoveX(-pos.x); cameraControl.MoveY(-pos.y); } } }