Exemplo n.º 1
0
 /// <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");
 }
Exemplo n.º 3
0
    // 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;
    }
Exemplo n.º 4
0
 /// <summary>
 /// Awake this instance.
 /// </summary>
 void Awake()
 {
     aiBehavior = GetComponent <AiBehavior>();
     navAgent   = GetComponent <NavAgent>();
     anim       = GetComponentInParent <Animation>();
     Debug.Assert(aiBehavior && navAgent, "Wrong initial parameters");
 }
Exemplo n.º 5
0
 public override void Act()
 {
     bombLaunched = false;
     controller.GenerateBomb();
     myBehaviour  = gameObject.GetComponent <Hide>();
     bombLaunched = true;
     // Invoke("RunAway",0.5f);
 }
Exemplo n.º 6
0
 /// <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");
 }
Exemplo n.º 7
0
 /// <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;
 }
Exemplo n.º 8
0
    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;
        }
    }
Exemplo n.º 9
0
    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);
    }
Exemplo n.º 10
0
    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++;
        }
    }
Exemplo n.º 11
0
        /// <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;
        }
Exemplo n.º 12
0
        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();
                }
            }
        }
Exemplo n.º 13
0
        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;
        }
Exemplo n.º 14
0
    /// <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;
        }
    }
Exemplo n.º 15
0
 /// <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);
     }
 }
Exemplo n.º 16
0
    /// <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);
            }
        }
    }
Exemplo n.º 17
0
    // 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;
        }
    }
Exemplo n.º 18
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");
            }
        }
    }
Exemplo n.º 19
0
    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();
    }
Exemplo n.º 21
0
    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;
        }
    }
Exemplo n.º 22
0
 /// <summary>
 /// Awake this instance.
 /// </summary>
 public virtual void Awake()
 {
     aiBehavior = GetComponent <AiBehavior> ();
     anim       = GetComponentInParent <Animator>();
     Debug.Assert(aiBehavior, "Wrong initial parameters");
 }
Exemplo n.º 23
0
 private void Start()
 {
     shark = transform.parent.GetComponent <AiBehavior>();
 }
Exemplo n.º 24
0
 /// <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);
    }
Exemplo n.º 26
0
    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);
    }
Exemplo n.º 27
0
    /// <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;
                    }
                }
            }
        }
    }
Exemplo n.º 28
0
 /// <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);
         }
     }
 }