Changeset 4635 for 2013


Ignore:
Timestamp:
2013-07-24 15:02:03 (6 years ago)
Author:
dezhidki
Message:

Talletus.

Location:
2013/30/DenisZ/CastleMaster/CastleMaster
Files:
3 added
21 edited

Legend:

Unmodified
Added
Removed
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Ai/AStar.cs

    r4593 r4635  
    5757        public void InitializePathFinder(int xStart, int zStart, int xEnd, int zEnd, bool ignoreSolidnessForEnd) 
    5858        { 
    59             tiles = level.BuildSolidnessTable(mob, ignoreSolidnessForEnd, xEnd, zEnd); 
     59            tiles = level.BuildSolidnessTable(mob, ignoreSolidnessForEnd); 
    6060            nodeMap = new Node[level.Width * level.Height]; 
    6161            open.Clear(); 
     
    100100                canPathFind = false; 
    101101            } 
     102        } 
     103 
     104        public void ApplySolidnessToPos(List<int> posList) 
     105        { 
     106            foreach (int i in posList) 
     107                tiles[i] = false; 
    102108        } 
    103109 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Ai/Orders/OrderMove.cs

    r4592 r4635  
    1717        private int moveFails = 0; 
    1818        private float lastDist = 0.0F; 
     19        private bool shouldFindPath = false; 
     20        private bool createNewPathFinder; 
    1921 
    20         public OrderMove(float x, float z, float stopDistance = 2.0F, bool excludeEndSolidness = false) 
     22        public OrderMove(float x, float z, float stopDistance = 2.0F, bool excludeEndSolidness = false, bool createNewPathFinder = true) 
    2123        { 
    2224            this.stopDistance = stopDistance; 
    2325            this.excludeEndSolidness = excludeEndSolidness; 
     26            this.createNewPathFinder = createNewPathFinder; 
    2427            this.x = x; 
    2528            this.z = z; 
     
    2932        { 
    3033            base.Initialize(mob); 
    31             mob.PathFinder.InitializePathFinder((int)(mob.X / Viewport.TILESIZE), (int)(mob.Z / Viewport.TILESIZE), (int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE), excludeEndSolidness); 
     34 
     35            if (createNewPathFinder && mob.DistanceTo(x, z) > 64.0F) 
     36            { 
     37                mob.PathFinder.InitializePathFinder((int)(mob.X / Viewport.TILESIZE), (int)(mob.Z / Viewport.TILESIZE), (int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE), excludeEndSolidness); 
     38                shouldFindPath = true; 
     39            } 
    3240            return this; 
    3341        } 
     
    3543        public override void Update() 
    3644        { 
    37             if (!mob.PathFinder.CanFindPath) 
    38                 return; 
    39             if (mob.PathFinder.IsPathFinding) 
    40                 mob.PathFinder.FindPath(50); 
     45            if (shouldFindPath) 
     46            { 
     47                if (!mob.PathFinder.CanFindPath) 
     48                    return; 
     49                if (mob.PathFinder.IsPathFinding) 
     50                    mob.PathFinder.FindPath(50); 
     51            } 
    4152 
    42             if (mob.PathFinder.Path.Count > 0 && ppi < mob.PathFinder.Path.Count) 
     53            if (shouldFindPath && mob.PathFinder.Path.Count > 0 && ppi < mob.PathFinder.Path.Count) 
    4354            { 
    4455                Node currentTarget = mob.PathFinder.Path[ppi]; 
     
    8697            get 
    8798            { 
    88                 return (mob.DistanceTo(x, z) < stopDistance) || moveFails > 10 || !mob.PathFinder.CanFindPath; 
     99                return (mob.DistanceTo(x, z) < stopDistance) || moveFails > 5 || !mob.PathFinder.CanFindPath; 
    89100            } 
    90101        } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/CastleMaster.csproj

    r4616 r4635  
    7777    <Compile Include="Ai\Node.cs" /> 
    7878    <Compile Include="Ai\Orders\Order.cs" /> 
     79    <Compile Include="Ai\Orders\OrderGoAround.cs" /> 
    7980    <Compile Include="Ai\Orders\OrderMove.cs" /> 
    8081    <Compile Include="Entities\Entity.cs" /> 
     
    107108    <Compile Include="Units\Unit.cs" /> 
    108109    <Compile Include="Units\UnitKing.cs" /> 
     110    <Compile Include="Units\UnitStore.cs" /> 
    109111    <Compile Include="World\Level.cs" /> 
    110112    <Compile Include="World\LevelBuilder.cs" /> 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Entities/Entity.cs

    r4616 r4635  
    5555        protected Vector2 ScreenPos { get { return screenPos * Viewport.ZOOM; } } 
    5656 
    57         public virtual void Remove() 
     57        public void Remove() 
    5858        { 
    5959            Removed = true; 
     
    8686        public bool Move(float xd, float zd) 
    8787        { 
    88             if(xd == 0.0F && zd == 0.0F) return false; 
     88            if (xd == 0.0F && zd == 0.0F) return false; 
    8989 
    9090            if (BoundingRectangle.XRight + xd > level.Width * Viewport.TILESIZE) return false; 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Entities/EntityArrow.cs

    r4616 r4635  
    1010using CastleMaster.Physics; 
    1111using CastleMaster.Graphics; 
     12using System.Diagnostics; 
    1213 
    1314namespace CastleMaster.Entities 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Game.cs

    r4616 r4635  
    8080            input.RegisterKeyboardKey(Keys.S); 
    8181            input.RegisterKeyboardKey(Keys.D); 
    82             input.RegisterKeyboardKey(Keys.Z); 
    83             input.RegisterKeyboardKey(Keys.X); 
    8482            input.RegisterKeyboardKey(Keys.F4); 
     83            input.RegisterKeyboardKey(Keys.ShiftKey); 
     84            input.RegisterKeyboardKey(Keys.ControlKey); 
    8585 
    8686            input.RegisterMouseKey(MouseButtons.Middle); 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Graphics/AnimationHelper.cs

    r4590 r4635  
    2020            currentTicks = 0; 
    2121        } 
     22 
     23        public bool IsRunning { get { return isRunning; } } 
    2224 
    2325        public int CurrentFrame { get { return currentFrame; } } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Graphics/Resources.cs

    r4616 r4635  
    1212        public static int SPRITESHEET_RANGER { get; private set; } 
    1313        public static int SPRITE_KING { get; private set; } 
     14        public static int SPRITE_STORE { get; private set; } 
    1415 
    1516        public static void LoadResources(ContentManager cm, RenderHelper renderer) 
     
    2122            SPRITESHEET_RANGER = renderer.RegisterSpriteSheet(new SpriteSheet(cm.Load<Texture2D>("mobs/archer"), 32, 32)); 
    2223            SPRITE_KING = renderer.RegisterSpriteSheet(new SpriteSheet(cm.Load<Texture2D>("mobs/king"), 160, 128)); 
     24            SPRITE_STORE = renderer.RegisterSpriteSheet(new SpriteSheet(cm.Load<Texture2D>("mobs/store"), 240, 147)); 
    2325        } 
    2426    } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Players/PlayerReal.cs

    r4592 r4635  
    99using Microsoft.Xna.Framework; 
    1010using CastleMaster.Units; 
     11using CastleMaster.Units.Mobs; 
     12using System.Diagnostics; 
    1113 
    1214namespace CastleMaster.Players 
     
    1416    public class PlayerReal : Player 
    1517    { 
     18        private const int SPEED_SLOW = 10; 
     19        private const int SPREED_FAST = 20; 
     20 
    1621        private bool moveWorldWithMouse = false; 
    1722        private Point oldMousePos; 
    1823        private Unit selectedUnit; 
     24        private int cameraSpeed = 10; 
     25        private List<Mob> selectedMobUnits; 
    1926 
    2027        public PlayerReal(Team team, Level level, Camera camera) 
     
    2229        { 
    2330            oldMousePos = Point.Zero; 
     31            selectedMobUnits = new List<Mob>(); 
    2432        } 
    2533 
    2634        public override void Update() 
    2735        { 
     36            cameraSpeed = InputHandler.IsKeyDown(Keys.ShiftKey) ? SPREED_FAST : SPEED_SLOW; 
     37 
     38            if (InputHandler.IsKeyDown(Keys.W)) 
     39                camera.YTop -= cameraSpeed; 
     40            if (InputHandler.IsKeyDown(Keys.S)) 
     41                camera.YTop += cameraSpeed; 
     42            if (InputHandler.IsKeyDown(Keys.A)) 
     43                camera.XLeft -= cameraSpeed; 
     44            if (InputHandler.IsKeyDown(Keys.D)) 
     45                camera.XLeft += cameraSpeed; 
     46 
    2847            if (InputHandler.HasMouseButtonBeenPressed(MouseButtons.Middle) || moveWorldWithMouse) 
    2948            { 
     
    4766            { 
    4867                Unit u = SelectUnit(Team); 
    49                 if (selectedUnit != null) 
    50                     selectedUnit.IsSelected = false; 
    51                 selectedUnit = u; 
    52                 if (selectedUnit != null) 
    53                     selectedUnit.IsSelected = true; 
     68 
     69                if (InputHandler.IsKeyDown(Keys.ControlKey) && u != null && u is Mob) 
     70                { 
     71                    if (selectedUnit != null) 
     72                    { 
     73                        selectedUnit.IsSelected = false; 
     74                        selectedUnit = null; 
     75                    } 
     76                    selectedMobUnits.Add((Mob)u); 
     77                    u.IsSelected = true; 
     78                } 
     79                else 
     80                { 
     81                    selectedMobUnits.ForEach(m => m.IsSelected = false); 
     82                    selectedMobUnits.Clear(); 
     83 
     84                    if (u != null) 
     85                    { 
     86                        if (!(u is Mob)) 
     87                            selectedUnit = u; 
     88                        else 
     89                            selectedMobUnits.Add((Mob)u); 
     90 
     91                        u.IsSelected = true; 
     92                    } 
     93                } 
    5494            } 
    5595 
     
    5797            { 
    5898                if (selectedUnit != null) 
    59                     selectedUnit.OnFunctionClick(camera.MouseWorldPos.X, camera.MouseWorldPos.Y); 
     99                    selectedUnit.OnFunctionClick(camera.MouseWorldPos.X, camera.MouseWorldPos.Y, false); 
     100                else if (selectedMobUnits.Count > 0) 
     101                    selectedMobUnits[0].OnGroupOrder(selectedMobUnits, camera.MouseWorldPos.X, camera.MouseWorldPos.Y); 
    60102            } 
    61103        } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/Mobs/Mob.cs

    r4616 r4635  
    1111using CastleMaster.Graphics; 
    1212using CastleMaster.Entities; 
     13using System.Collections; 
    1314 
    1415namespace CastleMaster.Units.Mobs 
    1516{ 
    16     public class Mob : Unit 
     17    public abstract class Mob : Unit 
    1718    { 
    18         private Order currentOrder; 
     19        protected Order currentOrder; 
    1920        private float dir = 0.0F; 
    20         private AStar pathFinder; 
     21        protected AStar pathFinder; 
    2122        protected int dirID; 
    2223        protected AnimationHelper walkingAnimation; 
     
    3637            pushResistance = 0.0F; 
    3738        } 
     39 
     40        public Level Level { get { return level; } } 
    3841 
    3942        protected float Direction { get { return dir; } } 
     
    6568                MoveTo(dir, pushPower); 
    6669                isPushed = false; 
     70            } 
     71        } 
     72 
     73        public void OnGroupOrder(List<Mob> mobs, float x, float z) 
     74        { 
     75            foreach (var mobGroup in mobs.GroupBy(m => m.TypeID)) 
     76            { 
     77                List<Mob> ms = mobGroup.ToList(); 
     78                ms[0].OnSameTypeGroupOrder(ms, x, z); 
     79            } 
     80        } 
     81 
     82        protected virtual void OnSameTypeGroupOrder(List<Mob> mobs, float x, float z) 
     83        { 
     84            OnFunctionClick(x, z, false); 
     85            foreach (Mob m in mobs) 
     86            { 
     87                if (m == this) continue; 
     88                m.OnFunctionClick(x, z, true); 
     89                m.pathFinder = pathFinder; 
    6790            } 
    6891        } 
     
    156179            return (int)(Math.Floor(dir * 8 / MathHelper.TwoPi + 0.5F)) & 7; 
    157180        } 
     181 
     182        public abstract int TypeID { get; } 
    158183    } 
    159184} 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/Mobs/MobRanger.cs

    r4616 r4635  
    1515        private enum OrderType { ATTACK, WALK, NONE } 
    1616 
    17         private const float ATTACK_RANGE = 60.0F; 
    18         private const float ATTACK_RANGE_SQR = ATTACK_RANGE * ATTACK_RANGE; 
     17        private float ATTACK_RANGE_OFFSET = 20.0F; 
     18        private float attackRange, attackRangeSqr; 
    1919 
    2020        private Unit target; 
    2121        private OrderType currentOrderType = OrderType.NONE; 
    2222        private bool isAttacking = false; 
    23         private int maxDamage = 5; 
     23        private int maxDamage = 4; 
    2424        private AnimationHelper hitAnimation; 
    2525        private int spriteX; 
    26         private float pushPower = 5.0F; 
     26        private float pushPower = 2.0F; 
    2727 
    2828        public MobRanger(Level level, Player owner) 
     
    3030        { 
    3131            HasHealth = true; 
    32             maxHealth = 50; 
     32            maxHealth = 30; 
    3333 
    3434            spriteSize.X = 17; 
     
    4141            rectOffset.Update(-4.0F, -4.0F, 5.0F, 5.0F); 
    4242            isSolid = true; 
    43             moveSpeed = 1.0F; 
    44             hitAnimation = new AnimationHelper(10, 5, false, 3); 
     43            moveSpeed = 1.6F; 
     44            hitAnimation = new AnimationHelper(5, 5, false, 3); 
    4545            hitAnimation.RoundEnded += delegate() 
    4646            { 
    4747                if (target != null) 
    48                     level.AddEntity(new EntityArrow(level, 5, 2.0F, target, this, Owner.Team), X + (float)Math.Cos(Direction) * 2.0F, Z + (float)Math.Sin(Direction) * 2.0F); 
     48                    level.AddEntity(new EntityArrow(level, Game.Random.Next(0, maxDamage + 1), pushPower, target, this, Owner.Team), X + (float)Math.Cos(Direction) * 2.0F, Z + (float)Math.Sin(Direction) * 2.0F); 
    4949            }; 
     50        } 
     51 
     52        public override int TypeID 
     53        { 
     54            get { return 1; } 
    5055        } 
    5156 
     
    7075        } 
    7176 
    72         private void CreateAttackOrder(Unit u) 
     77        private void CreateAttackOrder(Unit u, bool wasCalledBefore) 
    7378        { 
    7479            currentOrderType = OrderType.ATTACK; 
    75             SetOrder(new OrderMove(u.X, u.Z, ATTACK_RANGE, true)); 
     80            attackRange = u.Width + ATTACK_RANGE_OFFSET; 
     81            attackRangeSqr = attackRange * attackRange; 
     82            SetOrder(new OrderMove(u.X, u.Z, attackRange, true, !wasCalledBefore)); 
    7683            target = u; 
    7784        } 
     
    8188            base.Damage(attacker, damage, dir, pushPower); 
    8289            if (!isAttacking && currentOrderType == OrderType.NONE) 
    83                 CreateAttackOrder(attacker); 
     90                CreateAttackOrder(attacker, false); 
    8491        } 
    8592 
     
    93100        } 
    94101 
    95         public override void OnFunctionClick(float x, float z) 
     102        public override void OnFunctionClick(float x, float z, bool wasCalledBefore) 
    96103        { 
    97104            Unit u = Owner.SelectUnit(Game.GetEnemyTeam(Owner.Team)); 
    98105            if (u != null) 
    99                 CreateAttackOrder(u); 
     106                CreateAttackOrder(u, wasCalledBefore); 
    100107            else 
    101108            { 
    102109                if (target != null) StopAttack(); 
    103110                currentOrderType = OrderType.WALK; 
    104                 SetOrder(new OrderMove(x, z)); 
     111                SetOrder(new OrderMove(x, z, createNewPathFinder: !wasCalledBefore)); 
    105112            } 
    106113        } 
     
    112119            if (isAttacking) 
    113120            { 
    114                 if (DistanceToSqr(target.X, target.Z) > ATTACK_RANGE_SQR) 
     121                if (DistanceToSqr(target.X, target.Z) > attackRangeSqr) 
    115122                { 
    116123                    isAttacking = false; 
    117                     CreateAttackOrder(target); 
     124                    CreateAttackOrder(target, false); 
    118125                } 
    119126                else 
     
    129136                List<Unit> units = level.GetNearbyEnemyUnits(Game.GetEnemyTeam(Owner.Team), (int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE), 4); 
    130137                if (units.Count > 0) 
    131                     CreateAttackOrder(units[0]); 
     138                    CreateAttackOrder(units[0], false); 
    132139            } 
    133140 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/Mobs/MobWarrior.cs

    r4616 r4635  
    1515        private enum OrderType { ATTACK, WALK, NONE } 
    1616 
    17         private const float ATTACK_RANGE = 20.0F; 
    18         private const float ATTACK_RANGE_SQR = ATTACK_RANGE * ATTACK_RANGE; 
     17        private float ATTACK_RANGE_OFFSET = 20.0F; 
     18        private float attackRange, attackRangeSqr; 
    1919 
    2020        private Unit target; 
    2121        private OrderType currentOrderType = OrderType.NONE; 
    2222        private bool isAttacking = false; 
    23         private int maxDamage = 5; 
     23        private int maxDamage = 7; 
    2424        private AnimationHelper hitAnimation; 
    2525        private int spriteX; 
     
    4141            rectOffset.Update(-4.0F, -4.0F, 5.0F, 5.0F); 
    4242            isSolid = true; 
    43             moveSpeed = 1.0F; 
     43            moveSpeed = 1.25F; 
    4444            hitAnimation = new AnimationHelper(8, 5, false, 3); 
    4545            hitAnimation.RoundEnded += delegate 
     
    4848                    Hit(target, Game.Random.Next(1, maxDamage + 1), Direction, pushPower); 
    4949            }; 
     50        } 
     51 
     52        public override int TypeID 
     53        { 
     54            get { return 2; } 
    5055        } 
    5156 
     
    7075        } 
    7176 
    72         private void CreateAttackOrder(Unit u) 
     77        private void CreateAttackOrder(Unit u, bool wasCalledBefore) 
    7378        { 
    7479            currentOrderType = OrderType.ATTACK; 
    75             SetOrder(new OrderMove(u.X, u.Z, ATTACK_RANGE, true)); 
     80            attackRange = u.Width / 2 + ATTACK_RANGE_OFFSET; 
     81            attackRangeSqr = attackRange * attackRange; 
     82            SetOrder(new OrderMove(u.X, u.Z, attackRange, true, !wasCalledBefore)); 
    7683            target = u; 
    7784        } 
     
    8188            base.Damage(attacker, damage, dir, pushPower); 
    8289            if (!isAttacking && currentOrderType == OrderType.NONE) 
    83                 CreateAttackOrder(attacker); 
     90                CreateAttackOrder(attacker, false); 
    8491        } 
    8592 
     
    93100        } 
    94101 
    95         public override void OnFunctionClick(float x, float z) 
     102        public override void OnFunctionClick(float x, float z, bool wasCalledBefore) 
    96103        { 
    97104            Unit u = Owner.SelectUnit(Game.GetEnemyTeam(Owner.Team)); 
    98105            if (u != null) 
    99                 CreateAttackOrder(u); 
     106                CreateAttackOrder(u, wasCalledBefore); 
    100107            else 
    101108            { 
    102109                if (target != null) StopAttack(); 
    103110                currentOrderType = OrderType.WALK; 
    104                 SetOrder(new OrderMove(x, z)); 
     111                SetOrder(new OrderMove(x, z, createNewPathFinder: !wasCalledBefore)); 
    105112            } 
    106113        } 
     
    112119            if (isAttacking) 
    113120            { 
    114                 if (DistanceToSqr(target.X, target.Z) > ATTACK_RANGE_SQR) 
     121                if (DistanceToSqr(target.X, target.Z) > attackRangeSqr) 
    115122                { 
    116123                    isAttacking = false; 
    117                     CreateAttackOrder(target); 
     124                    CreateAttackOrder(target, false); 
    118125                } 
    119126                else 
     
    124131                        StopAttack(); 
    125132                } 
     133                if (target == null || target.Removed) 
     134                    StopAttack(); 
    126135            } 
    127136            else if (!isAttacking && currentOrderType == OrderType.NONE) 
     
    129138                List<Unit> units = level.GetNearbyEnemyUnits(Game.GetEnemyTeam(Owner.Team), (int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE), 2); 
    130139                if (units.Count > 0) 
    131                     CreateAttackOrder(units[0]); 
     140                    CreateAttackOrder(units[0], false); 
    132141            } 
    133142 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/Mobs/MobWoodcutter.cs

    r4616 r4635  
    2323        { 
    2424            HasHealth = true; 
    25             maxHealth = 15; 
     25            maxHealth = 20; 
    2626 
    2727            spriteSize.X = 17; 
     
    3535            isSolid = true; 
    3636 
    37             moveSpeed = 1.0F; 
     37            moveSpeed = 2.0F; 
    3838            choppingAnimation = new AnimationHelper(10, 5, false, 3); 
    3939            choppingAnimation.RoundEnded += delegate() 
     
    4747                } 
    4848            }; 
     49        } 
     50 
     51        public override int TypeID 
     52        { 
     53            get { return 0; } 
    4954        } 
    5055 
     
    6368        } 
    6469 
    65         public override void OnFunctionClick(float x, float z) 
     70        public override void OnFunctionClick(float x, float z, bool wasCalledBefore) 
    6671        { 
    6772            TileEntity te = level.GetTileEntity((int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE)); 
     
    7176                isOrderedToChop = true; 
    7277                currentTarget = (TileEntityTree)te; 
    73                 SetOrder(new OrderMove(te.X, te.Z, 20.0F, true)); 
     78                SetOrder(new OrderMove(currentTarget.X, currentTarget.Z, 20.0F, true, !wasCalledBefore)); 
    7479            } 
    7580            else 
     
    8085                    currentTarget = null; 
    8186                } 
    82                 SetOrder(new OrderMove(x, z)); 
     87                SetOrder(new OrderMove(x, z, createNewPathFinder: !wasCalledBefore)); 
    8388            } 
    8489        } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/Unit.cs

    r4616 r4635  
    8383        } 
    8484 
    85         public virtual void OnFunctionClick(float x, float z) { } 
     85        public virtual void OnFunctionClick(float x, float z, bool wasCalledBefore) { } 
    8686 
    8787        public override void Update() 
    8888        { 
     89            base.Update(); 
     90 
    8991            if (IsSelected) 
    9092            { 
     
    105107                } 
    106108            } 
     109        } 
     110 
     111        public override void OnRemoved() 
     112        { 
     113            level.RemoveUnit(this); 
    107114        } 
    108115 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/UnitKing.cs

    r4616 r4635  
    1414            : base(level, owner) 
    1515        { 
     16            width = 5 * Viewport.TILESIZE; 
     17            depth = 5 * Viewport.TILESIZE; 
    1618            HasHealth = true; 
    1719            maxHealth = 150; 
     
    2931 
    3032            rectOffset.Update(-2 * Viewport.TILESIZE, -2 * Viewport.TILESIZE, 2 * Viewport.TILESIZE, 2 * Viewport.TILESIZE); 
     33            immunityTime = 20; 
    3134        } 
    3235 
    3336        public override void Render(RenderHelper renderer) 
    3437        { 
    35             renderer.Render(ScreenPos, 0, 0, Resources.SPRITE_KING, Viewport.ZOOM); 
     38            renderer.Render(ScreenPos, 0, 0, Resources.SPRITE_KING, colorizer, Viewport.ZOOM); 
    3639            base.Render(renderer); 
    3740        } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/Level.cs

    r4616 r4635  
    1212using CastleMaster.Units.Mobs; 
    1313using System; 
     14using System.Diagnostics; 
    1415 
    1516namespace CastleMaster.World 
     
    215216        } 
    216217 
     218        public void RemoveUnit(Unit u) 
     219        { 
     220            units[u.Owner.Team.ID].Remove(u); 
     221        } 
     222 
    217223        public void SetPlayer(Player player, int id) 
    218224        { 
     
    222228        public void SetTile(int tileX, int tileZ, int tileID) 
    223229        { 
    224             if (IsValidPos(tileX, tileZ)) 
    225                 tiles[tileX + tileZ * width] = tileID; 
     230            tiles[tileX + tileZ * width] = tileID; 
    226231        } 
    227232 
    228233        public void SetData(int tileX, int tileZ, byte dataVal) 
    229234        { 
    230             if (IsValidPos(tileX, tileZ)) 
    231                 data[tileX + tileZ * width] = dataVal; 
     235            data[tileX + tileZ * width] = dataVal; 
    232236        } 
    233237 
     
    336340 
    337341                    Tile t = registeredTiles[tiles[x + z * width]]; 
    338                     if (t.IsSolid && t.GetBoundingRect(x, z).Intersects(entBR)) 
     342                    if (t.IsSolidTo(ent) && t.GetBoundingRect(x, z).Intersects(entBR)) 
    339343                        t.AddBoundingRect(ref result, x, z); 
    340344                } 
     
    375379        } 
    376380 
    377         public bool[] BuildSolidnessTable(Mob mob, bool excludeEndSolidness = false, int xEnd = 0, int zEnd = 0) 
     381        public bool[] BuildSolidnessTable(Mob mob, bool excludeEndSolidness = false) 
    378382        { 
    379383            bool[] result = new bool[tiles.Length]; 
     
    381385            for (int i = 0; i < tiles.Length; i++) 
    382386            { 
    383                 result[i] = tiles[i] == TILE_VOID || registeredTiles[tiles[i]].IsSolid; 
     387                Tile t = registeredTiles[tiles[i]]; 
     388                if (t is TileFloor && excludeEndSolidness) 
     389                    result[i] = false; 
     390                else 
     391                    result[i] = tiles[i] == TILE_VOID || t.IsSolid; 
    384392 
    385393                List<Entity> entInTiles = entitiesInTiles[i]; 
     
    394402            return result; 
    395403        } 
     404 
     405        public List<int> GetEntitySolidnessList(Entity caller, int xTile, int zTile, int radius) 
     406        { 
     407            List<int> result = new List<int>(); 
     408 
     409            for (int z = zTile - radius; z <= zTile + radius; z++) 
     410            { 
     411                if (z < 0 || z >= height) continue; 
     412                for (int x = xTile - radius; x <= xTile + radius; x++) 
     413                { 
     414                    if (x < 0 || x >= width) continue; 
     415                    if (x == xTile && z == zTile) continue; 
     416 
     417                    foreach (Entity ent in entitiesInTiles[x + z * width]) 
     418                    { 
     419                        if (ent.Blocks(caller)) 
     420                        { 
     421                            result.Add(x + z * width); 
     422                            continue; 
     423                        } 
     424                    } 
     425                } 
     426            } 
     427 
     428 
     429            return result; 
     430        } 
    396431    } 
    397432} 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/LevelForest.cs

    r4616 r4635  
    1111    public class LevelForest : Level 
    1212    { 
    13         private int TILE_FLOOR, TILE_WATER, TILE_FLOOR_SOLID, TILE_KING1_HINT, TILE_KING1_HINT2; 
    14         private UnitKing king1; 
     13        private int TILE_FLOOR, TILE_WATER, TILE_FLOOR_SOLID, TILE_KING1_HINT, TILE_KING1_HINT2, TILE_STORE1_HINT, TILE_KING2_HINT, TILE_KING2_HINT2, TILE_STORE2_HINT; 
     14        private UnitKing king1, king2; 
     15        private UnitStore store1, store2; 
    1516 
    1617        public LevelForest(Texture2D tileMap) 
     
    2122        protected override void InitTiles() 
    2223        { 
     24            king1 = new UnitKing(this, Players[0]); 
     25            store1 = new UnitStore(this, Players[0]); 
     26 
     27            king2 = new UnitKing(this, Players[1]); 
     28            store2 = new UnitStore(this, Players[1]); 
     29 
    2330            TILE_FLOOR = new TileFloor(this).ID; 
    2431            TILE_WATER = new TileWater(this).ID; 
    2532            TILE_FLOOR_SOLID = new TileFloor(this, true).ID; 
    26             king1 = new UnitKing(this, Players[0]); 
    2733            TILE_KING1_HINT = new TileRenderHint(this, king1, true, false).ID; 
    2834            TILE_KING1_HINT2 = new TileRenderHint(this, king1, false, false).ID; 
     35            TILE_STORE1_HINT = new TileRenderHint(this, store1, true, true).ID; 
     36            TILE_KING2_HINT = new TileRenderHint(this, king2, true, false).ID; 
     37            TILE_STORE2_HINT = new TileRenderHint(this, store2, true, true).ID; 
     38            TILE_KING2_HINT2 = new TileRenderHint(this, king2, false, false).ID; 
    2939        } 
    3040 
     
    3545            LevelBuilder lb = new LevelBuilder(this, tileMap); 
    3646 
    37             lb.AddTile(0xFF808080, TILE_FLOOR_SOLID); 
    3847            lb.AddTile(0xFF707070, TILE_KING1_HINT); 
    3948            lb.AddTile(0xFF606060, TILE_KING1_HINT2); 
    40             lb.AddTile(0xFFFFD800, TILE_FLOOR); 
    41             lb.AddTile(0xFF00FFFF, TILE_FLOOR); 
    42             lb.AddTile(0xFFFF0000, TILE_FLOOR); 
    43             lb.AddTile(0xFF0000FF, TILE_FLOOR); 
    44             lb.AddTile(0xFF21007F, TILE_FLOOR); 
     49            lb.AddTile(0xFF505050, TILE_STORE1_HINT); 
     50 
     51            lb.AddTile(0xFF707071, TILE_KING2_HINT); 
     52            lb.AddTile(0xFF606061, TILE_KING2_HINT2); 
     53            lb.AddTile(0xFF505051, TILE_STORE2_HINT); 
     54 
     55            lb.AddTile(0xFF808080, TILE_FLOOR_SOLID); 
    4556            lb.AddTile(0xFF404040, TILE_FLOOR); 
    4657            lb.AddTile(0xFF0094FF, TILE_WATER); 
    4758            lb.AddTile(0xFF303030, TILE_FLOOR, 2); 
    48             lb.AddTile(0xFF202020, TILE_FLOOR, 4); 
    49             lb.AddTile(0xFF202021, TILE_FLOOR, 5); 
    50             lb.AddTile(0xFF101010, TILE_FLOOR, 3); 
    51             lb.AddTile(0xFF0094FF, TILE_WATER, 8); 
    52             lb.AddTile(0xFF00B200, TILE_FLOOR, 6); 
    53             lb.AddTile(0xFF00CC00, TILE_FLOOR, 6); 
     59 
     60            lb.AddTile(0xFF0000FF, TILE_FLOOR); 
     61            lb.AddTile(0xFFFFD800, TILE_FLOOR); 
    5462            lb.AddTile(0xFFFF0000, TILE_FLOOR); 
    55             lb.AddTile(0xFFFF0001, TILE_FLOOR); 
     63            lb.AddTile(0xFF21007F, TILE_FLOOR); 
    5664            lb.AddEntity(0xFFE55B00, typeof(TileEntityBlock), 8.0F, 8.0F, this, 4, 1); 
    5765            lb.AddEntity(0xFF00B200, typeof(TileEntityBlock), 8.0F, 8.0F, this, 2, 2); 
     
    6169            lb.AddEntity(0xFF0000FF, typeof(MobWarrior), 8.0F, 8.0F, this, Players[0]); 
    6270            lb.AddEntity(0xFFFF0000, typeof(MobWoodcutter), 8.0F, 8.0F, this, Players[0]); 
     71            lb.AddEntity(0xFFFFD800, typeof(MobRanger), 8.0F, 8.0F, this, Players[0]); 
    6372            lb.AddEntity(0xFF21007F, typeof(MobWarrior), 8.0F, 8.0F, this, Players[1]); 
    6473            lb.AddEntity(0xFF00FFFF, typeof(MobWoodcutter), 8.0F, 8.0F, this, Players[1]); 
    65             lb.AddEntity(0xFFFFD800, typeof(MobRanger), 8.0F, 8.0F, this, Players[0]); 
     74 
     75            lb.AddCustom(0xFFFF6A03, delegate(Level level, int xTile, int zTile) 
     76            { 
     77                level.AddEntity(king2, xTile * Viewport.TILESIZE + 8.0F, zTile * Viewport.TILESIZE + 8.0F); 
     78            }); 
     79            lb.AddCustom(0xFFFF6A02, delegate(Level level, int xTile, int zTile) 
     80            { 
     81                level.AddEntity(store2, xTile * Viewport.TILESIZE + 8.0F, zTile * Viewport.TILESIZE + 8.0F); 
     82            }); 
     83 
    6684            lb.AddCustom(0xFFFF6A00, delegate(Level level, int xTile, int zTile) 
    6785            { 
    6886                level.AddEntity(king1, xTile * Viewport.TILESIZE + 8.0F, zTile * Viewport.TILESIZE + 8.0F); 
     87            }); 
     88            lb.AddCustom(0xFFFF6A01, delegate(Level level, int xTile, int zTile) 
     89            { 
     90                level.AddEntity(store1, xTile * Viewport.TILESIZE + 8.0F, zTile * Viewport.TILESIZE + 8.0F); 
    6991            }); 
    7092 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/Tiles/Tile.cs

    r4581 r4635  
    2121 
    2222        public bool IsSolid { get; protected set; } 
     23 
     24        public virtual bool IsSolidTo(Entity ent) 
     25        { 
     26            return IsSolid && !(ent is EntityArrow); 
     27        } 
    2328 
    2429        public virtual BoundingRectangle GetBoundingRect(int xTile, int zTile) 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/Tiles/TileRenderHint.cs

    r4616 r4635  
    1818        { 
    1919            this.entToRender = entToRender; 
     20            this.renderTile = renderTile; 
    2021            IsSolid = isSolid; 
    2122        } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMasterContent/CastleMasterContent.contentproj

    r4616 r4635  
    146146    </Compile> 
    147147  </ItemGroup> 
     148  <ItemGroup> 
     149    <Compile Include="mobs\store.png"> 
     150      <Name>store</Name> 
     151      <Importer>TextureImporter</Importer> 
     152      <Processor>TextureProcessor</Processor> 
     153    </Compile> 
     154  </ItemGroup> 
    148155  <Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.ContentPipeline.targets" /> 
    149156  <!--  To modify your build process, add your task inside one of the targets below and uncomment it.  
Note: See TracChangeset for help on using the changeset viewer.