Esempio n. 1
0
        /// <summary>
        /// Creates variation of given region info.
        /// </summary>
        /// <param name="baseRegionInfoData"></param>
        /// <param name="newRegionId"></param>
        /// <param name="variationFile"></param>
        /// <returns></returns>
        private static RegionInfoData CreateVariation(RegionInfoData baseRegionInfoData, int newRegionId, string variationFile)
        {
            var result = new RegionInfoData();

            result.Id      = newRegionId;
            result.GroupId = baseRegionInfoData.GroupId;
            result.X1      = baseRegionInfoData.X1;
            result.Y1      = baseRegionInfoData.Y1;
            result.X2      = baseRegionInfoData.X2;
            result.Y2      = baseRegionInfoData.Y2;

            // TODO: Filter areas, props, and events to create, based on variation file.

            result.Areas = new List <AreaData>(baseRegionInfoData.Areas.Count);
            var i = 1;

            foreach (var originalArea in baseRegionInfoData.Areas)
            {
                var area = originalArea.Copy(false, false);
                area.Id = i++;

                // Add props
                foreach (var originalProp in originalArea.Props.Values)
                {
                    var prop = originalProp.Copy();

                    var id = (ulong)prop.EntityId;
                    id &= ~0x0000FFFFFFFF0000U;
                    id |= ((ulong)result.Id << 32);
                    id |= ((ulong)baseRegionInfoData.GetAreaIndex(originalArea.Id) << 16);

                    prop.EntityId = (long)id;

                    area.Props.Add(prop.EntityId, prop);
                }

                // Add events
                foreach (var originalEvent in originalArea.Events.Values)
                {
                    var ev = originalEvent.Copy();
                    ev.RegionId = result.Id;

                    var id = (ulong)ev.Id;
                    id &= ~0x0000FFFFFFFF0000U;
                    id |= ((ulong)result.Id << 32);
                    id |= ((ulong)baseRegionInfoData.GetAreaIndex(originalArea.Id) << 16);

                    ev.Id = (long)id;

                    area.Events.Add(ev.Id, ev);
                }

                result.Areas.Add(area);
            }

            return(result);
        }
Esempio n. 2
0
		/// <summary>
		/// Creates variation of given region info.
		/// </summary>
		/// <param name="baseRegionInfoData"></param>
		/// <param name="newRegionId"></param>
		/// <param name="variationFile"></param>
		/// <returns></returns>
		private static RegionInfoData CreateVariation(RegionInfoData baseRegionInfoData, int newRegionId, string variationFile)
		{
			var result = new RegionInfoData();
			result.Id = newRegionId;
			result.GroupId = baseRegionInfoData.GroupId;
			result.X1 = baseRegionInfoData.X1;
			result.Y1 = baseRegionInfoData.Y1;
			result.X2 = baseRegionInfoData.X2;
			result.Y2 = baseRegionInfoData.Y2;

			// TODO: Filter areas, props, and events to create, based on variation file.

			result.Areas = new List<AreaData>(baseRegionInfoData.Areas.Count);
			var i = 1;
			foreach (var originalArea in baseRegionInfoData.Areas)
			{
				var area = originalArea.Copy(false, false);
				area.Id = i++;

				// Add props
				foreach (var originalProp in originalArea.Props.Values)
				{
					var prop = originalProp.Copy();

					var id = (ulong)prop.EntityId;
					id &= ~0x0000FFFFFFFF0000U;
					id |= ((ulong)result.Id << 32);
					id |= ((ulong)baseRegionInfoData.GetAreaIndex(originalArea.Id) << 16);

					prop.EntityId = (long)id;

					area.Props.Add(prop.EntityId, prop);
				}

				// Add events
				foreach (var originalEvent in originalArea.Events.Values)
				{
					var ev = originalEvent.Copy();
					ev.RegionId = result.Id;

					var id = (ulong)ev.Id;
					id &= ~0x0000FFFFFFFF0000U;
					id |= ((ulong)result.Id << 32);
					id |= ((ulong)baseRegionInfoData.GetAreaIndex(originalArea.Id) << 16);

					ev.Id = (long)id;

					area.Events.Add(ev.Id, ev);
				}

				result.Areas.Add(area);
			}

			return result;
		}
