public void Update(AttackBehaviorGroup attackGroup) { RoomHandler absoluteRoom = base.transform.position.GetAbsoluteRoom(); AIActor randomActiveEnemy = null; if (randomActiveEnemy == null) { randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false); } if (randomActiveEnemy == this.aiActor) { randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false); } if (randomActiveEnemy.aiActor != this.aiActor) { randomActiveEnemy.sprite.renderer.material.SetFloat("_EmissivePower", 23.45f); randomActiveEnemy.bulletBank.OnProjectileCreated += (Projectile rpoj) => { Color c = rpoj.sprite.color; c.a = 0.5f; rpoj.sprite.color = c; }; } if (randomActiveEnemy.healthHaver.IsDead) { randomActiveEnemy = absoluteRoom.GetRandomActiveEnemy(false); } }
public static void BraveBehaviorDebug() { string enemyGuid = "dc3cd41623d447aeba77c77c99598426"; //MarinePast AIActor prefabActor = EnemyDatabase.GetOrLoadByGuid(enemyGuid); GameObject objectToInstantiate = prefabActor.gameObject; // int flag = 0; Debug.Log("Begin BraveBehavior Debug"); BehaviorSpeculator behaviorspeculator = objectToInstantiate.GetComponent <BehaviorSpeculator>(); AIBulletBank aibulletbank = objectToInstantiate.GetComponent <AIBulletBank>(); List <AttackBehaviorBase> attackbehaviorbase = behaviorspeculator.AttackBehaviors; foreach (AttackBehaviorBase attack in attackbehaviorbase) { Debug.Log("ATTACK Behaviors: " + attack.ToString()); } AttackBehaviorGroup attackbehaviorgroup = behaviorspeculator.AttackBehaviorGroup; List <AttackBehaviorGroup.AttackGroupItem> attackbehaviors = attackbehaviorgroup.AttackBehaviors; foreach (AttackBehaviorGroup.AttackGroupItem attackgroupitem in attackbehaviors) { Debug.Log("AttackGroup Item :" + attackgroupitem.Behavior.ToString()); } //AttackBehaviorGroup //AttackGruop //ShootBehavior --> has bullet scripts Debug.Log("End BraveBehavior Debug"); }
public static List <T> FindAttackBehaviorsInGroup <T>(this AttackBehaviorGroup group) where T : AttackBehaviorBase { if (group == null || group.AttackBehaviors == null) { return(new List <T>()); } List <T> result = new List <T>(); foreach (AttackBehaviorGroup.AttackGroupItem item in group.AttackBehaviors) { if (item != null && item.Behavior != null) { List <AttackBehaviorBase> groupItems; if (item.Behavior is T) { result.Add(item.Behavior as T); } else if (item.Behavior.IsAttackBehaviorGroup(out groupItems)) { foreach (AttackBehaviorBase behav in groupItems) { if (behav is T) { result.Add(behav as T); } } } } } return(result); }
// Token: 0x0600001F RID: 31 RVA: 0x000035A0 File Offset: 0x000017A0 private void ProcessAttack(AttackBehaviorBase attack) { bool flag = attack == null; if (!flag) { bool flag2 = attack is BasicAttackBehavior; if (flag2) { BasicAttackBehavior basicAttackBehavior = attack as BasicAttackBehavior; basicAttackBehavior.Cooldown = 0f; basicAttackBehavior.RequiresLineOfSight = false; basicAttackBehavior.MinRange = -1f; basicAttackBehavior.Range = -1f; bool flag3 = attack is TeleportBehavior; if (flag3) { this.TeleBehav = (basicAttackBehavior as TeleportBehavior); basicAttackBehavior.RequiresLineOfSight = true; basicAttackBehavior.MinRange = 1000f; basicAttackBehavior.Range = 0.1f; this.DoTeleport = typeof(TeleportBehavior).GetMethod("DoTeleport", BindingFlags.Instance | BindingFlags.NonPublic); } bool flag4 = attack is DashBehavior; if (flag4) { this.dashBehav = (basicAttackBehavior as DashBehavior); basicAttackBehavior.RequiresLineOfSight = true; basicAttackBehavior.MinRange = 1000f; basicAttackBehavior.Range = 0.1f; this.BeginState = typeof(DashBehavior).GetMethod("BeginState", BindingFlags.Instance | BindingFlags.NonPublic); this.State[0] = typeof(DashBehavior).GetNestedType("DashState", BindingFlags.NonPublic).GetField("Charge").GetValue(this.dashBehav); this.EndState = typeof(DashBehavior).GetMethod("EndState", BindingFlags.Instance | BindingFlags.NonPublic); } bool flag5 = basicAttackBehavior is ShootGunBehavior; if (flag5) { ShootGunBehavior shootGunBehavior = basicAttackBehavior as ShootGunBehavior; shootGunBehavior.LineOfSight = false; shootGunBehavior.EmptiesClip = false; shootGunBehavior.Cooldown = 0.3f; shootGunBehavior.RespectReload = true; } } else { bool flag6 = attack is AttackBehaviorGroup; if (flag6) { AttackBehaviorGroup attackBehaviorGroup = attack as AttackBehaviorGroup; for (int i = 0; i < attackBehaviorGroup.AttackBehaviors.Count; i++) { this.ProcessAttack(attackBehaviorGroup.AttackBehaviors[i].Behavior); } } } } }
// TODO a lot to do here, second enrage, probabilities etc private void ProcessAttackGroup(List <AttackBehaviorBase> attackBehaviors, bool isSecondEnrage) { AttackBehaviorGroup group = attackBehaviors[0] as AttackBehaviorGroup; foreach (var attackBehaviour in group.AttackBehaviors) { if (attackBehaviour.Behavior is ShootGunBehavior) { (attackBehaviour.Behavior as ShootGunBehavior).StopDuringAttack = false; } switch (attackBehaviour.NickName) { // non enraged basic shooting case "Basic Shooting": attackBehaviour.Probability = 0f; break; // enraged basic shooting case "Basic Shooting (Angry)": attackBehaviour.Probability = 1f; break; // as far as I can see this is never used, but it's still set to 0 on enrage case "Leading Shot": attackBehaviour.Probability = 0f; break; // non enraged jump attack case "Jump Attack": attackBehaviour.Probability = 0f; break; // enraged jump attack case "Jump Attack (Angry)": attackBehaviour.Probability = 1f; break; // spawn adds attack case "Spawn Bros": //attackBehaviour.Probability = 0f; // previously enraged bros couldn't summon, but I want that, maybe even increase it break; default: break; } // unchanged attacks: // Charge Player // Trident Shot // Sweep Shot // smiley's sweep and shades' trident attack are never set to something other than probability of 1, so I'm ignorig them here } }