Ignore:
Timestamp:
2013-07-23 22:36:26 (8 years ago)
Author:
dezhidki
Message:

Lisätty toimiva sotilas. Korjattu OrderMove:n epätarkkuuksia. Lisätty AStariin muuttuja, jolla voi jättää loppupisteen läpipääsemättömyyden huomioimatta.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/Unit.cs

    r4581 r4592  
    1414    public class Unit : Entity 
    1515    { 
    16         protected bool isSelectable, isSelected; 
     16        protected bool isSelectable; 
    1717        protected BoundingRectangle screenRect; 
    1818        protected BoundingRectangle screenRectOffset; 
     
    2222        private Vector2 arrowOffs = Vector2.Zero; 
    2323        private Player owner; 
     24        private int immunityTimer = 0; 
     25        protected int maxHealth, immunityTime; 
     26        protected Color colorizer = Color.White; 
     27        protected bool colorizeOnHit, wasHurt = false; 
    2428 
    2529        public Unit(Level level, Player owner) 
     
    3135            screenRectOffset = new BoundingRectangle(0, 0, spriteSize.X, spriteSize.Y, null); 
    3236            isSelectable = true; 
    33             isSelected = false; 
     37            IsSelected = false; 
     38            HasHealth = false; 
     39            maxHealth = 10; 
     40            colorizeOnHit = true; 
     41            immunityTime = 0; 
    3442        } 
     43 
     44        public int Health { get; protected set; } 
     45 
     46        public bool HasHealth { get; protected set; } 
    3547 
    3648        public bool IsSelectable { get { return isSelectable; } } 
     
    3850        public Player Owner { get { return owner; } } 
    3951 
     52        public bool IsSelected { get; set; } 
     53 
    4054        public override void Init() 
    4155        { 
    4256            base.Init(); 
     57            Health = maxHealth; 
    4358        } 
    4459 
    45         public virtual void OnSelectGain() 
     60        public virtual bool CanBeHurtBy(Unit u) 
    4661        { 
    47             isSelected = true; 
     62            return HasHealth && u.Owner != Owner; 
    4863        } 
    4964 
    50         public virtual void OnSelectLost() 
     65        public void Hit(Unit u, int damage, float dir, float pushPower) 
    5166        { 
    52             isSelected = false; 
     67            if (u.CanBeHurtBy(this)) 
     68                u.OnDamage(this, damage, dir, pushPower); 
     69            if (u.Health <= 0) 
     70                u.Remove(); 
    5371        } 
    5472 
    55         public virtual void OnFunctionClick() { } 
     73        public virtual void OnDamage(Unit attacker, int damage, float dir, float pushPower) 
     74        { 
     75            Health -= damage; 
     76            if (colorizeOnHit) 
     77                colorizer = Color.Red; 
     78            if (immunityTime > 0) 
     79            { 
     80                wasHurt = true; 
     81                HasHealth = false; 
     82            } 
     83        } 
     84 
     85        public virtual void OnFunctionClick(float x, float z) { } 
    5686 
    5787        public override void Update() 
    5888        { 
    59             if (isSelected) 
     89            if (IsSelected) 
    6090            { 
    6191                timer += arrowSpeed; 
    6292                if (timer >= MathHelper.TwoPi) timer = -MathHelper.TwoPi; 
    6393                arrowOffs.Y = (float)Math.Sin(timer) * 2.0F; 
     94            } 
     95 
     96            if (wasHurt) 
     97            { 
     98                immunityTimer++; 
     99                if (immunityTimer >= immunityTime) 
     100                { 
     101                    wasHurt = false; 
     102                    immunityTimer = 0; 
     103                    colorizer = Color.White; 
     104                    HasHealth = true; 
     105                } 
    64106            } 
    65107        } 
     
    80122        } 
    81123 
     124        public float DistanceToSqr(float x, float z) 
     125        { 
     126            float xd = X - x; 
     127            float zd = Z - z; 
     128 
     129            return xd * xd + zd * zd; 
     130        } 
     131 
    82132        public float DistanceFromScreenSpaceSqr(float x, float y) 
    83133        { 
     
    95145        public override void Render(RenderHelper renderer) 
    96146        { 
    97             if (isSelected) 
     147            if (IsSelected) 
    98148                RenderHighLight(renderer); 
    99149        } 
Note: See TracChangeset for help on using the changeset viewer.