protected override void DoAction(BossPartStateController controller)
        {
            BossPart bossPart = controller.bossPart;

            Ability ability = AbilityUtils.FindAbilityByName(
                "Boss_MiniDebuffAoeAbility",
                bossPart.GetAbilityAgent().abilitiesMulti
                );

            if (!ability || !(ability is AoeAbility))
            {
                return;
            }
            AoeAbility aoeAbility = (AoeAbility)ability;

            var reachabeEnemies = WorkManager.FindReachableObjects(controller.nearbyEnemies, bossPart.transform.position, ability.range);

            // wait till at least 2 targets are reachable
            if (ability != null && ability.IsReady() && reachabeEnemies.Count > 1)
            {
                var abilityTarget = AoeUtils.GetAoeTargetPosition(
                    ability.range,
                    reachabeEnemies,
                    bossPart.GetPlayer()
                    );

                bossPart.UseAbility(abilityTarget, aoeAbility);
            }
        }
Пример #2
0
    private void MouseHover()
    {
        if (hud.CursorInBounds())
        {
            GameObject hoverObject = FindHitObject();
            if (hoverObject)
            {
                if (player.SelectedObject)
                {
                    player.SelectedObject.SetHoverState(hoverObject);
                }
                else if (!WorkManager.ObjectIsGround(hoverObject))
                {
                    Player owner = hoverObject.transform.root.GetComponent <Player>();
                    if (owner)
                    {
                        Unit     unit     = hoverObject.transform.parent.GetComponent <Unit>();
                        Building building = hoverObject.transform.parent.GetComponent <Building>();
                        BossPart bossPart = hoverObject.transform.parent.GetComponent <BossPart>();

                        if (owner.username == player.username && (unit || building || bossPart))
                        {
                            hud.SetCursorState(CursorState.Select);
                        }
                    }
                }
            }
        }
    }
Пример #3
0
 public void RemovePart(BossPart part)
 {
     bossParts.Remove(part);
     if (bossParts.Count <= 0)
     {
         Die();
     }
 }
Пример #4
0
    void Start()
    {
        bossPart = GetComponent <BossPart>();

        sceneObject = GetComponent <SceneObject> ();
        if (sceneObject == null)
        {
            sceneObject = GetComponentInParent <SceneObject> ();
        }
    }
Пример #5
0
    void OnTriggerEnter(Collider other)
    {
        BossPart part = other.gameObject.GetComponent <BossPart> ();

        if (part != null)
        {
            part.OnActive();
            boss.AddEnemy(transform.position);
        }
    }
Пример #6
0
    private void WorldObjectMouseClick(WorldObject objectHandler, GameObject hitObject, Vector3 hitPoint)
    {
        //only handle input if currently selected
        if (objectHandler.IsSelected() && !WorkManager.ObjectIsGround(hitObject))
        {
            if (!hitObject.transform.parent)
            {
                return;
            }

            WorldObject worldObject = hitObject.transform.parent.GetComponent <WorldObject>();
            //clicked on another selectable object
            if (worldObject)
            {
                Player owner = hitObject.transform.root.GetComponent <Player>();
                if (owner)
                { //the object is controlled by a player
                    // get owner of the object handler
                    Player objectHandlerOwner = objectHandler.GetComponentInParent <Player>();
                    if (objectHandlerOwner && player && objectHandlerOwner.username == player.username && player.human)
                    { //this object is controlled by a human player
                        var handlerStateController = objectHandler.GetStateController();
                        //start attack if object is not owned by the same player and this object can attack, else select
                        if (handlerStateController && player.username != owner.username && objectHandler.CanAttack())
                        {
                            InputToCommandManager.ToChaseState(targetManager, handlerStateController, worldObject);
                        }
                        else
                        {
                            IssueMoveOrderToSelectedUnits(hitObject, hitPoint);
                        }
                    }
                }
                else if (objectHandler.CanAttack())
                {
                    if (!hitObject.transform.parent)
                    {
                        return;
                    }

                    Unit     unit     = hitObject.transform.parent.GetComponent <Unit>();
                    Building building = hitObject.transform.parent.GetComponent <Building>();
                    BossPart bossPart = hitObject.transform.parent.GetComponent <BossPart>();

                    var handlerStateController = objectHandler.GetStateController();

                    if ((unit || building || bossPart) && handlerStateController)
                    {
                        InputToCommandManager.ToChaseState(targetManager, handlerStateController, worldObject);
                    }
                }
                // else ChangeSelection(objectHandler, worldObject);
            }
        }
    }
Пример #7
0
    // public SceneObject myProjectile;

    public virtual void Start()
    {
        bossPartAnim = GetComponent <Animation>();
        bossPart     = GetComponent <BossPart>();
        speedAnim    = bossPartAnim[bossPartAnim.clip.name].normalizedSpeed;

        if (type == types.RANDOM_ATTACK)
        {
            RandomAttack();
        }
    }
 public void removePartToList(BossPart p)
 {
     allParts.Remove(p);
     if (allParts.Count < 1)
     {
         if (onDeath != null)
         {
             onDeath();
         }
     }
 }
