Ejemplo n.º 1
0
        public object DOMParse(XmlElement element, params object[] parameters)
        {
            var mapScene = new MapScene(element.Attributes["id"].Value);
            var chapter  = parameters[0] as Chapter;

            mapScene.CameraType         = ExParsers.ParseEnum <CameraType>(ExString.Default(element.GetAttribute("cameraType"), CameraType.Aerial2D.ToString()));
            mapScene.RenderStyle        = ExParsers.ParseEnum <RenderStyle>(ExString.Default(element.GetAttribute("renderStyle"), RenderStyle.Tile.ToString()));
            mapScene.TileMetaIdentifier = ExString.Default(element.GetAttribute("tileMetaIdentifier"), "OSMTile");
            mapScene.UsesGameplayArea   = ExString.EqualsDefault(element.GetAttribute("usesGameplayArea"), "yes", false);
            mapScene.GameplayArea       = ExParsers.ParseDefault(element.GetAttribute("gameplayArea"), new RectD(Vector2d.zero, Vector2d.zero));
            mapScene.LatLon             = ExParsers.ParseDefault(element.GetAttribute("center"), Vector2d.zero);
            mapScene.Zoom = ExParsers.ParseDefault(element.GetAttribute("zoom"), 19);

            bool initialScene = ExString.EqualsDefault(element.GetAttribute("start"), "yes", false);

            if (initialScene)
            {
                chapter.setTargetId(mapScene.getId());
            }

            int layer = 0;

            foreach (var e in element.SelectNodes("map-element"))
            {
                var        mapElementNode = e as XmlElement;
                MapElement mapElement     = null;
                XmlElement extElemNode;
                var        targetId = mapElementNode.GetAttribute("targetId");
                if ((extElemNode = (XmlElement)mapElementNode.SelectSingleNode("ext-elem-ref")) != null)
                {
                    var extElem = new ExtElemReference(targetId);
                    mapElement = extElem;
                    extElem.TransformManagerDescriptor = GetDescriptor(ExString.Default(extElemNode.GetAttribute("transformManager"),
                                                                                        typeof(GeopositionedDescriptor).FullName));

                    foreach (var param in extElem.TransformManagerDescriptor.ParameterDescription)
                    {
                        var paramNode = extElemNode.SelectSingleNode("param[@name=\"" + param.Key + "\"]");
                        if (paramNode != null)
                        {
                            extElem.TransformManagerParameters.Add(param.Key, parseParam(param.Value.Type, paramNode.InnerText));
                        }
                    }
                }
                else
                {
                    mapElement = new GeoReference(targetId);
                }

                mapElement.Conditions  = DOMParserUtility.DOMParse <Conditions>(mapElementNode.SelectSingleNode("condition") as XmlElement, parameters);
                mapElement.Layer       = ExParsers.ParseDefault(mapElementNode.GetAttribute("layer"), layer);
                mapElement.Scale       = ExParsers.ParseDefault(mapElementNode.GetAttribute("scale"), 1f);
                mapElement.Orientation = (Orientation)ExParsers.ParseDefault(mapElementNode.GetAttribute("orientation"), 2);
                layer = Mathf.Max(mapElement.Layer, layer) + 1;
                mapScene.Elements.Add(mapElement);
            }

            return(mapScene);
        }
Ejemplo n.º 2
0
 public TransformManagerDataControl(ExtElementRefDataControl extElemReferencedataControl)
 {
     this.extElemReferencedataControl = extElemReferencedataControl;
     this.extElemReference            = extElemReferencedataControl.getContent() as ExtElemReference;
     registerChanges      = false;
     this.positionManager = GuiMapPositionManagerFactory.Instance.CreateInstance(extElemReference.TransformManagerDescriptor, this);
     registerChanges      = true;
     extElemReferencedataControl.Subscribe(this);
 }
        private Element FindElement(ExtElemReference reference)
        {
            if (!cache.ContainsKey(reference))
            {
                var elem = Game.Instance.GameState.FindElement <Element>(reference.getTargetId());
                cache.Add(reference, elem);
            }

            return(cache.ContainsKey(reference) ? cache[reference] : null);
        }
