Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #4
0
        // 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
            }
        }