Esempio n. 3
0
        /// <summary>
        /// Fixes the region data's entity ids.
        /// </summary>
        /// <param name="data"></param>
        /// <param name="regionId"></param>
        private static void FixIds(RegionInfoData data, int regionId)
        {
            var areaId = 1;

            foreach (var areaData in data.Areas)
            {
                areaData.Id = areaId++;

                foreach (var propData in areaData.Props.Values)
                {
                    var entityId = (propData.EntityId & ~0x0000FFFF00000000) | ((long)regionId << 32) | ((long)areaData.Id << 16);
                    propData.EntityId = entityId;
                }

                foreach (var eventData in areaData.Events.Values)
                {
                    var entityId = (eventData.Id & ~0x0000FFFF00000000) | ((long)regionId << 32) | ((long)areaData.Id << 16);
                    eventData.Id       = entityId;
                    eventData.RegionId = regionId;
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Loads collision objects from region data.
        /// </summary>
        /// <param name="data"></param>
        public void Init(RegionInfoData data)
        {
            foreach (var area in data.Areas)
            {
                // Add props
                foreach (var prop in area.Props.Values)
                {
                    foreach (var shape in prop.Shapes)
                    {
                        this.Add(shape);
                    }
                }

                // Add collision events
                foreach (var ev in area.Events.Values.Where(a => a.Type == EventType.Collision))
                {
                    foreach (var shape in ev.Shapes)
                    {
                        this.Add(shape);
                    }
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Loads collision objects from region data.
        /// </summary>
        /// <param name="data"></param>
        public void Init(RegionInfoData data)
        {
            foreach (var area in data.Areas)
            {
                foreach (var prop in area.Props.Values)
                {
                    foreach (var shape in prop.Shapes)
                    {
                        var p1 = new Point(shape.X1, shape.Y1);
                        var p2 = new Point(shape.X2, shape.Y2);
                        var p3 = new Point(shape.X3, shape.Y3);
                        var p4 = new Point(shape.X4, shape.Y4);

                        _tree.Insert(new LinePath(p1, p2));
                        _tree.Insert(new LinePath(p2, p3));
                        _tree.Insert(new LinePath(p3, p4));
                        _tree.Insert(new LinePath(p4, p1));
                    }
                }
                foreach (var ev in area.Events.Values.Where(a => a.Type == EventType.Collision))
                {
                    foreach (var shape in ev.Shapes)
                    {
                        var p1 = new Point(shape.X1, shape.Y1);
                        var p2 = new Point(shape.X2, shape.Y2);
                        var p3 = new Point(shape.X3, shape.Y3);
                        var p4 = new Point(shape.X4, shape.Y4);

                        _tree.Insert(new LinePath(p1, p2));
                        _tree.Insert(new LinePath(p2, p3));
                        _tree.Insert(new LinePath(p3, p4));
                        _tree.Insert(new LinePath(p4, p1));
                    }
                }
            }
        }
Esempio n. 6
0
		/// <summary>
		/// Fixes the region data's entity ids.
		/// </summary>
		/// <param name="data"></param>
		/// <param name="regionId"></param>
		private static void FixIds(RegionInfoData data, int regionId)
		{
			var areaId = 1;

			foreach (var areaData in data.Areas)
			{
				areaData.Id = areaId++;

				foreach (var propData in areaData.Props.Values)
				{
					var entityId = (propData.EntityId & ~0x0000FFFF00000000) | ((long)regionId << 32) | ((long)areaData.Id << 16);
					propData.EntityId = entityId;
				}

				foreach (var eventData in areaData.Events.Values)
				{
					var entityId = (eventData.Id & ~0x0000FFFF00000000) | ((long)regionId << 32) | ((long)areaData.Id << 16);
					eventData.Id = entityId;
					eventData.RegionId = regionId;
				}
			}
		}