Beispiel #1
0
        public static Entity FromTag(H2vMap map, ScenarioTag scenario, ScenarioTag.ItemCollectionPlacement instance)
        {
            if (instance.ItemCollectionReference.IsInvalid)
            {
                return(new Scenery());
            }

            if (map.TryGetTag <BaseTag>(instance.ItemCollectionReference, out var itemTag) == false)
            {
                throw new Exception("Unable to load itmc");
            }

            if (itemTag is ItemCollectionTag itmc)
            {
                return(CreateFromItemCollection(map, itmc, instance)[0]);
            }

            if (itemTag is VehicleCollectionTag vehc)
            {
                return(CreateFromVehicleCollection(map, vehc, instance)[0]);
            }

            return(new Scenery());
        }
Beispiel #2
0
 public Entity FromItemCollectionPlacement(ScenarioTag.ItemCollectionPlacement item)
 {
     return(ItemFactory.FromTag(this.Map, this.Map.Scenario, item));
 }
Beispiel #3
0
        private static List <Entity> CreateFromVehicleCollection(H2vMap map, VehicleCollectionTag vehc, ScenarioTag.ItemCollectionPlacement instance)
        {
            var entities = new List <Entity>();

            // I've only seen 1 item collections though
            foreach (var vehicle in vehc.VehicleReferences)
            {
                if (map.TryGetTag(vehicle.Vehicle, out var vehi) == false)
                {
                    throw new Exception("No tag found for vehc reference");
                }

                var entity = new Vehicle();
                entity.FriendlyName = vehi.Name;
                var xform = new TransformComponent(entity, instance.Position, QuaternionExtensions.FromH2vOrientation(instance.Orientation));
                PopulateVehicle(entity, map, xform, vehi);
                entities.Add(entity);
            }

            return(entities);
        }
Beispiel #4
0
        private static List <Entity> CreateFromItemCollection(H2vMap map, ItemCollectionTag itmc, ScenarioTag.ItemCollectionPlacement instance)
        {
            var entities = new List <Entity>();

            // I've only seen 1 item collections though
            foreach (var item in itmc.Items)
            {
                if (map.TryGetTag <BaseTag>(item.ItemTag, out var tag) == false)
                {
                    throw new Exception("No tag found for weap/equip");
                }

                TagRef <HaloModelTag> itemHlmt = default;

                if (tag is WeaponTag weap)
                {
                    itemHlmt = weap.Hlmt;
                }

                if (tag is EquipmentTag eqip)
                {
                    itemHlmt = eqip.Hlmt;
                }

                if (itemHlmt == default)
                {
                    continue;
                }

                var entity = new Item();
                entity.FriendlyName = tag.Name;

                var renderModel = new RenderModelComponent(entity, new Model <BitmapTag>
                {
                    Note = $"[{itmc.Id}] {itmc.Name}",
                    //Position = instance.Position,
                    //Orientation = baseRotation,
                    //Scale = new Vector3(1.3f),
                    Flags  = ModelFlags.Diffuse | ModelFlags.CastsShadows | ModelFlags.ReceivesShadows,
                    Meshes = MeshFactory.GetRenderModel(map, itemHlmt)
                });

                var xform = new TransformComponent(entity, instance.Position, QuaternionExtensions.FromH2vOrientation(instance.Orientation));
                var body  = PhysicsComponentFactory.CreateDynamicRigidBody(entity, xform, map, itemHlmt);

                entity.SetComponents(xform, renderModel, body);
                entities.Add(entity);
            }

            return(entities);
        }