using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using V3.Camera; using V3.Data; using V3.Objects.Sprite; namespace V3.Objects { /// /// A moving game object. /// public interface ICreature : IGameObject { string Name { get; } Vector2 InitialPosition { set; } int Life { get; } int MaxLife { get; } int Speed { get; } int Attack { get; } int AttackRadius { get; } int SightRadius { get; } TimeSpan TotalRecovery { get; } TimeSpan Recovery { get; set; } /// /// Area where the creature is standing. Used for collisions. /// /// /// Where you can click to select the creature. /// Rectangle SelectionRectangle { get; } bool IsSelected { get; set; } ICreature IsAttacking { get; set; } IBuilding IsAttackingBuilding { get; set; } MovementDirection MovementDirection { get; set; } MovementState MovementState { get; set; } Faction Faction { get; } bool IsDead { get; } bool IsUpgraded { get; set; } /// /// Creature takes specific amount of damage. Substracted from Life. /// /// TakeDamage taken. void TakeDamage(int damage); /// /// Give command to move to desired destination. Not instant movement. /// /// Destination in pixels. void Move (Vector2 destination); //void ImportentMove(IGameObject creature); /// /// Draws a static non-animated sprite (for HUD) at specified position. /// /// Sprite batch used for drawing. /// Position where to draw the sprite. void DrawStatic(SpriteBatch spriteBatch, Point position); /// /// Update the creature behaviour and animation. /// void Update(GameTime gameTime, ICreature playerCharacter, bool rightButtonPressed, Vector2 rightButtonPosition, Quadtree quadtree, ICamera camera); /// /// Change the equipment/sprite of the creature to something other. /// If in debug mode the function throws an exception if the creature does not have the specified equipment slots. /// /// Which part of the equipment should be changed. /// Which sprite to use instead. void ChangeEquipment(EquipmentType equipmentType, ISpriteCreature sprite); /// /// Sets back the position of the creature to its state when created. /// void ResetPosition(); /// /// Plays the specified animation fully, but only once. /// /// For which movement state the animation should be played. /// How long (or how slow) should the animation be? void PlayAnimationOnce(MovementState animation, TimeSpan duration); /// /// Heals the creature. Can not go over MaxLife. /// /// How much HP the creature gains. void Heal(int amount); /// /// Creature gets more life and maxlife. Used for testing in Techdemo. /// /// Multiplyier for Life. void Empower(int modifier); /// /// Save this creature’s data to a CreatureData object. /// /// the CreatureData object with the status of this creature CreatureData SaveData(); /// /// Restore the creature's state from the given data. /// /// the state of the creature to restore void LoadData(CreatureData data); /// /// Restore the creature's references to other creatures from the given data. /// /// the state of the creature to restore /// the list of all creatures by ID void LoadReferences(CreatureData data, Dictionary creatures); } }