Ejemplo n.º 1
0
        protected void ResetStateTime(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
        {
            TimeSpan extraTime = TimeSpan.FromTicks(weapon.TimeInState.Ticks - mDurationTicks);

            weapon.TimeInState = extraTime;
            weapon.CurrentState.Update(new GameTime(gameTime.TotalGameTime, extraTime, gameTime.IsRunningSlowly), weapon, input);
        }
Ejemplo n.º 2
0
 public override void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
     if (weapon.TimeInState.Ticks >= mDurationTicks)
     {
         weapon.CurrentState = BashSkill.ReadyState;
         ResetStateTime(gameTime, weapon, WeaponFunctions.Neutral);
     }
 }
Ejemplo n.º 3
0
 public override void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
     if (input == WeaponFunctions.TriggerPulled)
     {
         weapon.Fire();
         weapon.CurrentState = BashSkill.SwingingState;
     }
 }
Ejemplo n.º 4
0
 public override void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
     if (weapon.TimeInState.Ticks >= mDurationTicks)
     {
         weapon.CurrentState = MachineGunSkill.ReadyState;
         ResetStateTime(gameTime, weapon, WeaponFunctions.Neutral);
     }
 }
Ejemplo n.º 5
0
 public override void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
     if (input == WeaponFunctions.TriggerPulled)
     {
         weapon.Fire();
         weapon.CurrentState = BashSkill.SwingingState;
     }
 }
Ejemplo n.º 6
0
        public override void Initialize(ContentManager contentLoader, ComponentManifest manifest)
        {
            string            skillAssetName = (string)(manifest.Properties[ManifestKeys.RANGED_SKILL_ASSET_NAME]);
            ComponentManifest weaponManifest = contentLoader.Load <ComponentManifest>(Path.Combine("skills", skillAssetName));
            Type weaponType = Type.GetType(weaponManifest.TypeFullName);

            object[] basicCtorParams = new object[] { Owner.Id };
            RangedSkill = Activator.CreateInstance(weaponType, basicCtorParams) as BipedWeapon;
            RangedSkill.Initialize(contentLoader, weaponManifest);

            skillAssetName = (string)(manifest.Properties[ManifestKeys.MELEE_SKILL_ASSET_NAME]);
            weaponManifest = contentLoader.Load <ComponentManifest>(Path.Combine("skills", skillAssetName));
            weaponType     = Type.GetType(weaponManifest.TypeFullName);
            MeleeSkill     = Activator.CreateInstance(weaponType, basicCtorParams) as BipedWeapon;
            MeleeSkill.Initialize(contentLoader, weaponManifest);
        }
Ejemplo n.º 7
0
 public override void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
     if (input == WeaponFunctions.TriggerPulled)
     {
         Actor          owner = GameResources.ActorManager.GetActorById(weapon.OwnerActorId);
         WeaponResource wr    = owner.GetBehavior <WeaponResource>();
         if (wr.Value >= weapon.ResourceCostToUse)
         {
             weapon.Fire();
             weapon.CurrentState = BlasterRifleSkill.FiringState;
         }
         else
         {
             weapon.DryFire();
             weapon.CurrentState = BlasterRifleSkill.DryFireState;
         }
     }
 }
Ejemplo n.º 8
0
 protected void ResetStateTime(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
     TimeSpan extraTime = TimeSpan.FromTicks(weapon.TimeInState.Ticks - mDurationTicks);
     weapon.TimeInState = extraTime;
     weapon.CurrentState.Update(new GameTime(gameTime.TotalGameTime, extraTime, gameTime.IsRunningSlowly), weapon, input);
 }
Ejemplo n.º 9
0
 public virtual void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
 }
Ejemplo n.º 10
0
 public override void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
     if (input == WeaponFunctions.TriggerPulled)
     {
         Actor owner = GameResources.ActorManager.GetActorById(weapon.OwnerActorId);
         WeaponResource wr = owner.GetBehavior<WeaponResource>();
         if (wr.Value >= weapon.ResourceCostToUse)
         {
             weapon.Fire();
             weapon.CurrentState = MachineGunSkill.FiringState;
         }
         else
         {
             weapon.DryFire();
             weapon.CurrentState = MachineGunSkill.DryFireState;
         }
     }
 }
