Exemple #1
0
        public Map PrepareMap(string uid)
        {
            LoadScreen.Display();
            if (!AvailableMaps.ContainsKey(uid))
            {
                throw new InvalidDataException("Invalid map uid: {0}".F(uid));
            }
            var map = new Map(AvailableMaps[uid].Path);

            LoadTranslations(map);

            // Reinit all our assets
            InitializeLoaders();
            FileSystem.LoadFromManifest(Manifest);

            // Mount map package so custom assets can be used. TODO: check priority.
            FileSystem.Mount(FileSystem.OpenPackage(map.Path, null, int.MaxValue));

            Rules.LoadRules(Manifest, map);
            SpriteLoader = new SpriteLoader(Rules.TileSets[map.Tileset].Extensions, SheetBuilder);

            // TODO: Don't load the sequences for assets that are not used in this tileset. Maybe use the existing EditorTilesetFilters.
            SequenceProvider.Initialize(Manifest.Sequences, map.Sequences);
            VoxelProvider.Initialize(Manifest.VoxelSequences, map.VoxelSequences);
            return(map);
        }
Exemple #2
0
        public Map PrepareMap(string uid)
        {
            if (LoadScreen != null)
            {
                LoadScreen.Display();
            }

            if (MapCache[uid].Status != MapStatus.Available)
            {
                throw new InvalidDataException("Invalid map uid: {0}".F(uid));
            }

            Map map;

            using (new Support.PerfTimer("Map"))
                map = new Map(this, MapCache[uid].Package);

            LoadTranslations(map);

            // Reinitialize all our assets
            InitializeLoaders(map);

            // Load music with map assets mounted
            using (new Support.PerfTimer("Map.Music"))
                foreach (var entry in map.Rules.Music)
                {
                    entry.Value.Load(map);
                }

            VoxelProvider.Initialize(VoxelLoader, map, MiniYaml.Load(map, Manifest.VoxelSequences, map.VoxelSequenceDefinitions));
            VoxelLoader.Finish();

            return(map);
        }
Exemple #3
0
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, WRot orientation, int facings, PaletteReference p)
        {
            if (UpgradeMinEnabledLevel > 0)
            {
                yield break;
            }

            var body     = init.Actor.TraitInfo <BodyOrientationInfo>();
            var armament = init.Actor.TraitInfos <ArmamentInfo>()
                           .First(a => a.Name == Armament);
            var t = init.Actor.TraitInfos <TurretedInfo>()
                    .First(tt => tt.Turret == armament.Turret);

            var voxel = VoxelProvider.GetVoxel(image, Sequence);

            var turretFacing      = Turreted.GetInitialTurretFacing(init, t.InitialFacing, t.Turret);
            var turretOrientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(turretFacing) - orientation.Yaw), facings);

            var quantizedTurret = body.QuantizeOrientation(turretOrientation, facings);
            var quantizedBody   = body.QuantizeOrientation(orientation, facings);
            var barrelOffset    = body.LocalToWorld((t.Offset + LocalOffset.Rotate(quantizedTurret)).Rotate(quantizedBody));

            yield return(new VoxelAnimation(voxel, () => barrelOffset, () => new[] { turretOrientation, orientation },
                                            () => false, () => 0));
        }
Exemple #4
0
        public WithVoxelUnloadBody(Actor self, WithVoxelUnloadBodyInfo info)
        {
            var body = self.Trait <IBodyOrientation>();
            var rv   = self.Trait <RenderVoxels>();

            var idleVoxel = VoxelProvider.GetVoxel(rv.Image, info.IdleSequence);

            rv.Add(new VoxelAnimation(idleVoxel, () => WVec.Zero,
                                      () => new[] { body.QuantizeOrientation(self, self.Orientation) },
                                      () => Docked,
                                      () => 0));

            // Selection size
            var rvi = self.Info.Traits.Get <RenderVoxelsInfo>();
            var s   = (int)(rvi.Scale * idleVoxel.Size.Aggregate(Math.Max));

            size = new int2(s, s);

            var unloadVoxel = VoxelProvider.GetVoxel(rv.Image, info.UnloadSequence);

            rv.Add(new VoxelAnimation(unloadVoxel, () => WVec.Zero,
                                      () => new[] { body.QuantizeOrientation(self, self.Orientation) },
                                      () => !Docked,
                                      () => 0));
        }
