void OnCraftDestroyed(Craft craft) { if (craft == PlayerControl.instance.craft) { StartCoroutine(GameOver()); } else if (craft.gameObject.layer == Layers.Enemy) { Messenger <Enemy> .Broadcast(MessageTypes.EnemyDestroyed, craft.GetComponent <Enemy>()); } }
public void ChangeOnglet() { player.plans.changed = false; int i = 0; while (i < table.Count) { Destroy(table[i].gameObject); ++i; } bool existfood = false; bool existfurniture = false; bool existtool = false; table = new List <Craft>(); foreach (Plan plan in plans) { if (plan.type == PlanType.FOOD) { existfood = true; } else if (plan.type == PlanType.FURNITURE) { existfurniture = true; } else if (plan.type == PlanType.TOOL) { existtool = true; } if (plan.type == onglet) { GameObject g = Instantiate(prefabPlan, transform); Craft craft = g.GetComponent(typeof(Craft)) as Craft; craft.GetComponent <RectTransform>().anchoredPosition = new Vector3(0, -25 - table.Count * 45, 0); craft.plan = plan; craft.parent = this; table.Add(craft); } } foreach (SpecialPlan specialPlan in player.plans.plans) { foreach (Plan plan in specialPlan.plans) { if (plan.type == PlanType.FOOD) { existfood = true; } else if (plan.type == PlanType.FURNITURE) { existfurniture = true; } else if (plan.type == PlanType.TOOL) { existtool = true; } if (plan.type == onglet) { GameObject g = Instantiate(prefabPlan, transform); Craft craft = g.GetComponent(typeof(Craft)) as Craft; craft.GetComponent <RectTransform>().anchoredPosition = new Vector3(0, -25 - table.Count * 45, 0); craft.plan = plan; craft.parent = this; table.Add(craft); } } } if (existfood) { food.transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 1); } else { food.transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 0.5f); } if (existfurniture) { furniture.transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 1); } else { furniture.transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 0.5f); } if (existtool) { tool.transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 1); } else { tool.transform.GetChild(0).GetComponent <Image>().color = new Color(1, 1, 1, 0.5f); } GetComponent <RectTransform>().sizeDelta = new Vector2(GetComponent <RectTransform>().sizeDelta.x, 50 + (table.Count - 1) * 45); }
public void Update() { // TODO: timers & member boolean variables to reduce checks each frame if (!useAbilities) { return; } if (timer > Time.time) { return; } timer = Time.time + interval; // Use abilities if needed if (!ai.movement.targetIsInRange()) { if (ai.movement.DistanceToTarget > 5f) { bool allowSpeed = true; if (craft.faction == 0 && PlayerCore.Instance != null && !PlayerCore.Instance.GetIsDead() && ai.movement.GetTarget() != null) { // Don't run away or get behind when escorting a player float ownD = ((Vector2)ai.movement.GetTarget() - (Vector2)craft.transform.position).sqrMagnitude; float playerD = ((Vector2)ai.movement.GetTarget() - (Vector2)PlayerCore.Instance.transform.position).sqrMagnitude; allowSpeed = playerD < ownD; } if (allowSpeed) { var speeds = GetAbilities(1); int half = Mathf.CeilToInt(speeds.Count() / 2f); int count = 0; foreach (var booster in speeds) { booster.Activate(); if (booster.GetActiveTimeRemaining() > 0) { if (++count >= half) { break; } } } } } } if (craft.GetHealth()[0] < craft.GetMaxHealth()[0] * 0.8f) { var shellBoosts = GetAbilities(2, 17, 26, 29, 30, 31); // shell heal, shell regen, area restore foreach (var booster in shellBoosts) { if (craft.GetHealth()[0] > craft.GetMaxHealth()[0] * 0.9f) { break; } booster.Activate(); } } if (craft.GetHealth()[0] < craft.GetMaxHealth()[0] * 0.25f && Time.time > nextStealth) { var escapeAbilities = GetAbilities(24, 29, 27); // stealth, absorption, pin down foreach (var escapeAbility in escapeAbilities) { escapeAbility.Activate(); if (escapeAbility.GetActiveTimeRemaining() > 0f) { nextStealth = Time.time + escapeAbility.GetActiveTimeRemaining() + 1.0f; break; } } } if (craft.GetHealth()[0] < craft.GetMaxHealth()[0] * 0.2f) { var retreats = GetAbilities(28); // retreat foreach (var retreat in retreats) { bool CD = retreat.TimeUntilReady() > 0f; if (!CD) { retreat.Activate(); if (retreat.TimeUntilReady() > 0f) { break; } } } } if (craft.GetHealth()[1] < craft.GetMaxHealth()[1] * 0.5f) { var core = GetAbilities(11, 31); // core heal & regen foreach (var ability in core) { ability.Activate(); if (ability.GetActiveTimeRemaining() > 0) { break; } } } if (craft.GetHealth()[2] < craft.GetMaxHealth()[2] * 0.5f) { var energy = GetAbilities(12, 32); // energy add & regen foreach (var ability in energy) { ability.Activate(); if (ability.GetActiveTimeRemaining() > 0) { break; } } } var target = craft.GetTargetingSystem().GetTarget(); if (target != null && target) { Entity targetEntity = target.GetComponent <Entity>(); if (targetEntity != null && targetEntity && !targetEntity.GetIsDead()) { var damageBoosts = GetAbilities(25, 33); // damage boost, disrupt foreach (var damageBoost in damageBoosts) { damageBoost.Activate(); } // TODO: use only if the enemy is close enough! var pinDown = GetAbilities(27); // pin down if (Time.time > nextPin) { foreach (var pin in pinDown) { if (pin.GetActiveTimeRemaining() <= 0) { pin.Activate(); if (pin.GetActiveTimeRemaining() > 0f) { nextPin = Time.time + pin.GetActiveTimeRemaining() - 1.5f; // 2 sec activation time, leave 0.5 sec for fleeing break; } } } } } } if (craft.GetComponent <TractorBeam>() != null) { if ((craft.GetComponent <TractorBeam>().GetTractorTarget() == null || craft.GetComponent <TractorBeam>().GetTractorTarget().GetComponent <ShellPart>() != null)) { var yoinkPart = GetAbilities(40); // steal the player's parts lmao foreach (var ability in yoinkPart) { ability.Activate(); if (ability.GetActiveTimeRemaining() > 0) { break; } } } } if (craft is IOwner owner && target != null && target) { if (owner.GetUnitsCommanding().Count < owner.GetTotalCommandLimit()) { var droneSpawns = GetAbilities(10); // drone spawn foreach (var droneSpawn in droneSpawns) { droneSpawn.Activate(); } } } }