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