Beispiel #1
0
    private void _onCollisionEntered(Node2D body)
    {
        // Projectile will collide
        if (body.HasMethod("_onProjectileAreaEntered"))
        {
            ProjectileArea2D projectile = (ProjectileArea2D)body;
            // Only bullets from different team will cloide
            if (projectile.GetTeam() != _team.CurrentTeamCode)
            {
                projectile.Explode();
            }
        }

        if (body.HasMethod("TakeEnvironmentDamage"))
        {
            Obstacle obstacle = (Obstacle)body;
            obstacle.TakeEnvironmentDamage(Damage);
        }

        if (body.HasMethod("TakeDamage"))
        {
            Agent agent = (Agent)body;
            // Only bullets from different team will cloide
            if (agent.GetCurrentTeam() != _team.CurrentTeamCode)
            {
                agent.TakeDamage(Damage, (agent.GlobalPosition - Agent.GlobalPosition).Normalized(), Agent, _team);
            }
        }
    }
Beispiel #2
0
    public override void _PhysicsProcess(float delta)
    {
        if (Enabled && IsColliding())
        {
            // Projectile will collide
            if (GetCollider().HasMethod("_onProjectileAreaEntered"))
            {
                ProjectileArea2D collider = (ProjectileArea2D)(GetCollider());

                // Only bullets from different team will cloide
                if (collider.GetTeam() != _sourceTeam.CurrentTeamCode)
                {
                    collider.Explode();
                }
            }
            // shield will collide
            else if (GetCollider().HasMethod("_onShieldAreaEntered"))
            {
                ShieldPhysics shieldPhysics = (ShieldPhysics)GetCollider();
                shieldPhysics.TakeShieldDamage(_damage);
            }
            else
            {
                EmitSignal(nameof(RayDamageSignal), _damage, GetCollisionNormal() * -1, _source, _sourceTeam, GetCollider());
            }
        }
    }
Beispiel #3
0
    private void _onProjectileAreaEntered(Area2D body)
    {
        // Projectile will collide
        if (body.HasMethod("_onProjectileAreaEntered"))
        {
            ProjectileArea2D collider = (ProjectileArea2D)(body);

            // Only bullets from different team will cloide
            if (collider.GetTeam() != projectile.GetTeam())
            {
                collider.Explode();
            }
        }
    }
Beispiel #4
0
    public override void _PhysicsProcess(float delta)
    {
        Vector2 castPoint = CastTo;

        ForceRaycastUpdate();

        particles2Dcollision.Emitting = IsColliding();

        if (IsColliding())
        {
            _audioManager.playSoundEffect(_musicHitClip);

            castPoint = ToLocal(GetCollisionPoint());
            particles2Dcollision.GlobalRotation = GetCollisionNormal().Angle();
            particles2Dcollision.Position       = castPoint;

            // Projectile will collide
            if (GetCollider().HasMethod("_onProjectileAreaEntered"))
            {
                ProjectileArea2D collider = (ProjectileArea2D)(GetCollider());

                // Only bullets from different team will cloide
                if (collider.GetTeam() != _sourceTeam.CurrentTeamCode)
                {
                    collider.Explode();
                }
            }
            // shield will collide
            else if (GetCollider().HasMethod("_onShieldAreaEntered"))
            {
                ShieldPhysics shieldPhysics = (ShieldPhysics)GetCollider();
                shieldPhysics.TakeShieldDamage(Damage);
            }
            else
            {
                EmitSignal(nameof(RayDamageSignal), Damage, GetCollisionNormal() * -1, _sourceAgent, _sourceTeam, GetCollider());
            }
        }

        // Workaround to update points, as the Line2D points are not updatable
        Vector2[] newPoints = { new Vector2(0, 0), new Vector2(castPoint) };
        line2DLaser.Points = newPoints;

        particles2DBeam.Position = castPoint * 0.5f;
        particles2DBeam.ProcessMaterial.Set("emission_box_extents", new Vector3(castPoint.x, 5.0f, 0.0f));
    }