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; }
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; }
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; } } }
public override void Damage(int damage, Creature source) { int health = 0; if (mShield) { ++health; } if (damage > health) { Die(); } else { base.Damage(damage, source); } }
/// <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; }
/// <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) { }
/// <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; }
/// <summary> /// Assign creature to camera. /// </summary> /// <param name="creature"></param> public override void SetCreature(Creature creature) { base.SetCreature(creature); }
/// <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); } }
public float CollideDistance(Creature creature) { Vector3 distanceVector = Position - creature.Position; distanceVector.Y = 0.0f; return distanceVector.Length() - creature.CharacterController.BodyRadius - CharacterController.BodyRadius; }
/// <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(); } }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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); } }