示例#1
0
文件: Player.cs 项目: Tankooni/OwlMan
    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
        _camera = GetNode <Camera2D>("../MainCamera");
        _camera.Call("SetFollow", this.GetPath());

        foreach (var node in Atmo.OgmoLoader.OgmoLoader.nodes)
        {
            node.Set("target", GetPath());
            Enemy.PlayerPath = GetPath();

            //node.Set("node", node.GetPath());
        }

        _hud              = GetNode <Control>("../CanvasLayer/HUD");
        Image             = GetNode <AnimatedSprite>("AnimatedSprite");
        _collisionShape2D = GetNode <CollisionShape2D>("CollisionShape2D");
        _overlord         = GetNode("/root/Overlord");

        BoxL = GetNode <Area2D>("SideBoxL");
        BoxR = GetNode <Area2D>("SideBoxR");
        BoxB = GetNode <Area2D>("BottomBox");

        this.Connect("HealthChanged", _hud, "on_set_health");
        this.Connect("AnimationChanged", _hud, "on_animation_changed");

        SetDeferred("Health", maxHealth);
        //Health = maxHealth;
        Power = 0;

        // Spice = 100;
        // Energy = 0f;
        MaxEnergy          = 3;
        EnergyRechargeRate = 2f;

        //JumpStrenth = 660;
        RunSpeed       = 200;
        DashMultiplier = 3.5f;
        HorizontalDrag = 50;
        Gravity        = Overlord.STANDARD_GRAVITY;

        // image.RenderStep = 1;

        // GameWorld.player = this;
        // Type = KQ.CollisionTypePlayer;

        Abilities = new Abilities(this);
        Abilities.GiveAllAbilities();
        MovementInfo = new MovementInfo(this);

        InputController       = new Controller();
        PlayerStateController = new PlayerStateController(new PSIdle(this));

        Image.Connect("animation_finished", this, "AnimationComplete");

        // AddResponse(PickupType.AirDash, OnAirDashPickup);
        // AddResponse(PickupType.AirJump, OnAirJumpPickup);
        // AddResponse(PickupType.Jump, OnJumpPickup);
        // AddResponse(PickupType.Dash, OnDashPickup);
    }
示例#2
0
    public void UpdateCamera()
    {
        //var centerX = Position.x;
        //var centerY = Position.y;

        //TODO: clamping camera to edges of the current room
        // var currentRoom = ((GameWorld)(World)).CurrentRoom;
        // centerX = Mathf.Clamp(centerX, Engine.HalfWidth, currentRoom.RealRoomMeta.width - Engine.HalfWidth);
        // centerY = Mathf.Clamp(centerY, Engine.HalfHeight, currentRoom.RealRoomMeta.height - Engine.HalfHeight);

        if (MovementInfo.StartShake)
        {
            camera.Call("Shake", 10f, .1f, 10);
            MovementInfo.StartShake = false;
        }

        var centerX = Position.x;
        var centerY = Position.y;

        centerX = Mathf.Clamp(centerX, Overlord.ViewportSize.x / 2f, Overlord.LevelBoundsX.y - Overlord.ViewportSize.x / 2f);
        centerY = Mathf.Clamp(centerY, Overlord.ViewportSize.y / 2f, Overlord.LevelBoundsY.y - Overlord.ViewportSize.y / 2f);

        camera.SetPosition(new Vector2(centerX, centerY));
    }
示例#3
0
文件: Player.cs 项目: Tankooni/OwlMan
    // public override bool IsRiding(Solid solid)
    // {
    //  return Bottom == solid.Top;
    // }

    // public void NodeHandler(System.Xml.XmlNode entity)
    // {
    // }

    public override void _PhysicsProcess(float delta)
    {
        base._PhysicsProcess(delta);

        InputController.Update();
        // if(Keyboard.Space.Pressed)
        // {
        //  Console.WriteLine(player_controller.current_state.ToString());
        // }

        PlayerStateController.Update();
        MovementInfo.Update();

        if (InputController.Select())
        {
            _overlord.Call("Reset");
        }

        if (MovementInfo.LeftBox)
        {
            foreach (PhysicsBody2D body in BoxL.GetOverlappingBodies().OfType <PhysicsBody2D>().Where(x => x.IsInGroup(HitGroups.Enemy)))
            {
                body.ShapeOwnerSetDisabled(body.ShapeFindOwner(0), true);
                body.QueueFree();
                _camera.Call("Shake", .1f, 100, 10);
                Overlord.OwlOverlord.PlaySound("Hit4", Position);

                // if (body.HasMethod("OnDamage"))
                //  body.Call("OnDamage");
                // else if (body.HasMethod("on_damage"))
                //  body.Call("on_damage");
            }
            foreach (var area in BoxL.GetOverlappingAreas().OfType <Area2D>().Where(x => x.IsInGroup(HitGroups.Bullet)))
            {
                _camera.Call("Shake", .1f, 100, 10);
                area.Call("Deflect");
            }
        }
        if (MovementInfo.RightBox)
        {
            foreach (PhysicsBody2D body in BoxR.GetOverlappingBodies().OfType <PhysicsBody2D>().Where(x => x.IsInGroup(HitGroups.Enemy)))
            {
                body.ShapeOwnerSetDisabled(body.ShapeFindOwner(0), true);
                body.QueueFree();
                _camera.Call("Shake", .1f, 100, 10);
                Overlord.OwlOverlord.PlaySound("Hit4", Position);
            }
            foreach (var area in BoxR.GetOverlappingAreas().OfType <Area2D>().Where(x => x.IsInGroup(HitGroups.Bullet)))
            {
                _camera.Call("Shake", .1f, 100, 10);
                area.Call("Deflect");
            }
        }
        if (MovementInfo.BottomBox)
        {
            foreach (PhysicsBody2D body in BoxB.GetOverlappingBodies().OfType <PhysicsBody2D>().Where(x => x.IsInGroup(HitGroups.Enemy)))
            {
                body.ShapeOwnerSetDisabled(body.ShapeFindOwner(0), true);
                body.QueueFree();
                _camera.Call("Shake", .1f, 100, 10);
                Overlord.OwlOverlord.PlaySound("Hit4", Position);
            }
            foreach (var area in BoxB.GetOverlappingAreas().OfType <Area2D>().Where(x => x.IsInGroup(HitGroups.Bullet)))
            {
                _camera.Call("Shake", .1f, 100, 10);
                area.Call("Deflect");
            }
        }

        invulnerabilityFrames = Math.Max(--invulnerabilityFrames, 0);
    }