Exemple #5
0
        public Map PrepareMap(string uid)
        {
            if (LoadScreen != null)
            {
                LoadScreen.Display();
            }

            if (MapCache[uid].Status != MapStatus.Available)
            {
                throw new InvalidDataException("Invalid map uid: {0}".F(uid));
            }

            // Operate on a copy of the map to avoid gameplay state leaking into the cache
            var map = new Map(MapCache[uid].Map.Path);

            LoadTranslations(map);

            // Reinit all our assets
            InitializeLoaders();
            GlobalFileSystem.LoadFromManifest(Manifest);

            // Mount map package so custom assets can be used. TODO: check priority.
            GlobalFileSystem.Mount(GlobalFileSystem.OpenPackage(map.Path, null, int.MaxValue));

            using (new Support.PerfTimer("Map.PreloadRules"))
                map.PreloadRules();
            using (new Support.PerfTimer("Map.SequenceProvider.Preload"))
                map.SequenceProvider.Preload();

            VoxelProvider.Initialize(Manifest.VoxelSequences, map.VoxelSequenceDefinitions);
            VoxelLoader.Finish();

            return(map);
        }
Exemple #6
0
        public WithVoxelWaterBody(Actor self, WithVoxelWaterBodyInfo info)
        {
            this.self = self;

            var body = self.Trait <BodyOrientation>();
            var rv   = self.Trait <RenderVoxels>();

            var landVoxel = VoxelProvider.GetVoxel(rv.Image, info.LandSequence);

            rv.Add(new VoxelAnimation(landVoxel, () => WVec.Zero,
                                      () => new[] { body.QuantizeOrientation(self, self.Orientation) },
                                      () => OverWater,
                                      () => 0));

            // Selection size
            var rvi = self.Info.TraitInfo <RenderVoxelsInfo>();
            var s   = (int)(rvi.Scale * landVoxel.Size.Aggregate(Math.Max));

            size = new int2(s, s);

            var waterVoxel = VoxelProvider.GetVoxel(rv.Image, info.WaterSequence);

            rv.Add(new VoxelAnimation(waterVoxel, () => WVec.Zero,
                                      () => new[] { body.QuantizeOrientation(self, self.Orientation) },
                                      () => !OverWater,
                                      () => 0));
        }
Exemple #7
0
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(
            ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, Func <WRot> orientation, int facings, PaletteReference p)
        {
            if (!EnabledByDefault)
            {
                yield break;
            }

            var body     = init.Actor.TraitInfo <BodyOrientationInfo>();
            var armament = init.Actor.TraitInfos <ArmamentInfo>()
                           .First(a => a.Name == Armament);
            var t = init.Actor.TraitInfos <TurretedInfo>()
                    .First(tt => tt.Turret == armament.Turret);

            var voxel = VoxelProvider.GetVoxel(image, Sequence);

            var         turretFacing      = Turreted.TurretFacingFromInit(init, t.InitialFacing, t.Turret);
            Func <WRot> turretOrientation = () => body.QuantizeOrientation(WRot.FromYaw(WAngle.FromFacing(turretFacing()) - orientation().Yaw), facings);

            Func <WRot> quantizedTurret = () => body.QuantizeOrientation(turretOrientation(), facings);
            Func <WRot> quantizedBody   = () => body.QuantizeOrientation(orientation(), facings);
            Func <WVec> barrelOffset    = () => body.LocalToWorld((t.Offset + LocalOffset.Rotate(quantizedTurret())).Rotate(quantizedBody()));

            yield return(new VoxelAnimation(voxel, barrelOffset, () => new[] { turretOrientation(), orientation() },
                                            () => false, () => 0, ShowShadow));
        }
Exemple #8
0
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, WRot orientation, int facings, PaletteReference p)
        {
            var body  = init.Actor.Traits.Get <BodyOrientationInfo>();
            var voxel = VoxelProvider.GetVoxel(image, "idle");

            yield return(new VoxelAnimation(voxel, () => WVec.Zero,
                                            () => new[] { body.QuantizeOrientation(orientation, facings) },
                                            () => false, () => 0));
        }
