Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-svn-id: https://svn.bigbluecup.com:7743/svn/ags/trunk@7 198b9858-5f2a-7c4e-a477-5b45ff739df7
- Loading branch information
CJ
authored and
CJ
committed
Jan 4, 2011
1 parent
88ac0f0
commit de3ac29
Showing
496 changed files
with
61,959 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
using AGS.Types; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Drawing; | ||
using System.Text; | ||
|
||
namespace AGS.Editor | ||
{ | ||
/// <summary> | ||
/// Used by plugins to access AGS Editor features | ||
/// </summary> | ||
public class AGSEditorController : IAGSEditor | ||
{ | ||
private AGSEditor _agsEditor; | ||
private GUIController _guiController; | ||
private ComponentController _componentController; | ||
private IRoomController _roomController = null; | ||
|
||
public AGSEditorController(ComponentController componentController, AGSEditor agsEditor, GUIController guiController) | ||
{ | ||
_componentController = componentController; | ||
_agsEditor = agsEditor; | ||
_guiController = guiController; | ||
} | ||
|
||
void IAGSEditor.AddComponent(IEditorComponent component) | ||
{ | ||
_componentController.AddComponent(component); | ||
} | ||
|
||
IGUIController IAGSEditor.GUIController | ||
{ | ||
get { return _guiController; } | ||
} | ||
|
||
IGame IAGSEditor.CurrentGame | ||
{ | ||
get { return _agsEditor.CurrentGame; } | ||
} | ||
|
||
string IAGSEditor.Version | ||
{ | ||
get { return AGS.Types.Version.AGS_EDITOR_VERSION; } | ||
} | ||
|
||
event GetScriptHeaderListHandler IAGSEditor.GetScriptHeaderList | ||
{ | ||
add { _agsEditor.GetScriptHeaderList += value; } | ||
remove { _agsEditor.GetScriptHeaderList -= value; } | ||
} | ||
|
||
void IAGSEditor.RebuildAutocompleteCache(Script script) | ||
{ | ||
AutoComplete.ConstructCache(script); | ||
} | ||
|
||
IList<Script> IAGSEditor.GetAllScriptHeaders() | ||
{ | ||
return _agsEditor.GetAllScriptHeaders(); | ||
} | ||
|
||
Bitmap IAGSEditor.GetSpriteImage(int spriteNumber) | ||
{ | ||
return Factory.NativeProxy.GetBitmapForSprite(spriteNumber); | ||
} | ||
|
||
void IAGSEditor.ChangeSpriteImage(int spriteNumber, Bitmap newImage, SpriteImportTransparency transparencyType, bool useAlphaChannel) | ||
{ | ||
Sprite sprite = _agsEditor.CurrentGame.RootSpriteFolder.FindSpriteByID(spriteNumber, true); | ||
if (sprite == null) | ||
{ | ||
throw new AGSEditorException("Unable to find sprite " + spriteNumber + " in any sprite folders"); | ||
} | ||
|
||
Factory.NativeProxy.ReplaceSpriteWithBitmap(sprite, newImage, (SpriteImportMethod)((int)transparencyType), true, false, useAlphaChannel); | ||
if (sprite.ColorDepth < 32) | ||
{ | ||
sprite.AlphaChannel = false; | ||
} | ||
sprite.SourceFile = string.Empty; | ||
_agsEditor.CurrentGame.RootSpriteFolder.NotifyClientsOfUpdate(); | ||
} | ||
|
||
Sprite IAGSEditor.CreateNewSprite(ISpriteFolder inFolder, Bitmap newImage, SpriteImportTransparency transparencyType, bool useAlphaChannel) | ||
{ | ||
Sprite newSprite = Factory.NativeProxy.CreateSpriteFromBitmap(newImage, (SpriteImportMethod)((int)transparencyType), true, false, useAlphaChannel); | ||
if (newSprite.ColorDepth < 32) | ||
{ | ||
newSprite.AlphaChannel = false; | ||
} | ||
newSprite.SourceFile = string.Empty; | ||
inFolder.Sprites.Add(newSprite); | ||
_agsEditor.CurrentGame.RootSpriteFolder.NotifyClientsOfUpdate(); | ||
return newSprite; | ||
} | ||
|
||
string IAGSEditor.GetSpriteUsageReport(int spriteNumber) | ||
{ | ||
return new SpriteUsageChecker().GetSpriteUsageReport(spriteNumber, _agsEditor.CurrentGame); | ||
} | ||
|
||
void IAGSEditor.DeleteSprite(int spriteNumber) | ||
{ | ||
Sprite sprite = _agsEditor.CurrentGame.RootSpriteFolder.FindSpriteByID(spriteNumber, true); | ||
if (sprite == null) | ||
{ | ||
throw new AGSEditorException("The sprite " + spriteNumber + " could not be found"); | ||
} | ||
_agsEditor.DeleteSprite(sprite); | ||
_agsEditor.CurrentGame.RootSpriteFolder.NotifyClientsOfUpdate(); | ||
} | ||
|
||
ISourceControlIntegration IAGSEditor.SourceControl | ||
{ | ||
get { return _agsEditor; } | ||
} | ||
|
||
IRoomController IAGSEditor.RoomController | ||
{ | ||
get | ||
{ | ||
if (_roomController == null) | ||
{ | ||
_roomController = (IRoomController)_componentController.FindComponentThatImplementsInterface(typeof(IRoomController)); | ||
} | ||
return _roomController; | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Drawing; | ||
using System.Text; | ||
using System.Windows.Forms; | ||
using System.Xml; | ||
using AGS.Editor.Components; | ||
|
||
namespace AGS.Editor | ||
{ | ||
internal class ApplicationController | ||
{ | ||
private AGSEditor _agsEditor; | ||
private GUIController _guiController; | ||
private ComponentController _componentController; | ||
private NativeProxy _nativeProxy; | ||
private EditorEvents _events; | ||
private AGSEditorController _pluginEditorController; | ||
|
||
public ApplicationController() | ||
{ | ||
_events = Factory.Events; | ||
_agsEditor = Factory.AGSEditor; | ||
_guiController = Factory.GUIController; | ||
_componentController = Factory.ComponentController; | ||
_nativeProxy = Factory.NativeProxy; | ||
_pluginEditorController = new AGSEditorController(_componentController, _agsEditor, _guiController); | ||
|
||
_events.GameLoad += new EditorEvents.GameLoadHandler(_events_GameLoad); | ||
_events.GameSettingsChanged += new EditorEvents.ParameterlessDelegate(_events_GameSettingsChanged); | ||
_events.ImportedOldGame += new EditorEvents.ParameterlessDelegate(_events_ImportedOldGame); | ||
_events.RefreshAllComponentsFromGame += new EditorEvents.ParameterlessDelegate(_events_RefreshAllComponentsFromGame); | ||
_events.SavingGame += new EditorEvents.SavingGameHandler(_events_SavingGame); | ||
_events.SavingUserData += new EditorEvents.SavingUserDataHandler(_events_SavingUserData); | ||
_events.LoadedUserData += new EditorEvents.LoadedUserDataHandler(_events_LoadedUserData); | ||
_agsEditor.PreSaveGame += new AGSEditor.PreSaveGameHandler(_agsEditor_PreSaveGame); | ||
|
||
_guiController.OnEditorShutdown += new GUIController.EditorShutdownHandler(GUIController_OnEditorShutdown); | ||
_guiController.Initialize(_agsEditor); | ||
_agsEditor.DoEditorInitialization(); | ||
CreateComponents(); | ||
} | ||
|
||
private void _events_LoadedUserData(XmlNode rootNode) | ||
{ | ||
_componentController.NotifyLoadedUserData(rootNode); | ||
} | ||
|
||
private void _events_SavingUserData(XmlTextWriter writer) | ||
{ | ||
_componentController.NotifySavingUserData(writer); | ||
} | ||
|
||
private void _events_SavingGame(XmlTextWriter writer) | ||
{ | ||
_componentController.NotifySavingGame(writer); | ||
} | ||
|
||
private void _events_RefreshAllComponentsFromGame() | ||
{ | ||
_componentController.NotifyDataRefreshNeeded(); | ||
} | ||
|
||
private void _events_ImportedOldGame() | ||
{ | ||
_componentController.NotifyImportedOldGame(); | ||
} | ||
|
||
private void _events_GameSettingsChanged() | ||
{ | ||
_nativeProxy.GameSettingsChanged(_agsEditor.CurrentGame); | ||
_componentController.NotifyGameSettingsChanged(); | ||
} | ||
|
||
private void _events_GameLoad(XmlNode rootNode) | ||
{ | ||
List<string> missingComponents = _componentController.NotifyLoadedGameAndReturnMissingComponents(rootNode); | ||
foreach (string componentID in missingComponents) | ||
{ | ||
_guiController.ShowMessage("This game contains data from a plugin or component '" + componentID + "' which you do not have installed. If you save the game, this data will be lost.", AGS.Types.MessageBoxIconType.Warning); | ||
} | ||
} | ||
|
||
private void _agsEditor_PreSaveGame(PreSaveGameEventArgs evArgs) | ||
{ | ||
_componentController.NotifyAboutToSaveGame(); | ||
} | ||
|
||
private void CreateComponents() | ||
{ | ||
_componentController.AddComponent(new FileCommandsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new BuildCommandsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new HelpCommandsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new SettingsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new PaletteComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new SpriteManagerComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new TextParserComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new LipSyncComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new GuiComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new InventoryComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new DialogsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new ViewsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new CharactersComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new CursorsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new FontsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new AudioComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new GlobalVariablesComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new ScriptsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new PluginsComponent(_guiController, _agsEditor, _pluginEditorController)); | ||
_componentController.AddComponent(new RoomsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new TranslationsComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new SpeechComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new SourceControlComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new WelcomeComponent(_guiController, _agsEditor)); | ||
_componentController.AddComponent(new StatisticsSenderComponent(_guiController, _agsEditor)); | ||
} | ||
|
||
public void StartGUI(string[] commandLineArguments) | ||
{ | ||
_agsEditor.ApplicationStarted = true; | ||
_guiController.StartGUI(commandLineArguments); | ||
} | ||
|
||
private Bitmap CaptureScreenshot() | ||
{ | ||
try | ||
{ | ||
Form formToCapture = null; | ||
if (Application.OpenForms.Count > 0) | ||
{ | ||
formToCapture = Application.OpenForms[0]; | ||
} | ||
if (formToCapture != null) | ||
{ | ||
Bitmap screenShot = new Bitmap(formToCapture.Width, formToCapture.Height); | ||
Graphics g = Graphics.FromImage(screenShot); | ||
g.CopyFromScreen(formToCapture.DesktopLocation, new Point(0, 0), screenShot.Size); | ||
g.Dispose(); | ||
return screenShot; | ||
} | ||
} | ||
catch (Exception) | ||
{ | ||
// this error isn't important, we want to concentrate | ||
// on the main exception instead | ||
} | ||
return null; | ||
} | ||
|
||
public void UnhandledErrorHandler(Exception ex) | ||
{ | ||
try | ||
{ | ||
Bitmap screenShot = CaptureScreenshot(); | ||
ExceptionDialog dialog = new ExceptionDialog(ex, screenShot); | ||
dialog.ShowDialog(); | ||
dialog.Dispose(); | ||
screenShot.Dispose(); | ||
} | ||
catch | ||
{ | ||
_guiController.ShowMessage("An unexpected error occurred. Please post the following information on the AGS Technical Forum." + Environment.NewLine + Environment.NewLine + ex.ToString(), MessageBoxIcon.Stop); | ||
} | ||
_guiController.ShowMessage("A serious error occurred and the AGS Editor may now be in an unstable state. You are STRONGLY ADVISED to shut down the editor and restart it. Before saving your work, make a backup copy of your game folder in case any data has been corrupted.", MessageBoxIcon.Error); | ||
} | ||
|
||
private void GUIController_OnEditorShutdown() | ||
{ | ||
_componentController.ShutdownComponents(); | ||
_nativeProxy.Dispose(); | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Text; | ||
using AGS.Types; | ||
|
||
namespace AGS.Editor | ||
{ | ||
public delegate void PlayFinishedHandler(AudioClip clip); | ||
|
||
internal interface IAudioPreviewer | ||
{ | ||
event PlayFinishedHandler PlayFinished; | ||
|
||
bool RequiresPoll { get; } | ||
bool Play(AudioClip clip); | ||
bool IsPlaying(); | ||
void Poll(); | ||
int GetLengthMs(); | ||
int GetPositionMs(); | ||
void Pause(); | ||
void Resume(); | ||
void Stop(); | ||
} | ||
} |
Oops, something went wrong.