I'm trying implement simple plugin system to my app, but i have problem with communication with my plugin.
I made interface to my plugin:
public interface IAlgorithm
{
    /// <summary>
    /// New request in current simulation tick - all logic should be run after request
    /// </summary>
    /// <param name="pTime">Simulation time in [ms] from simulation start</param>
    /// <param name="pObject">Manipulating object</param>
    /// <param name="pWorld">Current world</param>
    void Request(int pTime, PhysicalObject pObject, World pWorld);
}
and next I create my plugin to hook keyboard:
 public class Main : IAlgorithm
{
    private int m_Direction;
    private readonly GlobalKeyboardHook m_Hook = new GlobalKeyboardHook();
    public Main()
    {
        m_Hook.HookedKeys.Add(Keys.Up);
        m_Hook.HookedKeys.Add(Keys.Down);
        m_Hook.HookedKeys.Add(Keys.Right);
        m_Hook.HookedKeys.Add(Keys.Left);
        m_Hook.KeyDown += KeyClicked;
    }
    private void KeyClicked(object sender, KeyEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Down:
                m_Direction = 180;
                break;
            case Keys.Up:
                m_Direction = 0;
                break;
            case Keys.Left:
                m_Direction = 90;
                break;
            case Keys.Right:
                m_Direction = 270;
                break;
        }
    }
    public void Request(int pTime, PhysicalObject pObject, World pWorld)
    {
        pObject.Movement.Power = 100;
        pObject.Movement.Direction = m_Direction;
    }
}
Next in my main program I try to use my plugin like this:
var myAssembly = Assembly.LoadFile(myPath).GetTypes().First(x => x.Name == "Main");
IAlgorithm myAlgorithm = ((IAlgorithm)Activator.CreateInstance(myAssembly ));
and it's working, but if I want make some request to plugin
myAlgorithm.Request(pSimulationTime, myPhysicalObject, pWorld);
after that I don't have any changes in myPhysicalObject
but if I use MessageBox:
myAlgorithm.Request(pSimulationTime, myPhysicalObject, pWorld); 
MessageBox.Show(myPhysicalObject.Movement.Direction)
I can see correct value in MB.
I don't know what is incorrect in my logic and I don't understand why it's working after some pause. Have you some ideas??
 
Aucun commentaire:
Enregistrer un commentaire