protected override void ReplaceScript(ScriptComponent scriptComponent, ReloadedScriptEntry reloadedScript)
        {
            // Create new script instance
            var newScript = DeserializeScript(reloadedScript);

            // Dispose and unregister old script (and their MicroThread, if any)
            var oldScript = scriptComponent.Scripts[reloadedScript.ScriptIndex];

            // Flag scripts as being live reloaded
            if (game != null)
            {
                game.Script.LiveReload(oldScript, newScript);
            }

            // Replace with new script
            // TODO: Remove script before serializing it, so cancellation code can run
            scriptComponent.Scripts[reloadedScript.ScriptIndex] = newScript;

            oldScript.Dispose();

            if (oldScript.MicroThread != null && !oldScript.MicroThread.IsOver)
            {
                // Force the script to be cancelled
                oldScript.MicroThread.RaiseException(new MicroThreadCancelledException());
            }
        }
Example #2
0
 protected virtual void ReplaceScript(ScriptComponent scriptComponent, ReloadedScriptEntry reloadedScript)
 {
     // TODO: Let PropertyGrid know that we updated the script
     scriptComponent.Scripts[reloadedScript.ScriptIndex] = DeserializeScript(reloadedScript);
 }
 void MakeUnit()
 {
     units++;
     SpriteController spriteController;
     string name;
     switch (producedUnit)
     {
         case 0:
             pickaxes++;
             name = side + "Pickaxe";
             spriteController = new PickaxeController
             {
                 mode = 4,
                 side = unitSide,
                 maxDistance = unitDistance,
                 castle = Entity
             };
             break;
         case 1:
             swords++;
             name = side + "Sword";
             spriteController = new SwordController
             {
                 mode = 4,
                 side = unitSide,
                 maxDistance = unitDistance,
                 castle = (from entities in SceneSystem.SceneInstance where entities.Name == enemy select entities).FirstOrDefault()
             };
             break;
         case 2:
             bowArrows++;
             name = side + "BowArrow";
             spriteController = new BowArrowController
             {
                 mode = 4,
                 side = unitSide,
                 maxDistance = unitDistance
             };
             break;
         case 3:
             wands++;
             name = side + "Wand";
             spriteController = new WandController
             {
                 mode = 4,
                 side = unitSide,
                 maxDistance = unitDistance
             };
             break;
         default:
             name = side + "Unit";
             spriteController = new SpriteController
             {
                 mode = 0,
                 side = unitSide,
                 maxDistance = unitDistance
             };
             break;
     }
     //make entity with specific name and add proper sprite sheet and script to it
     Entity entity;
     if (Entity.Name.Contains("Enemy"))
     {
         entity = new Entity(new Vector3(37, unitPosition, 0), name);
     }
     else
     {
         entity = new Entity(new Vector3(3, unitPosition, 0), name);
     }
     SpriteComponent spriteComponent = new SpriteComponent();
     SpriteSheet spriteSheet = Asset.Get<SpriteSheet>(name.Replace("Enemy", ""));
     spriteComponent.SpriteProvider = new SpriteFromSheet
     {
         Sheet = spriteSheet
     };
     spriteComponent.CurrentFrame = 4 + unitSide;
     ScriptComponent scriptComponent = new ScriptComponent();
     scriptComponent.Scripts.Add(spriteController);
     entity.Add<SpriteComponent>(SpriteComponent.Key, spriteComponent);
     entity.Add<ScriptComponent>(ScriptComponent.Key, scriptComponent);
     SceneSystem.SceneInstance.Scene.AddChild(entity);
 }