C#: Delegate syntax?

Posted by Rosarch on Stack Overflow See other posts from Stack Overflow or by Rosarch
Published on 2010-04-08T00:20:51Z Indexed on 2010/04/08 0:23 UTC
Read the original article Hit count: 954

Filed under:
|
|

I'm developing a game. I want to have game entities each have their own Damage() function. When called, they will calculate how much damage they want to do:

public class CombatantGameModel : GameObjectModel
{
    public int Health { get; set; }

    /// <summary>
    /// If the attack hits, how much damage does it do?
    /// </summary>
    /// <param name="randomSample">A random value from [0 .. 1]. Use to introduce randomness in the attack's damage.</param>
    /// <returns>The amount of damage the attack does</returns>
    public delegate int Damage(float randomSample);

    public CombatantGameModel(GameObjectController controller) : base(controller) {}
}

public class CombatantGameObject : GameObjectController
{
    private new readonly CombatantGameModel model;
    public new virtual CombatantGameModel Model
    {
        get { return model; }
    }

    public CombatantGameObject()
    {
        model = new CombatantGameModel(this);
    }
}

However, when I try to call that method, I get a compiler error:

    /// <summary>
    /// Calculates the results of an attack, and directly updates the GameObjects involved.
    /// </summary>
    /// <param name="attacker">The aggressor GameObject</param>
    /// <param name="victim">The GameObject under assault</param>
    public void ComputeAttackUpdate(CombatantGameObject attacker, CombatantGameObject victim)
    {
        if (worldQuery.IsColliding(attacker, victim, false))
        {
            victim.Model.Health -= attacker.Model.Damage((float) rand.NextDouble()); // error here
            Debug.WriteLine(String.Format("{0} hits {1} for {2} damage", attacker, victim, attackTraits.Damage));
        }
    }

The error is:

'Damage': cannot reference a type through an expression; try 'HWAlphaRelease.GameObject.CombatantGameModel.Damage' instead

What am I doing wrong?

© Stack Overflow or respective owner

Related posts about c#

Related posts about syntax