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); } }
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); } } } } } }
public void RemovePart(BossPart part) { bossParts.Remove(part); if (bossParts.Count <= 0) { Die(); } }
void Start() { bossPart = GetComponent <BossPart>(); sceneObject = GetComponent <SceneObject> (); if (sceneObject == null) { sceneObject = GetComponentInParent <SceneObject> (); } }
void OnTriggerEnter(Collider other) { BossPart part = other.gameObject.GetComponent <BossPart> (); if (part != null) { part.OnActive(); boss.AddEnemy(transform.position); } }
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); } } }
// 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(); } } }
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); } }
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()); }
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); }
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); } } } }
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); } }
public void DestroyPart(BossPart bossPart) { Debug.Log("Destroy boss part"); Parts.Remove(bossPart); Destroy(bossPart.gameObject); }
public override void OnPartBroken(BossPart part) { breakOut(); //part.asset.GetComponent<Breakable>().breakOut (part.transform.position); }
public override void OnPartBroken(BossPart part) { breakOut (); }
public void SetPartComponent(BossPart newPartComponent) { partComponent = newPartComponent; }
protected override void AwakeObj() { base.AwakeObj(); bossPart = GetComponent <BossPart>(); }
public virtual void OnPartBroken(BossPart part) { }
/* public float getCurrentHp() * { * return currentHealth; * }*/ public void AddPartToList(BossPart p) { allParts.Add(p); }