Ejemplo n.º 4
0
        public object DOMParse(XmlElement element, params object[] parameters)
        {
            var mapScene = new MapScene(element.Attributes["id"].Value);
            var chapter  = parameters[0] as Chapter;

            mapScene.CameraType = element.Attributes["cameraType"].Value.ToEnum <CameraType>();

            var tmpArgVal = element.GetAttribute("start");

            if (!string.IsNullOrEmpty(tmpArgVal))
            {
                if (tmpArgVal.Equals("yes"))
                {
                    chapter.setTargetId(mapScene.getId());
                }
            }

            tmpArgVal = element.GetAttribute("center");
            if (!string.IsNullOrEmpty(tmpArgVal))
            {
                mapScene.LatLon = (Vector2d)parseParam(typeof(Vector2d), tmpArgVal);
            }

            foreach (var e in element.SelectNodes("map-element"))
            {
                var        mapElementNode = e as XmlElement;
                MapElement mapElement     = null;
                XmlElement extElemNode;
                if ((extElemNode = (XmlElement)mapElementNode.SelectSingleNode("ext-elem-ref")) != null)
                {
                    var extElem = new ExtElemReference(mapElementNode.Attributes["targetId"].Value);
                    mapElement = extElem;
                    extElem.TransformManagerDescriptor = GetDescriptor(extElemNode.Attributes["transformManager"].Value);
                    foreach (var param in extElem.TransformManagerDescriptor.ParameterDescription)
                    {
                        var paramNode = extElemNode.SelectSingleNode("param[@name=\"" + param.Key + "\"]");
                        if (paramNode != null)
                        {
                            extElem.TransformManagerParameters.Add(param.Key, parseParam(param.Value.Type, paramNode.InnerText));
                        }
                    }
                }
                else
                {
                    mapElement = new GeoReference(mapElementNode.Attributes["targetId"].Value);
                }

                mapElement.Conditions = (Conditions)DOMParserUtility.DOMParse(mapElementNode.SelectSingleNode("condition") as XmlElement, parameters);
                mapElement.Layer      = int.Parse(mapElementNode.Attributes["layer"].Value);
                mapScene.Elements.Add(mapElement);
            }

            return(mapScene);
        }
Ejemplo n.º 5
0
        private void DrawMapElement(Rect rect, int index, bool active, bool focused)
        {
            MapElement mapElement = (MapElement)mapElementReorderableList.list[index];

            EditorGUI.LabelField(infoRect.GUIAdapt(rect), mapElement.getTargetId());

            if (mapElement is ExtElemReference)
            {
                var extReference = mapElement as ExtElemReference;

                // Trasnform manager descriptor selection
                var avaliableDescriptors = TransformManagerDescriptorFactory.Instance.AvaliableTransformManagers.ToList();
                var selected             = avaliableDescriptors.FindIndex(d => d.Key == extReference.TransformManagerDescriptor.GetType());
                var newSelected          = EditorGUI.Popup(typePopupRect.GUIAdapt(rect), selected, avaliableDescriptors.ConvertAll(d => d.Value).ToArray());

                if (newSelected != selected)
                {
                    // In case of change, reinstance a new one
                    extReference.TransformManagerDescriptor = TransformManagerDescriptorFactory.Instance.CreateDescriptor(avaliableDescriptors[newSelected].Key);
                    UpdateMapResources();
                }

                using (new EditorGUI.DisabledScope())
                {
                    if (GUI.Button(typeConfigRect.GUIAdapt(rect), "*"))
                    {
                        var o = DrawerParametersMenu.ShowAtPosition(typeConfigRect.GUIAdapt(rect));
                        DrawerParametersMenu.s_DrawerParametersMenu.ExtElemReference = extReference;
                        if (o)
                        {
                            GUIUtility.ExitGUI();
                        }
                    }
                }

                if (GUI.Button(centerButtonRect.GUIAdapt(rect), "Move"))
                {
                    movingReference = extReference;
                }
            }

            if (GUI.Button(editButtonRect.GUIAdapt(rect), "Conditions"))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(mapElement.Conditions);
            }
        }