Пример #9
0
        protected override void DoAction(BossPartStateController controller)
        {
            BossPart bossPart = controller.bossPart;

            Ability ability = AbilityUtils.FindAbilityByName(
                "Boss_AttackDownAbilityMulti",
                bossPart.GetAbilityAgent().abilitiesMulti
                );
            var reachabeEnemies = WorkManager.FindReachableObjects(controller.nearbyEnemies, bossPart.transform.position, ability.range);

            // wait till at least 2 targets are reachable
            if (ability != null && ability.IsReady() && reachabeEnemies.Count > 1)
            {
                bossPart.UseAbility(reachabeEnemies, ability);
            }
        }
Пример #10
0
    void HomingMissile()
    {
        /*
         * List<BossPart> parts = new List<BossPart>(bossParts);
         * for (int i = 0; i < homingMissilesToFire; i++)
         * {
         *  BossPart part = parts[Random.Range(0, parts.Count)];
         *  parts.Remove(part);
         *  part.SpawnMissile();
         * }*/

        BossPart closest = GetClosestBossPart(player.transform.position);

        Debug.Log(closest.name);
        BossPart other = null;

        int index = bossParts.IndexOf(closest);

        if (index <= 0)
        {
            other = bossParts[index + 1];
        }
        else if (index + 1 >= bossParts.Count)
        {
            other = bossParts[index - 1];
        }
        else
        {
            if (Random.value > 0.5f)
            {
                other = bossParts[index - 1];
            }
            else
            {
                other = bossParts[index + 1];
            }
        }

        closest.SpawnMissile();

        if (other != null)
        {
            other.SpawnMissile();
        }

        StartCoroutine(GetNewState());
    }
Пример #11
0
    BossPart GetClosestBossPart(Vector3 position)
    {
        BossPart closest         = null;
        float    closestDistance = float.MaxValue;

        for (int i = 0; i < bossParts.Count; i++)
        {
            float distance = Vector3.Distance(position, bossParts[i].accuratePosition.position);
            if (distance < closestDistance)
            {
                closest         = bossParts[i];
                closestDistance = distance;
            }
        }

        return(closest);
    }
Пример #12
0
    public virtual void SetHoverState(GameObject hoverObject)
    {
        if (!hoverObject)
        {
            return;
        }

        //only handle input if owned by a human player and currently selected
        if (player && player.human && currentlySelected)
        {
            //something other than the ground is being hovered over
            if (!WorkManager.ObjectIsGround(hoverObject) && hoverObject.transform.parent)
            {
                Player   owner    = hoverObject.transform.root.GetComponent <Player>();
                Unit     unit     = hoverObject.transform.parent.GetComponent <Unit>();
                Building building = hoverObject.transform.parent.GetComponent <Building>();
                BossPart bossPart = hoverObject.transform.parent.GetComponent <BossPart>();

                if (owner)
                { //the object is owned by a player
                    if (owner.username == player.username)
                    {
                        hud.SetCursorState(CursorState.Select);
                    }
                    else if (unit || building || bossPart && CanAttack())
                    {
                        hud.SetCursorState(CursorState.Attack);
                    }
                    else
                    {
                        hud.SetCursorState(CursorState.Select);
                    }
                }
                else if (unit || building || bossPart && CanAttack())
                {
                    hud.SetCursorState(CursorState.Attack);
                }
                else
                {
                    hud.SetCursorState(CursorState.Select);
                }
            }
        }
    }
Пример #13
0
        protected override void DoAction(BossPartStateController controller)
        {
            BossPart bossPart = controller.bossPart;

            Ability ability = AbilityUtils.FindAbilityByName(
                "Boss_HealingAbility",
                bossPart.GetAbilityAgent().abilities
                );
            var reachabeAllies     = WorkManager.FindReachableObjects(controller.nearbyAllies, bossPart.transform.position, ability.range);
            var damagedMajorAllies = reachabeAllies
                                     .Where(p => p.hitPoints < p.maxHitPoints &&
                                            (!(p is Unit) || ((Unit)p).IsMajor())
                                            )
                                     .ToList();

            // wait till at least 2 targets are reachable
            if (ability != null && ability.IsReady() && damagedMajorAllies.Count > 0)
            {
                var mostDamagedAlliesHP = damagedMajorAllies.Min(p => p.hitPoints);
                var mostDamagedAllies   = damagedMajorAllies.Find(p => p.hitPoints == mostDamagedAlliesHP);

                bossPart.UseAbility(mostDamagedAllies, ability);
            }
        }
Пример #14
0
 public void DestroyPart(BossPart bossPart)
 {
     Debug.Log("Destroy boss part");
     Parts.Remove(bossPart);
     Destroy(bossPart.gameObject);
 }
Пример #15
0
 public override void OnPartBroken(BossPart part)
 {
     breakOut();
     //part.asset.GetComponent<Breakable>().breakOut (part.transform.position);
 }
	public override void OnPartBroken(BossPart part)
	{
		breakOut ();
	}
Пример #17
0
 public void SetPartComponent(BossPart newPartComponent)
 {
     partComponent = newPartComponent;
 }
    protected override void AwakeObj()
    {
        base.AwakeObj();

        bossPart = GetComponent <BossPart>();
    }
Пример #19
0
 public virtual void OnPartBroken(BossPart part)
 {
 }
 /*  public float getCurrentHp()
  * {
  *    return currentHealth;
  * }*/
 public void AddPartToList(BossPart p)
 {
     allParts.Add(p);
 }