public void CreateScript(MapScript OriginalToCopy) { MapScript NewScript = OriginalToCopy.CopyScript(); InitScript(NewScript); ListMapScript.Add(NewScript); }
public static List <MapScript> LoadMapScripts(BinaryReader BR, Dictionary <string, MapEvent> DicMapEvent, Dictionary <string, MapCondition> DicMapCondition, Dictionary <string, MapTrigger> DicMapTrigger, out List <MapEvent> ListMapEvent) { ListMapEvent = new List <MapEvent>(); MapScript NewScript = null; int PosX, PosY; MapScriptTypes NewScriptType; int ListMapScriptCount = BR.ReadInt32(); List <MapScript> ListMapScript = new List <MapScript>(ListMapScriptCount); for (int S = 0; S < ListMapScriptCount; S++) { PosX = BR.ReadInt32(); PosY = BR.ReadInt32(); NewScriptType = (MapScriptTypes)BR.ReadByte(); switch (NewScriptType) { #region Event case MapScriptTypes.Event: NewScript = DicMapEvent[BR.ReadString()].CopyScript(); ListMapEvent.Add((MapEvent)NewScript); break; #endregion case MapScriptTypes.Condition: NewScript = DicMapCondition[BR.ReadString()].CopyScript(); break; case MapScriptTypes.Trigger: NewScript = DicMapTrigger[BR.ReadString()].CopyScript(); break; } NewScript.Load(BR); int ArrayEventCount; //Load the Events for (int E = 0; E < (NewScript).ArrayEvents.Count(); E++) { ArrayEventCount = BR.ReadInt32();//Number of Scripts linked to the Event. for (int i = 0; i < ArrayEventCount; i++) { (NewScript).ArrayEvents[E].Add(new EventInfo(BR.ReadInt32(), BR.ReadInt32())); } } ListMapScript.Add(NewScript); NewScript.ScriptSize.X = PosX; NewScript.ScriptSize.Y = PosY; } return(ListMapScript); }
public void Select(System.Drawing.Point e) { System.Drawing.Rectangle MouseRec = new System.Drawing.Rectangle(e.X + ScriptStartingPos.X, e.Y + ScriptStartingPos.Y, 1, 1); MousePosOld = e; for (int S = ListMapScript.Count - 1; S >= 0; --S) { if (MouseRec.IntersectsWith(ListMapScript[S].ScriptSize)) { OnSelect(ListMapScript[S], false); ActiveScriptIndex = S; return; } else { //Triggers. for (int T = ListMapScript[S].ArrayNameTrigger.Length - 1; T >= 0; --T) { if (MouseRec.X >= ListMapScript[S].ScriptSize.X - 10 && MouseRec.X <= ListMapScript[S].ScriptSize.X - 5 && MouseRec.Y >= ListMapScript[S].ScriptSize.Y + 19 + T * 12 && MouseRec.Y <= ListMapScript[S].ScriptSize.Y + 24 + T * 12) { ScriptLink = ListMapScript[S]; ScriptLinkIndex = S; ScriptLinkType = ScriptLinkTypes.Trigger; ScriptLinkEventIndex = T; ScriptLinkStartPos = new Point(ListMapScript[S].ScriptSize.X - 7, ListMapScript[S].ScriptSize.Y + 21 + T * 12); return; } } //Events. for (int E = ListMapScript[S].ArrayNameCondition.Length - 1; E >= 0; --E) { if (MouseRec.X >= ListMapScript[S].ScriptSize.X + ListMapScript[S].ScriptSize.Width + 5 && MouseRec.X <= ListMapScript[S].ScriptSize.X + ListMapScript[S].ScriptSize.Width + 10 && MouseRec.Y >= ListMapScript[S].ScriptSize.Y + ListMapScript[S].ScriptSize.Height - ListMapScript[S].ArrayNameCondition.Length * 12 + 1 + E * 12 && MouseRec.Y <= ListMapScript[S].ScriptSize.Y + ListMapScript[S].ScriptSize.Height - ListMapScript[S].ArrayNameCondition.Length * 12 + 6 + E * 12) { ScriptLink = ListMapScript[S]; ScriptLinkIndex = S; ScriptLinkType = ScriptLinkTypes.Event; ScriptLinkEventIndex = E; ScriptLinkStartPos = new Point(ListMapScript[S].ScriptSize.X + ListMapScript[S].ScriptSize.Width + 7, ListMapScript[S].ScriptSize.Y + ListMapScript[S].ScriptSize.Height - ListMapScript[S].ArrayNameCondition.Length * 12 + 3 + E * 12); return; } } } } }
public void InitScript(MapScript NewScript) { RenderTarget2D ScriptBuffer = new RenderTarget2D(GraphicsDevice, NewScript.ScriptSize.Width, NewScript.ScriptSize.Height); GraphicsDevice.SetRenderTarget(ScriptBuffer); GraphicsDevice.Clear(Color.Transparent); g.Begin(); g.Draw(imgScriptTopLeft, Vector2.Zero, Color.White); g.Draw(imgScriptMiddleLeft, new Rectangle(0, imgScriptTopLeft.Height, 1, NewScript.ScriptSize.Height - imgScriptTopMiddle.Height - imgScriptBottomMiddle.Height - 1), Color.White); g.Draw(imgScriptBottomLeft, new Vector2(0, NewScript.ScriptSize.Height - imgScriptBottomLeft.Height), Color.White); g.Draw(imgScriptTopMiddle, new Rectangle(imgScriptTopLeft.Width, 0, NewScript.ScriptSize.Width - imgScriptTopRight.Width - 1, imgScriptTopMiddle.Height), Color.White); g.Draw(imgScriptMiddleMiddle, new Rectangle(imgScriptMiddleLeft.Width, imgScriptTopLeft.Height, NewScript.ScriptSize.Width - imgScriptMiddleLeft.Width - imgScriptMiddleRight.Width, NewScript.ScriptSize.Height - imgScriptTopMiddle.Height - imgScriptBottomMiddle.Height), Color.White); g.Draw(imgScriptBottomMiddle, new Rectangle(imgScriptBottomLeft.Width, NewScript.ScriptSize.Height - imgScriptBottomMiddle.Height, NewScript.ScriptSize.Width - imgScriptBottomLeft.Width - imgScriptBottomRight.Width, imgScriptBottomMiddle.Height), Color.White); g.Draw(imgScriptTopRight, new Vector2(NewScript.ScriptSize.Width - imgScriptTopRight.Width, 0), Color.White); g.Draw(imgScriptMiddleRight, new Rectangle(NewScript.ScriptSize.Width - imgScriptMiddleRight.Width, imgScriptTopRight.Height, 1, NewScript.ScriptSize.Height - imgScriptTopMiddle.Height - imgScriptBottomMiddle.Height), Color.White); g.Draw(imgScriptBottomRight, new Vector2(NewScript.ScriptSize.Width - imgScriptBottomRight.Width, NewScript.ScriptSize.Height - imgScriptBottomRight.Height), Color.White); g.DrawString(fntScriptName, NewScript.ToString(), Vector2.Zero, Color.Black); for (int T = NewScript.ArrayNameTrigger.Length - 1; T >= 0; --T) { g.DrawString(fntScriptName, NewScript.ArrayNameTrigger[T], new Vector2(0, 15 + T * 12), Color.Black); } for (int E = NewScript.ArrayNameCondition.Length - 1; E >= 0; --E) { g.DrawString(fntScriptName, NewScript.ArrayNameCondition[E], new Vector2( NewScript.ScriptSize.Width - 5 - fntScriptName.MeasureString(NewScript.ArrayNameCondition[E]).X, NewScript.ScriptSize.Height - NewScript.ArrayNameCondition.Length * 12 - 4 + E * 12), Color.Black); } g.End(); NewScript.ScriptTexture = ScriptBuffer; GraphicsDevice.SetRenderTarget(null); }
public void Scripting_MouseUp(System.Drawing.Point e, bool LeftClick, bool RightClick) { System.Drawing.Rectangle MouseRec = new System.Drawing.Rectangle(e.X + ScriptStartingPos.X, e.Y + ScriptStartingPos.Y, 1, 1); #region Action Scripts for (int S = ListMapScript.Count - 1; S >= 0; --S) { if (MouseRec.IntersectsWith(ListMapScript[S].ScriptSize)) { if (LeftClick) { ActiveScriptIndex = -1; return; } else if (RightClick) { OnSelect(ListMapScript[S], true); return; } } #region Linking else { #region Triggers for (int T = ListMapScript[S].ArrayNameTrigger.Length - 1; T >= 0; --T) { if (MouseRec.X >= ListMapScript[S].ScriptSize.X - 10 && MouseRec.X <= ListMapScript[S].ScriptSize.X - 5 && MouseRec.Y >= ListMapScript[S].ScriptSize.Y + 19 + T * 12 && MouseRec.Y <= ListMapScript[S].ScriptSize.Y + 24 + T * 12) { EventInfo NewEvent = new EventInfo(S, T); if (LeftClick) { if (ScriptLink != null && ScriptLink != ListMapScript[S]) {//Event to Trigger. if (ScriptLinkType == ScriptLinkTypes.Event && !ScriptLink.ArrayEvents[ScriptLinkEventIndex].Contains(NewEvent)) { ScriptLink.ArrayEvents[ScriptLinkEventIndex].Add(NewEvent); } ScriptLink = null; ScriptLinkIndex = -1; ScriptLinkEventIndex = -1; ScriptLinkType = ScriptLinkTypes.None; return; } } else if (RightClick) { for (int i = ListMapScript.Count - 1; i >= 0; --i) { for (int E = ListMapScript[i].ArrayEvents.Length - 1; E >= 0; --E) { ListMapScript[i].ArrayEvents[0].Remove(NewEvent); } } } } } #endregion #region Events for (int E = ListMapScript[S].ArrayNameCondition.Length - 1; E >= 0; --E) { if (MouseRec.X >= ListMapScript[S].ScriptSize.X + ListMapScript[S].ScriptSize.Width + 5 && MouseRec.X <= ListMapScript[S].ScriptSize.X + ListMapScript[S].ScriptSize.Width + 10 && MouseRec.Y >= ListMapScript[S].ScriptSize.Y + ListMapScript[S].ScriptSize.Height - ListMapScript[S].ArrayNameCondition.Length * 12 + 1 + E * 12 && MouseRec.Y <= ListMapScript[S].ScriptSize.Y + ListMapScript[S].ScriptSize.Height - ListMapScript[S].ArrayNameCondition.Length * 12 + 6 + E * 12) { if (LeftClick) { if (ScriptLink != null && ScriptLink != ListMapScript[S]) {//Trigger to Event. if (ScriptLinkType == ScriptLinkTypes.Trigger) { ListMapScript[S].ArrayEvents[E].Add(new EventInfo(ScriptLinkIndex, ScriptLinkEventIndex)); } ScriptLink = null; ScriptLinkIndex = -1; ScriptLinkEventIndex = -1; ScriptLinkType = ScriptLinkTypes.None; return; } } else if (RightClick) { ListMapScript[S].ArrayEvents[E].Clear(); } return; } } #endregion } #endregion } #endregion ScriptLink = null; ScriptLinkIndex = -1; ScriptLinkEventIndex = -1; OnSelect(null, false); ScriptLinkType = ScriptLinkTypes.None; ActiveScriptIndex = -1; }