Exemple #9
0
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(
            ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, Func <WRot> orientation, int facings, PaletteReference p)
        {
            var voxel = VoxelProvider.GetVoxel(image, Sequence);
            var body  = init.Actor.TraitInfo <BodyOrientationInfo>();
            var frame = init.Contains <BodyAnimationFrameInit>() ? init.Get <BodyAnimationFrameInit, uint>() : 0;

            yield return(new VoxelAnimation(voxel, () => WVec.Zero,
                                            () => new[] { body.QuantizeOrientation(orientation(), facings) },
                                            () => false, () => frame, ShowShadow));
        }
        public WithVoxelTurret(Actor self, WithVoxelTurretInfo info)
        {
            this.self = self;
            body      = self.Trait <IBodyOrientation>();
            turreted  = self.TraitsImplementing <Turreted>()
                        .First(tt => tt.Name == info.Turret);

            var rv = self.Trait <RenderVoxels>();

            rv.Add(new VoxelAnimation(VoxelProvider.GetVoxel(rv.Image, info.Sequence),
                                      () => turreted.Position(self), () => TurretRotation(),
                                      () => false, () => 0));
        }
Exemple #11
0
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, WRot orientation, int facings, PaletteReference p)
        {
            var body = init.Actor.Traits.Get <BodyOrientationInfo>();
            var t    = init.Actor.Traits.WithInterface <TurretedInfo>()
                       .First(tt => tt.Turret == Turret);

            var voxel        = VoxelProvider.GetVoxel(image, Sequence);
            var turretOffset = body.LocalToWorld(t.Offset.Rotate(orientation));

            var turretBodyOrientation = new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(t.InitialFacing) - orientation.Yaw);
            var turretOrientation     = new[] { turretBodyOrientation, body.QuantizeOrientation(orientation, facings) };

            yield return(new VoxelAnimation(voxel, () => turretOffset, () => turretOrientation, () => false, () => 0));
        }
Exemple #12
0
        public WithVoxelTurret(Actor self, WithVoxelTurretInfo info)
            : base(info)
        {
            this.self = self;
            body      = self.Trait <BodyOrientation>();
            turreted  = self.TraitsImplementing <Turreted>()
                        .First(tt => tt.Name == Info.Turret);
            buildComplete = !self.Info.HasTraitInfo <BuildingInfo>();            // always render instantly for units

            var rv = self.Trait <RenderVoxels>();

            rv.Add(new VoxelAnimation(VoxelProvider.GetVoxel(rv.Image, Info.Sequence),
                                      () => turreted.Position(self), TurretRotation,
                                      () => IsTraitDisabled || !buildComplete, () => 0));
        }
        public WithVoxelBarrel(Actor self, WithVoxelBarrelInfo info)
        {
            this.self = self;
            this.info = info;
            body      = self.Trait <IBodyOrientation>();
            armament  = self.TraitsImplementing <Armament>()
                        .First(a => a.Info.Name == info.Armament);
            turreted = self.TraitsImplementing <Turreted>()
                       .First(tt => tt.Name == armament.Info.Turret);

            var rv = self.Trait <RenderVoxels>();

            rv.Add(new VoxelAnimation(VoxelProvider.GetVoxel(rv.Image, info.Sequence),
                                      BarrelOffset, BarrelRotation,
                                      () => false, () => 0));
        }
Exemple #14
0
        public WithVoxelBody(Actor self)
        {
            var body = self.Trait <IBodyOrientation>();
            var rv   = self.Trait <RenderVoxels>();

            var voxel = VoxelProvider.GetVoxel(rv.Image, "idle");

            rv.Add(new VoxelAnimation(voxel, () => WVec.Zero,
                                      () => new[] { body.QuantizeOrientation(self, self.Orientation) },
                                      () => false, () => 0));

            // Selection size
            var rvi = self.Info.Traits.Get <RenderVoxelsInfo>();
            var s   = (int)(rvi.Scale * voxel.Size.Aggregate(Math.Max));

            size = new int2(s, s);
        }
        public WithVoxelBody(Actor self, WithVoxelBodyInfo info)
            : base(info)
        {
            var body = self.Trait <BodyOrientation>();
            var rv   = self.Trait <RenderVoxels>();

            var voxel = VoxelProvider.GetVoxel(rv.Image, info.Sequence);

            rv.Add(new VoxelAnimation(voxel, () => WVec.Zero,
                                      () => new[] { body.QuantizeOrientation(self, self.Orientation) },
                                      () => IsTraitDisabled, () => 0));

            // Selection size
            var rvi = self.Info.TraitInfo <RenderVoxelsInfo>();
            var s   = (int)(rvi.Scale * voxel.Size.Aggregate(Math.Max));

            size = new int2(s, s);
        }
