void PostPaintUpdate() { PaintTiles_UpdateData.Apply(DataGroup.Tiles, DataGroup.CurrentUnits, DataGroup.CurrentData, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentData); PaintTiles_UpdateUnits.Apply(DataGroup.Tiles, DataGroup.CurrentUnits, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentUnits); PaintTiles_UpdateTiles.Apply(DataGroup.Tiles, DataGroup.SelectField, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.Tiles); Render.UnsetDevice(); DataGroup.Geo.Clear(); DataGroup.AntiGeo.Clear(); DataGroup.MockTiles.Clear(); DataGroup.OuterGeo.Clear(); DataGroup.TempGeo.Clear(); DataGroup.GeoInfo.Clear(); foreach (var dir in Dir.Vals) { DataGroup.Dirward[dir].Clear(); } UpdateGeo(false); UpdateGeo(true); }
void MarkGeoBoundary(bool Anti) { SwapTempGeo(Anti); Geodesic_Boundary.Apply(DataGroup.TempGeo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TempGeo); SwapTempGeo(Anti); }
void SetReducedGeoId(bool Anti) { SwapTempGeo(Anti); Geodesic_SetGeoId.Apply(DataGroup.TempGeo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TempGeo); SwapTempGeo(Anti); }
void PaintTiles() { float tile = TileUserIsPlacing; Action_PaintTiles.Apply(DataGroup.Tiles, DataGroup.SelectField, DataGroup.RandomField, tile, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.Tiles); PostPaintUpdate(); }
public bool FireballApply(int PlayerNumber, int TeamNumber, vec2 GridCoord) { AddExplosion(GridToWorldCood(GridCoord), 2 * vec(Spells.FlameRadius, Spells.FlameRadius)); SetEffectArea(GridCoord, Spells.FlameRadius, PlayerNumber); Kill.Apply(DataGroup.SelectField, DataGroup.Magic, DataGroup.AntiMagic, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.Magic); return(true); }
void SwapTempGeo(bool Anti) { if (Anti) { CoreMath.Swap(ref DataGroup.AntiGeo, ref DataGroup.TempGeo); } else { CoreMath.Swap(ref DataGroup.Geo, ref DataGroup.TempGeo); } }
void PropagateFullGeoId(bool Anti) { SwapTempGeo(Anti); for (int i = 0; i < 1024; i++) { Geodesic_ExtremityPropagation.Apply(DataGroup.TempGeo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TempGeo); } SwapTempGeo(Anti); }
void DeleteUnits() { ActionDelete_Data.Apply(DataGroup.CurrentData, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentData); ActionDelete_Data.Apply(DataGroup.PreviousData, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousData); BuildingInfusion_Delete.Apply(DataGroup.CurrentUnits, DataGroup.CurrentData, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.CurrentData, ref DataGroup.Temp1); DataGroup.Building_InfusionDiffusion(); }
public void Migrate() { Render.UnsetDevice(); //DataGroup.Corpses.Clear(); UnitMigrate.Apply(DataGroup.CurrentUnits, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentUnits); UnitMigrate.Apply(DataGroup.PreviousUnits, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousUnits); Render.UnsetDevice(); }
void UpdateGeo(bool Anti) { Geodesic_Outline.Apply(DataGroup.Tiles, Anti, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TempGeo); for (int i = 0; i < 5; i++) { Geodesic_OutlineCleanup.Apply(DataGroup.Tiles, DataGroup.TempGeo, Anti, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TempGeo); } Geodesic_StorePos.Apply(DataGroup.TempGeo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TempGeo); SwapTempGeo(Anti); }
public void SpawnUnits(vec2 grid_coord, float player, float team, float type, float distribution, bool raising = true) { if (MapEditorActive) { raising = false; } if (distribution == UnitDistribution.Single) { bool placed = false; PlaceUnit(ref placed, type, grid_coord, player, team); return; } ActionSpawn_Filter.Apply(DataGroup.SelectField, DataGroup.CurrentData, DataGroup.CurrentUnits, DataGroup.Corpses, DataGroup.AntiMagic, distribution, team, Output: DataGroup.Temp2); var Filter = DataGroup.Temp2; ActionSpawn_Unit.Apply(Filter, DataGroup.CurrentUnits, player, team, type, raising, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentUnits); if (SimulationPaused) { ActionSpawn_Unit.Apply(Filter, DataGroup.PreviousUnits, player, team, type, raising, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousUnits); } ActionSpawn_Target.Apply(Filter, DataGroup.TargetData, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TargetData); ActionSpawn_Data.Apply(Filter, DataGroup.CurrentData, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentData); if (SimulationPaused) { ActionSpawn_Data.Apply(Filter, DataGroup.PreviousData, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousData); } if (distribution == UnitDistribution.OnCorpses) { ActionSpawn_Corpse.Apply(Filter, DataGroup.Corpses, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.Corpses); } }
void CalculatePolarDistance() { for (int i = 0; i < 1024; i++) { Geodesic_PolarDistance.Apply(DataGroup.Geo, DataGroup.GeoInfo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.GeoInfo); } Geodesic_SetCircumference.Apply(DataGroup.Geo, DataGroup.GeoInfo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.GeoInfo); foreach (var dir in Dir.Vals) { Identity.Apply(DataGroup.Geo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.ShiftedGeo); Identity.Apply(DataGroup.GeoInfo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.ShiftedGeoInfo); for (int i = 0; i < 256; i++) { Shift.Apply(DataGroup.ShiftedGeo, dir, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.ShiftedGeo); Shift.Apply(DataGroup.ShiftedGeoInfo, dir, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.ShiftedGeoInfo); Geodesic_Polarity.Apply(DataGroup.Dirward[dir], DataGroup.Geo, DataGroup.ShiftedGeo, DataGroup.GeoInfo, DataGroup.ShiftedGeoInfo, dir, Output: DataGroup.Temp1); DataGroup.Dirward[dir] = CoreMath.SwapReturn(ref DataGroup.Temp1, DataGroup.Dirward[dir]); } for (int i = 0; i < 50; i++) { Geodesic_FillMissingPolarity.Apply(DataGroup.Dirward[dir], DataGroup.Geo, Output: DataGroup.Temp1); DataGroup.Dirward[dir] = CoreMath.SwapReturn(ref DataGroup.Temp1, DataGroup.Dirward[dir]); } Geodesic_ClearImportance.Apply(DataGroup.Dirward[dir], Output: DataGroup.Temp1); DataGroup.Dirward[dir] = CoreMath.SwapReturn(ref DataGroup.Temp1, DataGroup.Dirward[dir]); } // probably want a larger total shift than 256 eventually, but keep it less than the width of the map (maybe width minus 1, to avoid boundary condition) // set signal on movement data output once polarity is set, then capture signal and store polarity and geo_id }
void _GrowGeo(bool Anti) { SwapTempGeo(Anti); Geodesic_ConvertToBlocking.Apply(DataGroup.Tiles, DataGroup.TempGeo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.MockTiles); Geodesic_Outline.Apply(DataGroup.MockTiles, Anti, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.OuterGeo); for (int i = 0; i < 5; i++) { Geodesic_OutlineCleanup.Apply(DataGroup.MockTiles, DataGroup.OuterGeo, Anti, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.OuterGeo); } Geodesic_Flatten.Apply(DataGroup.TempGeo, DataGroup.OuterGeo, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TempGeo); SwapTempGeo(Anti); }
private void MakeMapSymmetric(float type, bool convert_dragonlords) { MakeSymmetric.Apply(DataGroup.Tiles, type, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.Tiles); MakeSymmetric.Apply(DataGroup.CurrentData, type, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentData); MakeSymmetric.Apply(DataGroup.PreviousData, type, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousData); MakeUnitsSymmetric.Apply(DataGroup.CurrentUnits, type, convert_dragonlords, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentUnits); MakeUnitsSymmetric.Apply(DataGroup.PreviousUnits, type, convert_dragonlords, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousUnits); MakeSymmetric.Apply(DataGroup.Extra, type, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.Extra); MakeTargetSymmetric.Apply(DataGroup.TargetData, type, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.TargetData); MakeSymmetric.Apply(DataGroup.Corpses, type, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.Corpses); FixBuildings_1.Apply(DataGroup.CurrentData, DataGroup.CurrentUnits, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentData); FixBuildings_1.Apply(DataGroup.PreviousData, DataGroup.PreviousUnits, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousData); FixBuildings_2.Apply(DataGroup.CurrentData, DataGroup.CurrentUnits, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentData); FixBuildings_2.Apply(DataGroup.PreviousData, DataGroup.PreviousUnits, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousData); PostPaintUpdate(); }
public static void CopyFromTo(RenderTarget2D Source, ref RenderTarget2D Destination, ref RenderTarget2D Temporary) { Identity.Apply(Source, Output: Temporary); CoreMath.Swap(ref Destination, ref Temporary); }
public void Startup() { Render.UnsetDevice(); int user_count = 0; for (int p = 1; p <= 4; p++) { if (Program.SteamUsers[p - 1] != 0) { user_count++; } } if (RemoveComputerDragonLords && user_count > 1) { for (int player = 1; player <= 4; player++) { if (Program.PlayersSteamUser[player] == 0) { RemoveDragonLordData.Apply(DataGroup.CurrentUnits, DataGroup.CurrentData, Player.Vals[player], Output: DataGroup.Temp1); RemoveDragonLordUnit.Apply(DataGroup.CurrentUnits, DataGroup.CurrentData, Player.Vals[player], Output: DataGroup.Temp2); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentData); CoreMath.Swap(ref DataGroup.Temp2, ref DataGroup.CurrentUnits); RemoveDragonLordData.Apply(DataGroup.PreviousUnits, DataGroup.PreviousData, Player.Vals[player], Output: DataGroup.Temp1); RemoveDragonLordUnit.Apply(DataGroup.PreviousUnits, DataGroup.PreviousData, Player.Vals[player], Output: DataGroup.Temp2); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousData); CoreMath.Swap(ref DataGroup.Temp2, ref DataGroup.PreviousUnits); } } } // Set datagroup team data. SetTeams.Apply(DataGroup.CurrentUnits, DataGroup.CurrentData, PlayerTeamVals, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.CurrentUnits); SetTeams.Apply(DataGroup.PreviousUnits, DataGroup.PreviousData, PlayerTeamVals, Output: DataGroup.Temp1); CoreMath.Swap(ref DataGroup.Temp1, ref DataGroup.PreviousUnits); DataGroup.DistanceToOtherTeams.Clear(); for (int i = 0; i < 24; i++) { DataGroup.UpdateGradient_ToOtherTeams(); } if (MyPlayerNumber > 0) { // Focus camera on a dragon lord. vec2 pos = DataGroup.DragonLordPos(MyPlayerValue); CameraPos = GridToWorldCood(pos); CameraZoom = 80f; } else { // We're a spectator, so choose netural position. CameraPos = vec2.Zero; CameraZoom = 1.45f; } Render.UnsetDevice(); }