Changeset 3538 for 2012


Ignore:
Timestamp:
2012-07-04 13:57:59 (7 years ago)
Author:
dezhidki
Message:

Updated camera motion

Location:
2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/LevelGenerator.cs

    r3517 r3538  
    88namespace Rooms 
    99{ 
    10     class LevelGenerator 
     10  public class LevelGenerator 
    1111    { 
    1212        private double width, height; 
     
    1616        private List<Room> roomList = new List<Room>(); 
    1717 
    18         public LevelGenerator(Game game, Vector size, Vector roomamount) 
     18        public LevelGenerator(TheDungeonGame game, Vector size, Vector roomamount) 
    1919        { 
    2020            this.game = game; 
     
    2525 
    2626            rooms = new Room[roomAmountHor, roomAmountVert]; 
     27        } 
     28 
     29        public Vector getGridPos(Vector pos) 
     30        { 
     31            double gridPosX = pos.X - width / 2; 
     32            double gridPosY = pos.Y + height / 2; 
     33 
     34            int x = (int)(gridPosX / TheDungeonGame.ROOMWIDTH); 
     35            int y = (int)(gridPosY / TheDungeonGame.ROOMHEIGHT); 
     36 
     37            return new Vector(x, y); 
    2738        } 
    2839 
     
    100111        { 
    101112            if (getRoomFromDirection(lastRoom, dir) != null) return false; 
    102             currentRoom = new TestRoom(game, VecMath.mul(pos, new Vector(TheDungeonGame.ROOMWIDTH+TheDungeonGame.ROOMTHICKNESS, -TheDungeonGame.ROOMHEIGHT -TheDungeonGame.ROOMTHICKNESS)), TheDungeonGame.roomSize, TheDungeonGame.ROOMTHICKNESS); 
     113            currentRoom = new TestRoom(game, VecMath.mul(pos, new Vector(TheDungeonGame.ROOMWIDTH + TheDungeonGame.ROOMTHICKNESS, -TheDungeonGame.ROOMHEIGHT - TheDungeonGame.ROOMTHICKNESS)), TheDungeonGame.roomSize, TheDungeonGame.ROOMTHICKNESS); 
    103114            return placeRoomAt(currentRoom, (int)pos.X, (int)pos.Y); 
    104115        } 
     
    117128            if (!isValidPos(x, y)) return null; 
    118129            return rooms[x, y]; 
     130        } 
     131 
     132        public Room getRoomAt(Vector pos) 
     133        { 
     134            return getRoomAt((int)pos.X, (int)pos.Y); 
    119135        } 
    120136 
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/Player.cs

    r3525 r3538  
    66using Jypeli.Controls; 
    77using MathHelper; 
     8using Rooms; 
    89 
    910namespace Entity 
     
    1819        private Keyboard keyboard; 
    1920        public double speed = 200; 
     21        private TheDungeonGame game; 
     22        public Room currentRoom; 
    2023 
    21         public Player(Game game, Vector pos) 
     24        public Player(TheDungeonGame game, Vector pos) 
    2225            : base(playerWidth, playerHeight) 
    2326        { 
     27            this.game = game; 
    2428            keyboard = game.Keyboard; 
    2529            CanRotate = false; 
    26            // MakeStatic(); 
     30            currentRoom =  game.LevelGen.getRoomAt(game.LevelGen.CenterRoom); 
    2731            setupKeys(); 
    2832        } 
     
    3943            keyboard.Listen(Key.S, ButtonState.Released, removeMovement, null, new Vector(0, -speed)); 
    4044            keyboard.Listen(Key.D, ButtonState.Released, removeMovement, null, new Vector(speed, 0)); 
     45        } 
     46 
     47        public void performCollision(PhysicsObject player, PhysicsObject target) 
     48        { 
     49            Room room; 
     50            if (target.Tag.Equals(RoomDirection.North)) 
     51            { 
     52                room = game.LevelGen.getRoomAt(currentRoom.PosOnGrid + RoomDirection.getOffsetFromDir(RoomDirection.North)); 
     53                game.moveToRoom(room); 
     54                currentRoom = room; 
     55            }else 
     56                if(target.Tag.Equals(RoomDirection.East)) 
     57                { 
     58                    room = game.LevelGen.getRoomAt(currentRoom.PosOnGrid + RoomDirection.getOffsetFromDir(RoomDirection.East)); 
     59                    game.moveToRoom(room); 
     60                    currentRoom = room; 
     61                } 
     62                else 
     63                    if(target.Tag.Equals(RoomDirection.South)) 
     64                    { 
     65                        room = game.LevelGen.getRoomAt(currentRoom.PosOnGrid + RoomDirection.getOffsetFromDir(RoomDirection.South)); 
     66                        game.moveToRoom(room); 
     67                        currentRoom = room; 
     68                    } 
     69                    else  
     70                        if(target.Tag.Equals(RoomDirection.West)) 
     71                        { 
     72                            room = game.LevelGen.getRoomAt(currentRoom.PosOnGrid + RoomDirection.getOffsetFromDir(RoomDirection.West)); 
     73                            game.moveToRoom(room); 
     74                            currentRoom = room; 
     75                        } 
    4176        } 
    4277 
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/Room.cs

    r3525 r3538  
    88namespace Rooms 
    99{ 
    10     abstract class Room 
     10    public abstract class Room 
    1111    { 
    1212 
     
    1616        private bool isBuilt = false; 
    1717        protected IPhysicsObject[,] insideObjects; 
     18        protected IPhysicsObject[] doors = new IPhysicsObject[4]; 
    1819        protected double blockWidth, blockHeight; 
    1920        protected double insideWidth, insideHeight; 
     
    99100        public void addDoors(int[] directions) 
    100101        { 
    101             if(directions.Length > 4) throw new ArgumentException("Argument's length must be 4!"); 
     102            if (directions.Length > 4) throw new ArgumentException("Argument's length must be 4!"); 
    102103 
    103104            for (int i = 0; i < directions.Length; i++) 
    104105            { 
    105                 if(directions[i] == -1) continue; 
     106                if (directions[i] == -1) continue; 
     107 
     108                PhysicsObject door = null; 
    106109 
    107110                if (directions[i] == RoomDirection.North) 
    108111                { 
    109                     PhysicsObject doorTop = PhysicsObject.CreateStaticObject(thickness, thickness); 
    110                     doorTop.Position = Position + new Vector((width + thickness) / 2, -thickness / 2); 
    111                     doorTop.Tag = "Top Door"; 
    112                     roomObjects.Add(doorTop); 
    113                 }else 
     112                    door = PhysicsObject.CreateStaticObject(thickness, thickness); 
     113                    door.Position = Position + new Vector((width + thickness) / 2, -thickness / 2); 
     114                    door.Tag = RoomDirection.North; 
     115                } 
     116                else 
    114117                    if (directions[i] == RoomDirection.East) 
    115118                    { 
    116                         PhysicsObject doorRight = PhysicsObject.CreateStaticObject(thickness, thickness); 
    117                         doorRight.Position = Position + new Vector(width + thickness / 2, -(height + thickness) / 2); 
    118                         doorRight.Tag = "Right Door"; 
    119                         roomObjects.Add(doorRight); 
     119                        door = PhysicsObject.CreateStaticObject(thickness, thickness); 
     120                        door.Position = Position + new Vector(width + thickness / 2, -(height + thickness) / 2); 
     121                        door.Tag = RoomDirection.East; 
    120122                    } 
    121123                    else 
    122124                        if (directions[i] == RoomDirection.South) 
    123125                        { 
    124                             PhysicsObject doorBottom = PhysicsObject.CreateStaticObject(thickness, thickness); 
    125                             doorBottom.Position = Position + new Vector((thickness + width) / 2, -height - thickness / 2); 
    126                             doorBottom.Tag = "Bottom Door"; 
    127                             roomObjects.Add(doorBottom); 
     126                            door = PhysicsObject.CreateStaticObject(thickness, thickness); 
     127                            door.Position = Position + new Vector((thickness + width) / 2, -height - thickness / 2); 
     128                            door.Tag = RoomDirection.South; 
    128129                        } 
    129130                        else 
    130131                            if (directions[i] == RoomDirection.West) 
    131132                            { 
    132                                 PhysicsObject doorLeft = PhysicsObject.CreateStaticObject(thickness, thickness); 
    133                                 doorLeft.Position = Position + new Vector(thickness / 2, -height / 2 - thickness / 2); 
    134                                 doorLeft.Tag = "Left Door"; 
    135                                 roomObjects.Add(doorLeft); 
     133                                door = PhysicsObject.CreateStaticObject(thickness, thickness); 
     134                                door.Position = Position + new Vector(thickness / 2, -height / 2 - thickness / 2); 
     135                                door.Tag = RoomDirection.West; 
    136136                            } 
    137             }     
     137                if (door != null) 
     138                { 
     139                    roomObjects.Add(door); 
     140                    doors[i] = door; 
     141                } 
     142                    
     143            } 
    138144        } 
    139145 
     
    176182    } 
    177183 
    178     class RoomDirection 
     184    public class RoomDirection 
    179185    { 
    180186        public const int North = 0; 
     
    196202            return Vector.Zero; 
    197203        } 
     204 
     205        public static Vector getOffsetFromWorldDir(int dir) 
     206        { 
     207            if (dir == North) 
     208                return new Vector(0, 1); 
     209            if (dir == East) 
     210                return new Vector(1, 0); 
     211            if (dir == South) 
     212                return new Vector(0, -1); 
     213            if (dir == West) 
     214                return new Vector(-1, 0); 
     215 
     216            return Vector.Zero; 
     217        } 
    198218    } 
    199219} 
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/TheDungeonGame.cs

    r3525 r3538  
    1515    public const double ROOMWIDTH = 800 - ROOMTHICKNESS; 
    1616    public const double ROOMHEIGHT = 450; 
    17      
     17 
    1818    public static Vector roomSize = new Vector(ROOMWIDTH, ROOMHEIGHT); 
    1919    private Player player; 
    2020    private LevelGenerator generator; 
     21    public LevelGenerator LevelGen { get { return generator; } } 
     22 
     23    private Vector cameraPosMission; 
     24    private Vector cameraVelocity, newPos; 
     25    private bool moveCamera = false; 
    2126 
    2227    public override void Begin() 
     
    3136        generator.buildDungeon(); 
    3237        Room centerRoom = generator.getRoomAt((int)(generator.CenterRoom.X), (int)(generator.CenterRoom.Y)); 
    33         Camera.Position = centerRoom.Position + new Vector(ROOMWIDTH/2 + ROOMTHICKNESS/2, -ROOMHEIGHT/2 + ROOMTHICKNESS/4); 
     38        Camera.Position = centerRoom.Position + new Vector(ROOMWIDTH / 2 + ROOMTHICKNESS / 2, -ROOMHEIGHT / 2 + ROOMTHICKNESS / 4); 
     39      //  Camera.Zoom(0.5); 
    3440 
    3541        player = new Player(this, Vector.Zero); 
    3642        setupPlayer(); 
     43        AddCollisionHandler(player, player.performCollision); 
    3744 
    3845        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta peli"); 
    3946        Keyboard.Listen(Key.R, ButtonState.Pressed, regenerateLevel, null); 
     47    } 
     48 
     49    public void moveToRoom(Room room) 
     50    { 
     51        //  Camera.Position = room.Position + new Vector(ROOMWIDTH / 2 + ROOMTHICKNESS / 2, -ROOMHEIGHT / 2 + ROOMTHICKNESS / 4); 
     52        // Camera.Velocity = new Vector(0, 1); 
     53        Vector currentpos = player.currentRoom.Position + new Vector(ROOMWIDTH / 2 + ROOMTHICKNESS / 2, -ROOMHEIGHT / 2 + ROOMTHICKNESS / 4); 
     54        Vector newpos = room.Position + new Vector(ROOMWIDTH / 2 + ROOMTHICKNESS / 2, -ROOMHEIGHT / 2 + ROOMTHICKNESS / 4); 
     55 
     56        moveCameraTo(newpos - currentpos); 
     57        player.Position = generator.getRoomAt(room.PosOnGrid).Position + new Vector(ROOMWIDTH / 2, -ROOMHEIGHT / 2); 
     58    } 
     59 
     60    public void moveCameraTo(Vector pos) 
     61    { 
     62        cameraPosMission = pos; 
     63        newPos = Camera.Position + pos; 
     64        cameraVelocity = pos; 
     65        moveCamera = true; 
     66    } 
     67 
     68    private void moveCameraPart() 
     69    { 
     70        Camera.Velocity = cameraVelocity; 
     71        Vector remainingLenght = Camera.Position - newPos; 
     72        if ((int)remainingLenght.X == 0 && (int)remainingLenght.Y == 0) 
     73        { 
     74            Camera.Position = newPos; 
     75            moveCamera = false; 
     76        } 
     77         
    4078    } 
    4179 
     
    71109            return; // Skipataan "virheelisiä" tickea ja huijataan peliä niin kuin pahat merimiehet (dirty pirates, Arr) 
    72110        } 
     111        if (moveCamera) 
     112        { 
     113            moveCameraPart(); 
     114        } 
     115        else 
     116        { 
     117            cameraPosMission = Vector.Zero; 
     118            cameraVelocity = Vector.Zero; 
     119            newPos = Vector.Zero; 
     120            Camera.Velocity = cameraVelocity; 
     121        } 
    73122 
    74123        player.Update(time); 
Note: See TracChangeset for help on using the changeset viewer.