Ejemplo n.º 6
0
        private void DrawMapElement(Rect rect, int index, bool active, bool focused)
        {
            MapElement mapElement = (MapElement)mapElementReorderableList.list[index];

            EditorGUI.LabelField(infoRect.GUIAdapt(rect), mapElement.getTargetId());

            //geo.Type = (GMLGeometry.GeometryType)EditorGUI.EnumPopup(typePopupRect.GUIAdapt(rect), geo.Type);
            var center = map.Center;

            if (mapElement is GeoReference)
            {
                var geoReference = mapElement as GeoReference;
                var geoElement   = Controller.getInstance().getSelectedChapterDataControl().getObjects <GeoElement>().Find(e => e.Id == geoReference.getTargetId());
                if (geoElement != null && geoElement.Geometry.Points.Count > 0)
                {
                    center = geoElement.Geometry.Center;
                }
            }
            else if (mapElement is ExtElemReference)
            {
                var extReference = mapElement as ExtElemReference;

                // Trasnform manager descriptor selection
                var avaliableDescriptors = TransformManagerDescriptorFactory.Instance.AvaliableTransformManagers.ToList();
                var selected             = avaliableDescriptors.FindIndex(d => d.Key == extReference.TransformManagerDescriptor.GetType());
                var newSelected          = EditorGUI.Popup(typePopupRect.GUIAdapt(rect), selected, avaliableDescriptors.ConvertAll(d => d.Value).ToArray());

                if (newSelected != selected)
                {
                    // In case of change, reinstance a new one
                    extReference.TransformManagerDescriptor = TransformManagerDescriptorFactory.Instance.CreateDescriptor(avaliableDescriptors[newSelected].Key);
                    UpdateMapResources();
                }

                using (new EditorGUI.DisabledScope())
                {
                    if (GUI.Button(typeConfigRect.GUIAdapt(rect), "*"))
                    {
                        //DrawerParametersMenu.s_SpriteEditor = this;
                        var o = DrawerParametersMenu.ShowAtPosition(typeConfigRect.GUIAdapt(rect));
                        DrawerParametersMenu.s_DrawerParametersMenu.ExtElemReference = extReference;
                        if (o)
                        {
                            GUIUtility.ExitGUI();
                        }
                    }
                }

                if (GUI.Button(centerButtonRect.GUIAdapt(rect), "Move"))
                {
                    movingReference = extReference;
                }
            }

            /*if (GUI.Button(centerButtonRect.GUIAdapt(rect), "Center"))
             * {
             *  map.Center = center;
             * }*/

            /*if (GUI.Button(editButtonRect.GUIAdapt(rect), editing != geo ? "Unlocked" : "Locked"))
             * {
             *  editing = editing == geo ? null : geo;
             * }*/

            if (GUI.Button(editButtonRect.GUIAdapt(rect), "Conditions"))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(mapElement.Conditions);
            }
        }
        public MapSceneDataControl(MapScene mapScene)
        {
            this.mapScene = mapScene;
            this.gameplaAreaDataControl = new GameplayAreaDataControl(this);
            var mapParametersGatherer = new Action <Action <object> >[]
            {
                callback => callback(LatLon),
                callback => callback(Zoom)
            };

            this.mapElementListDataControl = new ListDataControl <MapSceneDataControl, MapElementDataControl>(this, mapScene.Elements, new ListDataControl <MapSceneDataControl, MapElementDataControl> .ElementFactoryView()
            {
                Titles         = { { GEO_REFERENCE, "Operation.AddGeoReferenceTitle" } },
                Messages       = { { GEO_REFERENCE, "Operation.AddGeoReferenceMessage" } },
                Errors         = { { GEO_REFERENCE, "Operation.AddGeoReferenceErrorNoItems" } },
                ElementFactory = new DefaultElementFactory <MapElementDataControl>(new DefaultElementFactory <MapElementDataControl> .ElementCreator()
                {
                    CreateDataControl = o => new GeoElementRefDataControl(o as GeoReference),
                    CreateElement     = (type, targetId, _) => new GeoElementRefDataControl(new GeoReference(targetId)),
                    TypeDescriptors   = new DefaultElementFactory <MapElementDataControl> .ElementCreator.TypeDescriptor[]
                    {
                        new DefaultElementFactory <MapElementDataControl> .ElementCreator.TypeDescriptor()
                        {
                            Type                = GEO_REFERENCE,
                            ContentType         = typeof(GeoReference),
                            ValidReferenceTypes = new[] { typeof(GeoElement) },
                            ReferencesId        = true
                        }
                    }
                })
            }, new ListDataControl <MapSceneDataControl, MapElementDataControl> .ElementFactoryView()
            {
                Titles =
                {
                    { Controller.ITEM_REFERENCE,    "Operation.AddItemReferenceTitle"    },
                    { Controller.ATREZZO_REFERENCE, "Operation.AddAtrezzoReferenceTitle" },
                    { Controller.NPC_REFERENCE,     "Operation.AddNPCReferenceTitle"     }
                },
                Messages =
                {
                    { Controller.ITEM_REFERENCE,    "Operation.AddItemReferenceMessage"    },
                    { Controller.ATREZZO_REFERENCE, "Operation.AddAtrezzoReferenceMessage" },
                    { Controller.NPC_REFERENCE,     "Operation.AddNPCReferenceMessage"     }
                },
                Errors =
                {
                    { Controller.ITEM_REFERENCE,    "Operation.AddItemReferenceErrorNoItems" },
                    { Controller.ATREZZO_REFERENCE, "Operation.AddReferenceErrorNoAtrezzo"   },
                    { Controller.NPC_REFERENCE,     "Operation.AddReferenceErrorNoNPC"       }
                },
                ElementFactory = new DefaultElementFactory <MapElementDataControl>(new DefaultElementFactory <MapElementDataControl> .ElementCreator()
                {
                    CreateDataControl = o => new ExtElementRefDataControl(o as ExtElemReference),
                    CreateElement     = (type, targetId, extra) =>
                    {
                        var extElementRef = new ExtElemReference(targetId);
                        extElementRef.TransformManagerParameters["Position"] = (Vector2d)extra[0];
                        var zoom            = (int)extra[1];
                        var pixelScale      = GM.MetersToPixels(GM.PixelsToMeters(new Vector2d(1, 1), zoom), 19);
                        extElementRef.Scale = (float)pixelScale.x;
                        return(new ExtElementRefDataControl(extElementRef));
                    },
                    TypeDescriptors = new DefaultElementFactory <MapElementDataControl> .ElementCreator.TypeDescriptor[]
                    {
                        new DefaultElementFactory <MapElementDataControl> .ElementCreator.TypeDescriptor()
                        {
                            Type                = Controller.ITEM_REFERENCE,
                            ContentType         = typeof(ExtElemReference),
                            ValidReferenceTypes = new[] { typeof(Item) },
                            ExtraParameters     = mapParametersGatherer,
                            ReferencesId        = true
                        },
                        new DefaultElementFactory <MapElementDataControl> .ElementCreator.TypeDescriptor()
                        {
                            Type                = Controller.ATREZZO_REFERENCE,
                            ContentType         = typeof(ExtElemReference),
                            ValidReferenceTypes = new[] { typeof(Atrezzo) },
                            ExtraParameters     = mapParametersGatherer,
                            ReferencesId        = true
                        },
                        new DefaultElementFactory <MapElementDataControl> .ElementCreator.TypeDescriptor()
                        {
                            Type                = Controller.NPC_REFERENCE,
                            ContentType         = typeof(ExtElemReference),
                            ValidReferenceTypes = new[] { typeof(NPC) },
                            ExtraParameters     = mapParametersGatherer,
                            ReferencesId        = true
                        }
                    }
                })
            });

            xApiOptions = new Dictionary <string, List <string> >();

            var accessibleOptions = Enum.GetValues(typeof(AccessibleTracker.Accessible))
                                    .Cast <AccessibleTracker.Accessible>()
                                    .Select(v => v.ToString().ToLower())
                                    .ToList();

            xApiOptions.Add("accesible", accessibleOptions);

            var alternativeOptions = Enum.GetValues(typeof(AlternativeTracker.Alternative))
                                     .Cast <AlternativeTracker.Alternative>()
                                     .Select(v => v.ToString().ToLower())
                                     .ToList();

            xApiOptions.Add("alternative", alternativeOptions);
        }
