// 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); }
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)); }
// 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); }