rendered paste bodyusing System;
using System.Collections.Generic;
using System.Text;
using FlatRedBall;
using FlatRedBall.Math;
using FlatRedBall.Math.Geometry;
using FlatRedBall.Graphics.Animation;
using FlatRedBall.Instructions;
using Microsoft.Xna.Framework;
namespace StanleyFrost
{
public class Enemy : PositionedObject
{
public enum States
{
Attack_Player,
Fear,
Moving,
No_Fires,
Searching,
StartingFire,
}
protected States state;
protected FireBehaviors fireBehavior;
protected FireColor enemyColor;
protected float health;
protected float moveToX;
protected float moveToY;
protected Vector3[] playerPositions;
protected Polygon bodyPolygon;
public States State
{
get { return state; }
set { state = value; }
}
public FireBehaviors FireBehavior
{
get { return fireBehavior; }
}
public FireColor EnemyColor
{
get { return enemyColor; }
}
public float Health
{
get { return health; }
}
public Polygon BodyPolygon
{
get { return bodyPolygon; }
}
public Enemy()
{
SpriteManager.AddPositionedObject(this);
X = 10;
Y = -12;
Z = 1;
Sprite testSprite = SpriteManager.AddSprite("Grfx/demun.bmp");
testSprite.AttachTo(this, false);
testSprite.ScaleX = 2.5f;
testSprite.ScaleY = 2.5f;
playerPositions = new Vector3[Game1.PlayerList().Count];
//XVelocity = -5;
SetEnemyParameters();
}
public virtual void Activity()
{
CheckState(FindClosestPlayer());
}
public virtual void CheckState(Vector3 player)
{
if (state == States.Searching)
{
}
else if (state == States.Moving)
{
if (X == moveToX && Y == moveToY)
{
state = States.StartingFire;
}
}
else if (state == States.StartingFire)
{
}
else if (state == States.No_Fires)
{
}
}
protected Vector3 FindClosestPlayer()
{
Vector3 closestPlayer=playerPositions[0];
float closestDistance = (float)Math.Sqrt((double)((X - closestPlayer.X) * (X - closestPlayer.X)) + (double)((Y - closestPlayer.Y) * (Y - closestPlayer.Y)));
float tempDistance;
for (int i = 1; i < playerPositions.Length; i++)
{
tempDistance=(float)Math.Sqrt((double)((X - playerPositions[i].X) * (X - playerPositions[i].X)) + (double)((Y - playerPositions[i].Y) * (Y - playerPositions[i].Y)));
if (closestDistance < tempDistance)
{
closestPlayer = playerPositions[i];
}
}
return closestPlayer;
}
public void GotoEmptySpaceAt(FlatRedBall.Math.Geometry.Point emptyPosition)
{
if (emptyPosition.X != X || emptyPosition.Y != Y)
{
Instructions.Clear();
moveToX = (float)emptyPosition.X;
moveToY = (float)emptyPosition.Y;
float timeToTake = (float)Math.Sqrt((double)((X - moveToX) * (X - moveToX)) + (double)((Y - moveToY) * (Y - moveToY))) / 7;
InstructionManager.MoveToAccurate(this, moveToX, moveToY, Z, timeToTake);
state = States.Moving;
}
else
state = States.No_Fires;
}
protected virtual void SetEnemyParameters()
{
enemyColor = FireColor.Red;
fireBehavior = FireBehaviors.Single;
state = States.Searching;
health = 100;
}
public void UpdatePlayerPosition(int playerIndex, Vector3 position)
{
playerPositions[(int)playerIndex] = position;
}
}
}