Changeset 4550 for 2013


Ignore:
Timestamp:
2013-07-23 11:06:44 (6 years ago)
Author:
dezhidki
Message:

Talletus.

Location:
2013/30/DenisZ/CastleMaster/CastleMaster
Files:
8 added
12 edited

Legend:

Unmodified
Added
Removed
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/CastleMaster.csproj

    r4535 r4550  
    7575  <ItemGroup> 
    7676    <Compile Include="Entities\Entity.cs" /> 
     77    <Compile Include="Entities\EntityTestMob.cs" /> 
    7778    <Compile Include="Entities\TileEntities\TileEntity.cs" /> 
    7879    <Compile Include="Entities\TileEntities\TileEntityBlock.cs" /> 
     
    8889    <Compile Include="Physics\BoundingRectangle.cs" /> 
    8990    <Compile Include="Physics\BoundingRectangleOwner.cs" /> 
     91    <Compile Include="Players\Player.cs" /> 
     92    <Compile Include="Players\PlayerReal.cs" /> 
     93    <Compile Include="Players\Team.cs" /> 
    9094    <Compile Include="Properties\AssemblyInfo.cs" /> 
    9195    <Compile Include="Program.cs" /> 
    9296    <Compile Include="Game.cs" /> 
     97    <Compile Include="Units\Unit.cs" /> 
    9398    <Compile Include="World\Level.cs" /> 
    9499    <Compile Include="World\LevelBuilder.cs" /> 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Entities/Entity.cs

    r4535 r4550  
    33using CastleMaster.World; 
    44using Microsoft.Xna.Framework; 
     5using System.Collections.Generic; 
     6using System; 
     7using CastleMaster.World.Tiles; 
    58 
    69namespace CastleMaster.Entities 
     
    1013        protected float x, z, width = 16.0F, depth = 16.0F; 
    1114        protected Level level; 
    12         protected BoundingRectangle boundingRect; 
     15        private BoundingRectangle boundingRect; 
     16        protected BoundingRectangle rectOffset; 
    1317        protected Vector2 renderOffset, screenPos; 
    1418        protected bool isSolid = true; 
     
    2024            screenPos = Vector2.Zero; 
    2125            Removed = false; 
     26            rectOffset = new BoundingRectangle(-width / 2, -depth / 2, width / 2, depth / 2, null); 
    2227        } 
    2328 
     
    4752            screenPos.Y = (x + z) * Viewport.Y_SCALE - renderOffset.Y; 
    4853 
    49             boundingRect = new BoundingRectangle(x - width / 2, z - depth / 2, x + width / 2, z + depth / 2, this); 
     54            boundingRect = new BoundingRectangle(x, z, x, z, this).AddSelf(rectOffset); 
     55        } 
     56 
     57        public void AddBoundingRect(ref List<BoundingRectangle> list, Entity ent) 
     58        { 
     59            if (ent != this) 
     60                list.Add(BoundingRectangle); 
     61        } 
     62 
     63        public virtual bool IsSolidTo(Entity ent) 
     64        { 
     65            return isSolid; 
     66        } 
     67 
     68        public bool Blocks(Entity ent) 
     69        { 
     70            return isSolid || ent.isSolid || IsSolidTo(ent) || ent.IsSolidTo(this); 
     71        } 
     72 
     73        public bool Move(float xd, float zd) 
     74        { 
     75            if (BoundingRectangle.XRight + xd > level.Width * Viewport.TILESIZE) return false; 
     76            if (BoundingRectangle.XLeft + xd < 0.0F) return false; 
     77            if (BoundingRectangle.ZFar + zd < 0.0F) return false; 
     78            if (BoundingRectangle.ZNear + zd > level.Height * Viewport.TILESIZE) return false; 
     79 
     80            int moveSteps = (int)(Math.Sqrt(xd * xd + zd * zd) + 1); 
     81 
     82            bool hasMoved = false; 
     83            for (int i = 0; i < moveSteps; i++) 
     84            { 
     85                hasMoved |= MovePart(xd / moveSteps, 0); 
     86                hasMoved |= MovePart(0, zd / moveSteps); 
     87            } 
     88 
     89            if (hasMoved) 
     90            { 
     91                screenPos.X = (x - z) * Viewport.X_SCALE - renderOffset.X; 
     92                screenPos.Y = (x + z) * Viewport.Y_SCALE - renderOffset.Y; 
     93                BoundingRectangle.Update(x, z, x, z).AddSelf(rectOffset); 
     94            } 
     95 
     96            return hasMoved; 
     97        } 
     98 
     99        private bool MovePart(float xd, float zd) 
     100        { 
     101            List<BoundingRectangle> collidables = level.GetCollidables(this, BoundingRectangle + new Vector2(xd, zd)); 
     102 
     103            foreach (BoundingRectangle collidable in collidables) 
     104            { 
     105                collidable.Owner.OnTouchedBy(this); 
     106                OnTouched(collidable.Owner); 
     107            } 
     108 
     109            collidables.RemoveAll(br => SkipCollisionCheck(br.Owner)); 
     110 
     111            if (collidables.Count > 0) 
     112            { 
     113                foreach (BoundingRectangle collidable in collidables) 
     114                { 
     115                    OnCollidedWith(collidable.Owner); 
     116                    collidable.Owner.OnCollidedBy(this); 
     117                } 
     118 
     119                return false; 
     120            } 
     121 
     122            x += xd; 
     123            z += zd; 
     124 
     125            BoundingRectangle.Update(x, z, x, z).AddSelf(rectOffset); 
     126 
     127            return true; 
     128        } 
     129 
     130        private bool SkipCollisionCheck(BoundingRectangleOwner collidableOwner) 
     131        { 
     132            if (typeof(Entity).IsAssignableFrom(collidableOwner.GetType())) 
     133                return !((Entity)collidableOwner).Blocks(this); 
     134            if (typeof(Tile).IsAssignableFrom(collidableOwner.GetType())) 
     135                return false; 
     136            return true; 
    50137        } 
    51138 
     
    63150 
    64151        public virtual void OnRemoved() { } 
     152 
    65153    } 
    66154} 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Entities/TileEntities/TileEntityBlock.cs

    r4535 r4550  
    1414            this.spriteY = spriteY; 
    1515 
    16             renderOffset.Y = 8; 
     16            renderOffset.Y = 16; 
    1717        } 
    1818 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Game.cs

    r4535 r4550  
    1010using Keys = System.Windows.Forms.Keys; 
    1111using Viewport = CastleMaster.Graphics.Viewport; 
     12using CastleMaster.Players; 
    1213 
    1314namespace CastleMaster 
     
    2021        public const int WIDTH = 800; 
    2122        public const int HEIGHT = 600; 
    22         public const string TITLE = "Castle Master Alpha 0.1"; 
     23        public const string TITLE = "Castle Master Alpha 0.2"; 
    2324 
    2425        private const string UPS_TEXT = " UPS: "; 
     
    3132        private Camera camera; 
    3233        private LevelTest level; 
    33         private int cameraSpeed = 10; 
     34        private Player[] players; 
    3435 
    3536        #region Counter 
     
    4748            input = new InputHandler(Window); 
    4849            Random = new FastRandom(); 
     50            players = new Player[2]; 
    4951        } 
    5052 
     
    5961            graphics.PreferredBackBufferWidth = WIDTH; 
    6062            graphics.PreferredBackBufferHeight = HEIGHT; 
    61             graphics.SynchronizeWithVerticalRetrace = false; 
     63            graphics.SynchronizeWithVerticalRetrace = true; 
    6264            graphics.ApplyChanges(); 
    6365            Window.Title = TITLE; 
     
    8082 
    8183            input.RegisterMouseKey(MouseButtons.Middle); 
     84        } 
     85 
     86        private void AddPlayer(Player p) 
     87        { 
     88            players[p.Team.ID] = p; 
     89            level.SetPlayer(p, p.Team.ID); 
    8290        } 
    8391 
     
    109117            level = new LevelTest(Resources.LEVEL_TEST); 
    110118            camera = new Camera(level); 
     119            AddPlayer(new PlayerReal(new Team("The men", 0), level, camera)); 
    111120        } 
    112121 
     
    119128        { 
    120129            input.Update(); 
    121             camera.Update(); 
    122130 
    123131            if (InputHandler.HasKeyBeenPressed(Keys.F4)) 
    124132                IsFixedTimeStep = !IsFixedTimeStep; 
    125  
    126133            if (InputHandler.HasKeyBeenPressed(Keys.Escape)) 
    127134                this.Exit(); 
    128             if (InputHandler.IsKeyDown(Keys.W)) 
    129                 camera.YTop -= cameraSpeed; 
    130             if (InputHandler.IsKeyDown(Keys.S)) 
    131                 camera.YTop += cameraSpeed; 
    132             if (InputHandler.IsKeyDown(Keys.A)) 
    133                 camera.XLeft -= cameraSpeed; 
    134             if (InputHandler.IsKeyDown(Keys.D)) 
    135                 camera.XLeft += cameraSpeed; 
    136135 
    137136            if (InputHandler.MouseScrollDelta > 1) 
     
    139138            else if (InputHandler.MouseScrollDelta < 0) 
    140139                camera.Zoom(-Viewport.ZOOM_STEP); 
     140 
     141            foreach (Player p in players) 
     142                if (p != null) 
     143                    p.Update(); 
     144 
     145            camera.Update(); 
    141146 
    142147            level.Update(); 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Graphics/Camera.cs

    r4535 r4550  
    1010        private int xOffs = 0, yOffs = 0; 
    1111        private Vector2 mouseWorldPos, selectorPos, selectorPosZoomed; 
    12         private Point mouseTilePos, oldMousePos; 
     12        private Point mouseTilePos; 
    1313        private Level level; 
    14         private bool moveWorldWithMouse = false; 
    1514 
    1615        public Camera(Level level) 
     
    2120            selectorPosZoomed = Vector2.Zero; 
    2221            mouseTilePos = Point.Zero; 
    23             oldMousePos = Point.Zero; 
    2422        } 
    2523 
     
    5250        public void Update() 
    5351        { 
    54             if (InputHandler.HasMouseButtonBeenPressed(MouseButtons.Middle) || moveWorldWithMouse) 
    55             { 
    56                 if (!moveWorldWithMouse) 
    57                 { 
    58                     moveWorldWithMouse = true; 
    59                     oldMousePos = InputHandler.MousePos; 
    60                 } 
    61  
    62                 if (InputHandler.IsMouseButtonDown(MouseButtons.Middle)) 
    63                 { 
    64                     xOffs -= (InputHandler.MousePos.X - oldMousePos.X); 
    65                     yOffs -= (InputHandler.MousePos.Y - oldMousePos.Y); 
    66  
    67                     oldMousePos = InputHandler.MousePos; 
    68                 } 
    69                 else moveWorldWithMouse = false; 
    70             } 
     52             
    7153 
    7254            mouseWorldPos = Viewport.ScreenToWorld(InputHandler.MouseX + xOffs, InputHandler.MouseY + yOffs); 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Graphics/Resources.cs

    r4535 r4550  
    99        public static int SPRITESHEET_ICONS { get; private set; } 
    1010        public static Texture2D LEVEL_TEST { get; private set; } 
     11        public static int SPRITESHEET_WOODCUTTER { get; private set; } 
    1112 
    1213        public static void LoadResources(ContentManager cm, RenderHelper renderer) 
     
    1415            SPRITESHEET_TILES = renderer.RegisterSpriteSheet(new SpriteSheet(cm.Load<Texture2D>("tiles/tilesheet"), 32, 32)); 
    1516            SPRITESHEET_ICONS = renderer.RegisterSpriteSheet(new SpriteSheet(cm.Load<Texture2D>("misc/icons"), 16, 16)); 
     17            SPRITESHEET_WOODCUTTER = renderer.RegisterSpriteSheet(new SpriteSheet(cm.Load<Texture2D>("mobs/woodcutter"), 32, 32)); 
    1618            LEVEL_TEST = cm.Load<Texture2D>("levels/levelTest"); 
    1719        } 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Physics/BoundingRectangle.cs

    r4535 r4550  
    11 
     2using Microsoft.Xna.Framework; 
    23namespace CastleMaster.Physics 
    34{ 
     
    4748        } 
    4849 
     50        public BoundingRectangle AddSelf(float x0, float z0, float x1, float z1) 
     51        { 
     52            this.x0 += x0; 
     53            this.z0 += z0; 
     54            this.x1 += x1; 
     55            this.z1 += z1; 
     56 
     57            return this; 
     58        } 
     59 
     60        public BoundingRectangle AddSelf(BoundingRectangle br) 
     61        { 
     62            this.x0 += br.x0; 
     63            this.z0 += br.z0; 
     64            this.x1 += br.x1; 
     65            this.z1 += br.z1; 
     66 
     67            return this; 
     68        } 
     69 
     70        public static BoundingRectangle operator +(BoundingRectangle br, Vector2 vec) 
     71        { 
     72            return new BoundingRectangle(br.x0 + vec.X, br.z0 + vec.Y, br.x1 + vec.X, br.z1 + vec.Y, br.owner); 
     73        } 
    4974    } 
    5075} 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/Level.cs

    r4535 r4550  
    88using System.Collections.Generic; 
    99using Viewport = CastleMaster.Graphics.Viewport; 
     10using CastleMaster.Players; 
    1011 
    1112namespace CastleMaster.World 
     
    5758        private EntityComprarer comparer = new EntityComprarer(); 
    5859        private AnimationHelper waterAnimation = new AnimationHelper(10, 2); 
     60        private Player[] players; 
    5961 
    6062        public Level(Texture2D tileMap) 
     
    6466            height = tileMap.Height; 
    6567 
     68            players = new Player[2]; 
    6669            tiles = new int[width * height]; 
    6770            data = new byte[width * height]; 
     
    8083            InitLevel(); 
    8184        } 
     85 
     86        public Player[] Players { get { return players; } } 
    8287 
    8388        public int Width { get { return width; } } 
     
    181186        } 
    182187 
     188        public void SetPlayer(Player player, int id) 
     189        { 
     190            players[id] = player; 
     191        } 
     192 
    183193        public void SetTile(int tileX, int tileZ, int tileID) 
    184194        { 
     
    242252        } 
    243253 
     254        public List<BoundingRectangle> GetCollidables(Entity ent, BoundingRectangle entBR) 
     255        { 
     256            List<BoundingRectangle> result = new List<BoundingRectangle>(); 
     257 
     258            int x0 = (int)(entBR.XLeft / Viewport.TILESIZE); 
     259            int z0 = (int)(entBR.ZFar / Viewport.TILESIZE); 
     260            int x1 = (int)(entBR.XRight / Viewport.TILESIZE); 
     261            int z1 = (int)(entBR.ZNear / Viewport.TILESIZE); 
     262 
     263            for (int z = z0; z <= z1; z++) 
     264            { 
     265                if (z < 0 || z >= height) continue; 
     266                for (int x = x0; x <= x1; x++) 
     267                { 
     268                    if (x < 0 || x >= width) continue; 
     269 
     270                    foreach (Entity e in entitiesInTiles[x + z * width]) 
     271                    { 
     272                        if (e != ent && entBR.Intersects(e.BoundingRectangle)) 
     273                            e.AddBoundingRect(ref result, ent); 
     274                    } 
     275 
     276                    Tile t = registeredTiles[tiles[x + z * width]]; 
     277                    if (t.ID != TILE_VOID && t.IsSolid && t.GetBoundingRect(x, z).Intersects(entBR)) 
     278                        t.AddBoundingRect(ref result, x, z); 
     279                } 
     280            } 
     281 
     282            return result; 
     283        } 
     284 
    244285        private bool IsValidPos(int tileX, int tileZ) 
    245286        { 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/LevelTest.cs

    r4535 r4550  
    22using CastleMaster.World.Tiles; 
    33using Microsoft.Xna.Framework.Graphics; 
     4using CastleMaster.Entities; 
    45 
    56namespace CastleMaster.World 
     
    2425            LevelBuilder lb = new LevelBuilder(this, tileMap); 
    2526 
     27            lb.AddTile(0xFFFF0000, TILE_FLOOR); 
    2628            lb.AddTile(0xFF404040, TILE_FLOOR); 
    2729            lb.AddTile(0xFF0094FF, TILE_WATER); 
     
    3638            lb.AddTile(0xFFFF0000, TILE_FLOOR); 
    3739            lb.AddTile(0xFFFF0001, TILE_FLOOR); 
    38             lb.AddEntity(0xFFFF6A00, typeof(TileEntityBlock), 0.0F, 0.0F, this, 0, 0); 
    39             lb.AddEntity(0xFFE55B00, typeof(TileEntityBlock), 0.0F, 0.0F, this, 4, 1); 
    40             lb.AddEntity(0xFF00B200, typeof(TileEntityBlock), 0.0F, 0.0F, this, 2, 2); 
    41             lb.AddEntity(0xFF00CC00, typeof(TileEntityBlock), 0.0F, 0.0F, this, 1, 2); 
    42             lb.AddEntity(0xFF00E500, typeof(TileEntityBlock), 0.0F, 0.0F, this, 0, 2); 
    43             lb.AddEntity(0xFF00FF00, typeof(TileEntityBlock), 0.0F, 0.0F, this, 6, 0); 
     40            lb.AddEntity(0xFFFF6A00, typeof(TileEntityBlock), 8.0F, 8.0F, this, 0, 0); 
     41            lb.AddEntity(0xFFE55B00, typeof(TileEntityBlock), 8.0F, 8.0F, this, 4, 1); 
     42            lb.AddEntity(0xFF00B200, typeof(TileEntityBlock), 8.0F, 8.0F, this, 2, 2); 
     43            lb.AddEntity(0xFF00CC00, typeof(TileEntityBlock), 8.0F, 8.0F, this, 1, 2); 
     44            lb.AddEntity(0xFF00E500, typeof(TileEntityBlock), 8.0F, 8.0F, this, 0, 2); 
     45            lb.AddEntity(0xFF00FF00, typeof(TileEntityBlock), 8.0F, 8.0F, this, 6, 0); 
     46            lb.AddEntity(0xFFFF0000, typeof(EntityTestMob), 0.0F, 0.0F, this); 
    4447 
    4548            lb.BuildLevel(); 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/Tiles/Tile.cs

    r4535 r4550  
    11using CastleMaster.Graphics; 
    22using Microsoft.Xna.Framework; 
     3using CastleMaster.Physics; 
     4using CastleMaster.Entities; 
     5using System.Collections.Generic; 
    36 
    47namespace CastleMaster.World.Tiles 
    58{ 
    6     public class Tile 
     9    public class Tile : BoundingRectangleOwner 
    710    { 
    811        private int id; 
     
    1013        public Tile(Level level) 
    1114        { 
     15            IsSolid = false; 
    1216            level.RegisteredTiles.Add(this); 
    1317            id = level.RegisteredTiles.Count - 1; 
     
    1620        public int ID { get { return id; } } 
    1721 
     22        public bool IsSolid { get; protected set; } 
     23 
     24        public virtual BoundingRectangle GetBoundingRect(int xTile, int zTile) 
     25        { 
     26            return new BoundingRectangle(xTile * Viewport.ZOOM, zTile * Viewport.ZOOM, (xTile + 1) * Viewport.ZOOM, (zTile + 1) * Viewport.ZOOM, this); 
     27        } 
     28 
     29        public virtual void AddBoundingRect(ref List<BoundingRectangle> list, int xTile, int zTile) 
     30        { 
     31            list.Add(new BoundingRectangle(xTile * Viewport.ZOOM, zTile * Viewport.ZOOM, (xTile + 1) * Viewport.ZOOM, (zTile + 1) * Viewport.ZOOM, this)); 
     32        } 
     33 
    1834        public virtual void Update(Level level, int tileX, int tileZ) { } 
    1935 
    2036        public virtual void Render(RenderHelper renderer, Level level, Vector2 screenPos, int tileX, int tileZ, byte dataVal) { } 
     37 
     38        public virtual void OnTouched(BoundingRectangleOwner touching) { } 
     39 
     40        public virtual void OnTouchedBy(BoundingRectangleOwner toucher) { } 
     41 
     42        public virtual void OnCollidedWith(BoundingRectangleOwner colliding) { } 
     43 
     44        public virtual void OnCollidedBy(BoundingRectangleOwner collidable) { } 
    2145    } 
    2246} 
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMasterContent/CastleMasterContent.contentproj

    r4535 r4550  
    7171      <Processor>TextureProcessor</Processor> 
    7272    </Compile> 
    73     <Compile Include="mobs\units.png"> 
    74       <Name>units</Name> 
     73    <Compile Include="mobs\woodcutter.png"> 
     74      <Name>woodcutter</Name> 
    7575      <Importer>TextureImporter</Importer> 
    7676      <Processor>TextureProcessor</Processor> 
Note: See TracChangeset for help on using the changeset viewer.