Ejemplo n.º 8
0
 public ExtElementRefDataControl(ExtElemReference extElemReference) : base(extElemReference)
 {
     this.extElemReference = extElemReference;
     type = getReferenceType(extElemReference.getTargetId());
     this.transformManagerDataControl = new TransformManagerDataControl(this);
 }
        public ExtElementRefDataControl(ExtElemReference extElemReference) : base(extElemReference)
        {
            this.extElemReference = extElemReference;
            type = getReferenceType(extElemReference.getTargetId());
            this.transformManagerDataControl = new TransformManagerDataControl(this);

            geoActionDataControls = new ListDataControl <ExtElementRefDataControl, GeoActionDataControl>(this, extElemReference.Actions, new []
            {
                new ListDataControl <ExtElementRefDataControl, GeoActionDataControl> .ElementFactoryView
                {
                    Titles =
                    {
                        { GeoElementDataControl.ENTER_ACTION,   "Geo.Create.Title.EnterAction"  },
                        { GeoElementDataControl.EXIT_ACTION,    "Geo.Create.Title.ExitAction"   },
                        { GeoElementDataControl.LOOK_TO_ACTION, "Geo.Create.Title.LookToAction" }
                    },
                    Messages =
                    {
                        { GeoElementDataControl.ENTER_ACTION,   "Geo.Create.Message.EnterAction"  },
                        { GeoElementDataControl.EXIT_ACTION,    "Geo.Create.Message.ExitAction"   },
                        { GeoElementDataControl.LOOK_TO_ACTION, "Geo.Create.Message.LookToAction" }
                    },
                    Errors =
                    {
                        { GeoElementDataControl.ENTER_ACTION,   "Geo.Create.Error.EnterAction"  },
                        { GeoElementDataControl.EXIT_ACTION,    "Geo.Create.Error.ExitAction"   },
                        { GeoElementDataControl.LOOK_TO_ACTION, "Geo.Create.Error.LookToAction" }
                    },
                    ElementFactory = new DefaultElementFactory <GeoActionDataControl>(new DefaultElementFactory <GeoActionDataControl> .ElementCreator()
                    {
                        TypeDescriptors = new []
                        {
                            new TD
                            {
                                Type        = GeoElementDataControl.ENTER_ACTION,
                                ContentType = typeof(EnterAction)
                            },
                            new TD
                            {
                                Type        = GeoElementDataControl.EXIT_ACTION,
                                ContentType = typeof(ExitAction)
                            },
                            new TD
                            {
                                Type        = GeoElementDataControl.LOOK_TO_ACTION,
                                ContentType = typeof(InspectAction)
                            }
                        },
                        CreateDataControl = action => new GeoActionDataControl(action as GeoAction),
                        CreateElement     = (type, id, _) =>
                        {
                            switch (type)
                            {
                            case GeoElementDataControl.ENTER_ACTION:   return(new GeoActionDataControl(new EnterAction()));

                            case GeoElementDataControl.EXIT_ACTION:    return(new GeoActionDataControl(new ExitAction()));

                            case GeoElementDataControl.LOOK_TO_ACTION: return(new GeoActionDataControl(new LookToAction()));

                            default: return(null);
                            }
                        }
                    })
                }
            });
        }