Exemple #16
0
        public WithVoxelBarrel(Actor self, WithVoxelBarrelInfo info)
            : base(info)
        {
            this.self = self;
            body      = self.Trait <BodyOrientation>();
            armament  = self.TraitsImplementing <Armament>()
                        .First(a => a.Info.Name == Info.Armament);
            turreted = self.TraitsImplementing <Turreted>()
                       .First(tt => tt.Name == armament.Info.Turret);

            buildComplete = !self.Info.HasTraitInfo <BuildingInfo>();            // always render instantly for units

            var rv = self.Trait <RenderVoxels>();

            rv.Add(new VoxelAnimation(VoxelProvider.GetVoxel(rv.Image, Info.Sequence),
                                      BarrelOffset, BarrelRotation,
                                      () => IsTraitDisabled || !buildComplete, () => 0, info.ShowShadow));
        }
Exemple #17
0
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, WRot orientation, int facings, PaletteReference p)
        {
            var sequence = LandSequence;

            if (init.Contains <LocationInit>())
            {
                var location = init.Get <LocationInit>().Value(init.World);
                var onWater  = init.World.Map.GetTerrainInfo(location).IsWater;
                sequence = onWater ? WaterSequence : LandSequence;
            }

            var body  = init.Actor.TraitInfo <BodyOrientationInfo>();
            var voxel = VoxelProvider.GetVoxel(image, sequence);

            yield return(new VoxelAnimation(voxel, () => WVec.Zero,
                                            () => new[] { body.QuantizeOrientation(orientation, facings) },
                                            () => false, () => 0));
        }
Exemple #18
0
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, WRot orientation, int facings, PaletteReference p)
        {
            if (UpgradeMinEnabledLevel > 0)
            {
                yield break;
            }

            var body = init.Actor.TraitInfo <BodyOrientationInfo>();
            var t    = init.Actor.TraitInfos <TurretedInfo>()
                       .First(tt => tt.Turret == Turret);

            var voxel        = VoxelProvider.GetVoxel(image, Sequence);
            var turretOffset = body.LocalToWorld(t.Offset.Rotate(orientation));

            var turretFacing          = init.Contains <TurretFacingInit>() ? init.Get <TurretFacingInit, int>() : t.InitialFacing;
            var turretBodyOrientation = new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(turretFacing) - orientation.Yaw);
            var turretOrientation     = new[] { turretBodyOrientation, body.QuantizeOrientation(orientation, facings) };

            yield return(new VoxelAnimation(voxel, () => turretOffset, () => turretOrientation, () => false, () => 0));
        }
        public IEnumerable <VoxelAnimation> RenderPreviewVoxels(
            ActorPreviewInitializer init, RenderVoxelsInfo rv, string image, Func <WRot> orientation, int facings, PaletteReference p)
        {
            if (UpgradeMinEnabledLevel > 0)
            {
                yield break;
            }

            var body = init.Actor.TraitInfo <BodyOrientationInfo>();
            var t    = init.Actor.TraitInfos <TurretedInfo>()
                       .First(tt => tt.Turret == Turret);

            var         voxel        = VoxelProvider.GetVoxel(image, Sequence);
            Func <WVec> turretOffset = () => body.LocalToWorld(t.Offset.Rotate(orientation()));

            var         turretFacing          = Turreted.TurretFacingFromInit(init, t.InitialFacing, Turret);
            Func <WRot> turretBodyOrientation = () => WRot.FromYaw(WAngle.FromFacing(turretFacing()) - orientation().Yaw);

            yield return(new VoxelAnimation(voxel, turretOffset,
                                            () => new[] { turretBodyOrientation(), body.QuantizeOrientation(orientation(), facings) }, () => false, () => 0));
        }
Exemple #20
0
        public WithVoxelWalkerBody(Actor self, WithVoxelWalkerBodyInfo info)
        {
            this.info = info;
            movement  = self.Trait <IMove>();

            var body = self.Trait <IBodyOrientation>();
            var rv   = self.Trait <RenderVoxels>();

            var voxel = VoxelProvider.GetVoxel(rv.Image, "idle");

            frames = voxel.Frames;
            rv.Add(new VoxelAnimation(voxel, () => WVec.Zero,
                                      () => new[] { body.QuantizeOrientation(self, self.Orientation) },
                                      () => false, () => frame));

            // Selection size
            var rvi = self.Info.Traits.Get <RenderVoxelsInfo>();
            var s   = (int)(rvi.Scale * voxel.Size.Aggregate(Math.Max));

            size = new int2(s, s);
        }
Exemple #21
0
 private void Start()
 {
     _drawer = GetComponent <BresenhamDrawer>();
     _voxels = GetComponent <VoxelProvider>();
 }