Ejemplo n.º 11
0
        public override void Update(/* inout */ SteeringBlender steering, Actor owner, IAgentStateManager agent)
        {
            if (!agent.HasProperty(AgentPropertyName.ActiveOpponent))
            {
                ZombieWaitState zws = new ZombieWaitState(6.0f);
                agent.CurrentState = zws;
                return;
            }

            Actor opponent = GameResources.ActorManager.GetActorById(agent.GetProperty <int>(AgentPropertyName.ActiveOpponent));
            BipedControllerComponent opponentBcc = opponent.GetComponent <BipedControllerComponent>(ActorComponent.ComponentType.Control);

            steering.Target = BepuConverter.Convert(opponentBcc.Controller.Body.Position);

            BipedControllerComponent bcc = owner.GetComponent <BipedControllerComponent>(ActorComponent.ComponentType.Control);

            BepuVec3       toOpponent   = opponentBcc.Controller.Body.Position - bcc.Controller.Body.Position;
            float          distance     = toOpponent.Length();
            ZombieSkillSet zss          = owner.GetBehaviorThatImplementsType <ZombieSkillSet>();
            BipedWeapon    chosenAttack = distance <= zss.MeleeSkill.EffectiveRangeMax ? zss.MeleeSkill : zss.RangedSkill;

            Matrix attackTransform = Matrix.CreateTranslation(chosenAttack.MuzzleOffset) * Matrix.CreateWorld(
                BepuConverter.Convert(bcc.Controller.Body.Position), BepuConverter.Convert(bcc.Controller.ViewDirection), Vector3.Up);

            BepuVec3 bulletPath = opponentBcc.Controller.Body.Position - BepuConverter.Convert(attackTransform.Translation);

            // If we don't have a shot, we need to specify what kind of movement we need to remedy that.
            ZombieTacticalMovementState.MovementType movement = ZombieTacticalMovementState.MovementType.None;

            if (distance < chosenAttack.EffectiveRangeMin)
            {
                movement = ZombieTacticalMovementState.MovementType.Retreat;
            }
            else if (distance > chosenAttack.EffectiveRangeMax)
            {
                movement = ZombieTacticalMovementState.MovementType.Close;
            }
            else
            {
                BepuRay       loeRay = new BepuRay(BepuConverter.Convert(attackTransform.Translation), bulletPath);
                LOSFilter     filter = new LOSFilter(bcc.Controller.Body.CollisionInformation, opponentBcc.Controller.Body.CollisionInformation);
                RayCastResult loeResult;
                GameResources.ActorManager.SimSpace.RayCast(loeRay, chosenAttack.EffectiveRangeMax * 1.5f, filter.Test, out loeResult);

                EntityCollidable otherEntityCollidable = loeResult.HitObject as EntityCollidable;
                if (otherEntityCollidable != null &&
                    otherEntityCollidable.Entity != null &&
                    otherEntityCollidable.Entity.Tag != null &&
                    (int)(otherEntityCollidable.Entity.Tag) == opponent.Id)
                {
                    toOpponent.Y = 0.0f;
                    toOpponent.Normalize();
                    float       aimTheta         = (float)(Math.Acos(MathHelper.Clamp(BepuVec3.Dot(toOpponent, bcc.Controller.ViewDirection), 0.0f, 1.0f)));
                    const float AIM_CONE_RADIANS = MathHelper.Pi / 12.0f;
                    if (aimTheta <= AIM_CONE_RADIANS)
                    {
                        // TODO: P2: Add some wander to this value:
                        bcc.WorldAim = BepuConverter.Convert(bulletPath);
                        //chosenAttack.CurrentOperation = WeaponFunctions.TriggerPulled;
                        BipedWeapon otherAttack = chosenAttack == zss.MeleeSkill ? zss.RangedSkill : zss.MeleeSkill;
                        otherAttack.UpdateInputState(false, bcc);
                        chosenAttack.UpdateInputState(true, bcc);
                        return;
                    }
                }
                else
                {
                    movement = ZombieTacticalMovementState.MovementType.Lateral;
                }
            }

            if (movement != ZombieTacticalMovementState.MovementType.None)
            {
                ZombieTacticalMovementState ztms = new ZombieTacticalMovementState(movement);
                agent.CurrentState = ztms;
            }
        }
Ejemplo n.º 12
0
 public virtual void Update(GameTime gameTime, BipedWeapon weapon, WeaponFunctions input)
 {
 }
Ejemplo n.º 13
0
 public ZombieSkillSet(Actor owner)
     : base(owner)
 {
     RangedSkill = null;
     MeleeSkill  = null;
 }