Ignore:
Timestamp:
2016-07-04 17:43:08 (3 years ago)
Author:
empaheik
Message:

Testattiin pelaajan liikkumista kämäisillä kontrolleilla. Jänniä uusi tasotyyppejä.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2016/27/ohjaajat/VenienteFragore/VenienteFragore/VenienteFragore/VenienteFragore.cs

    r7734 r7735  
    77using Jypeli.Widgets; 
    88 
     9class SimplePlatformCharacter : SimplePhysics.Object 
     10{ 
     11    public bool IsGrounded { get; private set; } 
     12 
     13    public Direction FacingDirection { get; private set; } 
     14 
     15    public SimplePlatformCharacter(double width, double height) : base(width, height) 
     16    { 
     17        FacingDirection = Direction.Right; 
     18    } 
     19 
     20    public void Walk(double speed) 
     21    { 
     22        if (speed > 0) FacingDirection = Direction.Right; 
     23        if (speed < 0) FacingDirection = Direction.Left; 
     24        Velocity = new Vector(speed, Velocity.Y); 
     25    } 
     26 
     27    public override void Update(Time time) 
     28    { 
     29        base.Update(time); 
     30        IsGrounded = Game.Collisions(this, new Vector(0, -2), true).Count > 0; 
     31    } 
     32} 
     33 
     34class Player : SimplePlatformCharacter 
     35{ 
     36    public bool IsCrouching { get; private set; } 
     37 
     38    public bool Crouch { get; set; } 
     39 
     40    public SimplePhysics.Object Carrying { get; set; } 
     41 
     42    private readonly double fullHeight; 
     43    private readonly double crouchHeight; 
     44 
     45    public Player(double width, double height) : base(width, height) 
     46    { 
     47        fullHeight = height; 
     48        crouchHeight = height / 2.0 - 1.0; 
     49    } 
     50 
     51    public override void Update(Time time) 
     52    { 
     53        if (!IsCrouching && Crouch) 
     54        { 
     55            var oldBottom = Bottom; 
     56            Height = crouchHeight; 
     57            Bottom = oldBottom; 
     58            IsCrouching = true; 
     59        } 
     60 
     61        if (IsCrouching && !Crouch) 
     62        { 
     63            var oldBottom = Bottom; 
     64            Height = fullHeight; 
     65            Bottom = oldBottom; 
     66            IsCrouching = false; 
     67 
     68            if (Game.Collisions(this, Vector.Zero, true).Count > 0) 
     69            { 
     70                Height = crouchHeight; 
     71                Bottom = oldBottom; 
     72                IsCrouching = true; 
     73            } 
     74        } 
     75 
     76        base.Update(time); 
     77    } 
     78} 
     79 
     80 
    981public class VenienteFragore : SimplePhysics.Game 
    1082{ 
     
    1284    private Dictionary<string, ObjectMethod> objectMethods; 
    1385 
     86    Player advenA; 
     87 
    1488    public VenienteFragore() : base(tileSize: 50) 
    1589    { 
     
    2195        objectMethods.Add("ball", TestBall); 
    2296        objectMethods.Add("player", CreatePlayer); 
    23         objectMethods.Add("moving", CreatePlayer); 
     97        objectMethods.Add("moving", CreateMovingPlatform); 
    2498 
    2599        var tileMap = TiledTileMap.FromLevelAsset("thehub"); 
    26         tileMap.SetTileMethod("Tile Layer 1", TileMethod); 
    27         tileMap.SetObjectMethod("Object Layer 1", CreateObject); 
     100        tileMap.SetTileMethod("Tiilet", TileMethod); 
     101        tileMap.SetObjectMethod("Oliot", CreateObject); 
    28102        tileMap.Execute(); 
    29103 
     
    31105 
    32106        Camera.ZoomToAllObjects(); 
    33  
    34         Level.Background.Color = Color.AshGray; 
     107         
     108 
     109        Level.Background.Color = Color.DarkOrange; 
    35110 
    36111        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
     
    56131    void CreatePlayer(Vector position, double width, double height, Dictionary<string, string> properties) 
    57132    { 
    58          
     133        advenA = new Player(TileSize * 0.99, TileSize * 1.98); 
     134        advenA.Position = position + new Vector(0, advenA.Height); 
     135        advenA.Friction = 0.2; 
     136        advenA.Tag = "player"; 
     137        advenA.Crushed += advenA.Destroy; 
     138        advenA.CollisionIgnoreGroup = 1; 
     139        Add(advenA); 
     140 
     141        Keyboard.ListenWSAD(ButtonState.Down, Liikuta, "hurdur"); 
     142 
     143    } 
     144 
     145    void Liikuta(Vector suunta) 
     146    { 
     147        if(suunta.Y > 0) 
     148        { 
     149            Jump(advenA); 
     150        } 
     151        advenA.Walk(suunta.X * 200); 
     152    } 
     153 
     154    private void Jump(SimplePlatformCharacter player) 
     155    { 
     156        if (player.IsGrounded) 
     157            player.Velocity = new Vector(player.Velocity.X, 500); 
    59158    } 
    60159 
     
    110209                }); 
    111210                break; 
     211            case "foreground": 
     212                tile.IgnoresCollisionResponse = true; 
     213                break; 
    112214            default: 
    113215                throw new Exception("Unknown tile feature: " + feature); 
Note: See TracChangeset for help on using the changeset viewer.