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); }
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); }
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)); }
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)); }
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); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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); }
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)); }
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)); }
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)); }
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); }
private void Start() { _drawer = GetComponent <BresenhamDrawer>(); _voxels = GetComponent <VoxelProvider>(); }