Exemple #1
0
        public bool CanSee(Creature creature)
        {
            Vector3 curNormal = Vector3.Normalize(Vector3.Subtract(creature.Position, Position));
            Vector3 normalFacing = Vector3.Normalize(Forward);

            return Vector3.Dot(curNormal, normalFacing) > mVisionAngle;
        }
Exemple #2
0
 protected bool CanHear(Creature creature)
 {
     //float radius = (Entity as Sphere).Radius;
     //float distance = (creature.Position - Position).Length();
     //float noise = distance / radius * ListeningMultiplier;
     return mListeningSensitivity >= creature.Sneak;
 }
Exemple #3
0
        public override void Update(GameTime time, List<Creature> collidingCreatures)
        {
            base.Update(time, collidingCreatures);

            // Find the most intimidating creature in the sensor.
            mMostIntimidatingCreature = null;
            foreach (Creature creature in collidingCreatures)
            {
                if (creature.Incapacitated == false &&
                    creature.GetType() != mCreature.GetType() &&
                    (mMostIntimidatingCreature == null || creature.Intimidation > mMostIntimidatingCreature.Intimidation))
                {
                    mMostIntimidatingCreature = creature;
                }
            }
        }
Exemple #4
0
        public override void Damage(int damage, Creature source)
        {
            int health = 0;
            if (mShield)
            {
                ++health;
            }

            if (damage > health)
            {
                Die();
            }
            else
            {
                base.Damage(damage, source);
            }
        }
Exemple #5
0
 /// <summary>
 /// Sets the creature this controller will control.
 /// </summary>
 /// <param name="creature">The creature to control.</param>
 public virtual void SetCreature(Creature creature)
 {
     mCreature = creature;
 }
Exemple #6
0
 /// <summary>
 /// Called when the creature is damaged.
 /// </summary>
 /// <param name="damage">The amount of damage dealt.</param>
 public virtual void Damage(int damage, Creature source)
 {
 }
Exemple #7
0
 /// <summary>
 /// Construct a SubPart for the construction of a Part.
 /// </summary>
 /// <param name="renderable">Renderable which will be drawn attached to the Creature owning this part.</param>
 /// <param name="preferredBones">Array of PartBones in order of preference on which the renderable will be drawn.</param>
 /// <param name="position">Position offset from the bone.</param>
 /// <param name="orientation">Orientation offset from the bone.</param>
 /// <param name="scale">Scale offset from the Creature.</param>
 public SubPart(Renderable renderable, Creature.PartBone[] preferredBones, Vector3 position, Matrix orientation, Vector3 scale)
 {
     Renderable = renderable;
     PreferredBones = preferredBones;
     Position = position;
     Orientation = orientation;
     Scale = scale;
 }
Exemple #8
0
 /// <summary>
 /// Assign creature to camera.
 /// </summary>
 /// <param name="creature"></param>
 public override void SetCreature(Creature creature)
 {
     base.SetCreature(creature);
 }
Exemple #9
0
        /// <summary>
        /// Damages the creature.
        /// </summary>
        /// <param name="damage">The amount of damage dealt.</param>
        public virtual void Damage(int damage, Creature source)
        {
            if (Invulnerable)
            {
                damage = 0;
            }

            //Console.WriteLine(this + " took " + damage + " damage from " + source);
            foreach (PartAttachment partAttachment in mPartAttachments)
            {
                if (partAttachment != null)
                {
                    partAttachment.Part.Damage(damage, source);
                }
            }
            Controller.Damage(damage, source);

            if (damage <= 0)
            {
                return;
            }

            if (mShield)
            {
                mShield = false;
                mShieldRechargeTimer = ShieldRechargeLength;
                --damage;
            }

            if (damage > 0)
            {
                Invulnerable = true;
                mInvulnerableTimer = InvulnerableLength;
            }

            List<PartAttachment> validParts = new List<PartAttachment>(mPartAttachments.Count());
            foreach (PartAttachment pa in mPartAttachments)
            {
                if (pa != null)
                {
                    validParts.Add(pa);
                }
            }

            for (; damage > 0 && validParts.Count > 0; --damage)
            {
                PartAttachment pa = validParts[Rand.rand.Next(validParts.Count())];
                RemovePart(pa.Part);
                validParts.Remove(pa);
            }
        }
Exemple #10
0
 public float CollideDistance(Creature creature)
 {
     Vector3 distanceVector = Position - creature.Position;
     distanceVector.Y = 0.0f;
     return distanceVector.Length() - creature.CharacterController.BodyRadius - CharacterController.BodyRadius;
 }
Exemple #11
0
 /// <summary>
 /// Resets the state of the AI.
 /// </summary>
 protected virtual void ResetAIState()
 {
     State = AIState.Idle;
     mDurdleTimer.State = DurdleState.Idle;
     mDurdleTimer.ResetNewState();
     mTargetCreature = null;
     mFollowPosition = false;
     if (mUsingPart)
     {
         FinishUsePart();
     }
 }
Exemple #12
0
 /// <summary>
 /// Orders the creature to follow the specified creature.
 /// </summary>
 /// <param name="creature">The creature to follow.</param>
 protected virtual void FollowOrder(Creature creature)
 {
     if (!(State == AIState.FollowCreature && creature == mTargetCreature))
     {
         ResetAIState();
         mTargetCreature = creature;
         State = AIState.FollowCreature;
         MoveTo(mTargetCreature.Position);
     }
 }
Exemple #13
0
 /// <summary>
 /// Called in update during the follow creature state.
 /// </summary>
 /// <param name="time">The game time.</param>
 protected virtual void FollowCreatureUpdate(GameTime time)
 {
     if (mTargetCreature.Incapacitated)
     {
         mTargetCreature = null;
         ResetAIState();
     }
     else
     {
         FollowUpdate(time, mTargetCreature.Position);
     }
 }
Exemple #14
0
 /// <summary>
 /// Orders the creature to flee from the specified creature.
 /// </summary>
 /// <param name="creature">The creature from which to flee.</param>
 protected virtual void FleeOrder(Creature creature)
 {
     if (!(State == AIState.FleeCreature && creature == mTargetCreature))
     {
         ResetAIState();
         mTargetCreature = creature;
         State = AIState.FleeCreature;
         MoveFrom(mTargetCreature.Position);
     }
 }
Exemple #15
0
 /// <summary>
 /// Called in update during the flee state.
 /// </summary>
 /// <param name="time"></param>
 protected virtual void FleeCreatureUpdate(GameTime time)
 {
     if (mTargetCreature.Incapacitated)
     {
         mTargetCreature = null;
         ResetAIState();
     }
     else
     {
         Vector3 direction = mCreature.Position - mTargetCreature.Position;
         MoveCreature(direction);
         UsePart(direction);
     }
 }