private static Tuple <float, float> EvaluateRotation(AbilityCounts counts, BearAbilityBuilder abilities) { float damage = 0f; float threat = 0f; damage += abilities.MeleeStats.DPSTotalAverage * RotationDuration; threat += abilities.MeleeStats.TPSTotalAverage * RotationDuration; damage += abilities.MaulStats.DamageAverage * RotationDuration / 3f; //TODO: Limit this by rage; just assume you maul on cooldown for now threat += abilities.MaulStats.ThreatAverage * RotationDuration / 3f; damage += abilities.FaerieFireStats.DamageAverage * counts.FFF; threat += abilities.FaerieFireStats.ThreatAverage * counts.FFF; damage += abilities.LacerateStats.DamageAverage * counts.Lacerate; threat += abilities.LacerateStats.ThreatAverage * counts.Lacerate; damage += abilities.LacerateStats.DamageTick1Raw * counts.LacerateTick; threat += abilities.LacerateStats.ThreatTick1Raw * counts.LacerateTick; damage += abilities.MangleStats.DamageAverage * counts.Mangle; threat += abilities.MangleStats.ThreatAverage * counts.Mangle; damage += abilities.PulverizeStats.Damage3Average * counts.Pulverize; threat += abilities.PulverizeStats.Threat3Average * counts.FFF; damage += abilities.SwipeStats.DamageAverage * counts.Swipe; threat += abilities.SwipeStats.ThreatAverage * counts.Swipe; damage += abilities.ThrashStats.DamageAverage * counts.Thrash; threat += abilities.ThrashStats.ThreatAverage * counts.Thrash; return(Tuple.Create(damage / RotationDuration, threat / RotationDuration)); }
public void SetAbilityCounts(AbilityCounts _info) { _abilityCounts = _info; }
private static Tuple<float,float> EvaluateRotation(AbilityCounts counts, BearAbilityBuilder abilities) { float damage = 0f; float threat = 0f; damage += abilities.MeleeStats.DPSTotalAverage * RotationDuration; threat += abilities.MeleeStats.TPSTotalAverage * RotationDuration; damage += abilities.MaulStats.DamageAverage * RotationDuration / 3f; //TODO: Limit this by rage; just assume you maul on cooldown for now threat += abilities.MaulStats.ThreatAverage * RotationDuration / 3f; damage += abilities.FaerieFireStats.DamageAverage * counts.FFF; threat += abilities.FaerieFireStats.ThreatAverage * counts.FFF; damage += abilities.LacerateStats.DamageAverage * counts.Lacerate; threat += abilities.LacerateStats.ThreatAverage * counts.Lacerate; damage += abilities.LacerateStats.DamageTick1Raw * counts.LacerateTick; threat += abilities.LacerateStats.ThreatTick1Raw * counts.LacerateTick; damage += abilities.MangleStats.DamageAverage * counts.Mangle; threat += abilities.MangleStats.ThreatAverage * counts.Mangle; damage += abilities.PulverizeStats.Damage3Average * counts.Pulverize; threat += abilities.PulverizeStats.Threat3Average * counts.FFF; damage += abilities.SwipeStats.DamageAverage * counts.Swipe; threat += abilities.SwipeStats.ThreatAverage * counts.Swipe; damage += abilities.ThrashStats.DamageAverage * counts.Thrash; threat += abilities.ThrashStats.ThreatAverage * counts.Thrash; return Tuple.Create(damage / RotationDuration, threat / RotationDuration); }
/* Save the current level */ public void SaveLevel(byte[] levelScreenshot = null, int maxGoonCount = 75, int hazardCount = 0, AbilityCounts abilityCounts = null) { #if UNITY_WEBGL Debug.LogError("REQUESTED TO SAVE LEVEL IN WEBGL - THIS IS NOT SUPPORTED!"); return; #endif Debug.Log("Saving level..."); if (!LevelManager.Instance.CurrentMeta.isLoaded) { Debug.LogError("Cannot save unloaded level!"); return; } if (abilityCounts == null) { abilityCounts = new AbilityCounts(5, 5, 5, 5); } //Work out what tiles to write List <Tile> tiles = new List <Tile>(); for (int i = 0; i < LevelManager.Instance.Grid.AllTiles.Count; i++) { if (LevelManager.Instance.Grid.AllTiles[i].IsOccupied) { tiles.Add(LevelManager.Instance.Grid.AllTiles[i]); } } //Write data BinaryWriter writer = new BinaryWriter(File.OpenWrite(Application.streamingAssetsPath + "/LEVELS/" + LevelManager.Instance.CurrentMeta.levelName + ".dwb")); writer.BaseStream.SetLength(0); /* Header Info */ writer.Write(LevelFileVersion.VERSION_NUM); writer.Write(tiles.Count); writer.Write((Int16)LevelManager.Instance.Grid.GridTileDims.x); writer.Write((Int16)LevelManager.Instance.Grid.GridTileDims.y); /* Tile Occupier Info */ int occupiedCount = 0; int occCountPos = (int)writer.BaseStream.Position; writer.Write(0); for (int i = 0; i < tiles.Count; i++) { if (!tiles[i].IsOccupied) { continue; } writer.Write(tiles[i].Index); writer.Write((Int16)tiles[i].Occupier.Type); occupiedCount++; } int occEndPos = (int)writer.BaseStream.Position; writer.BaseStream.Position = occCountPos; writer.Write(occupiedCount); writer.BaseStream.Position = occEndPos; /* Tile Prop Info */ int propCount = 0; int prpCountPos = (int)writer.BaseStream.Position; writer.Write(0); for (int i = 0; i < tiles.Count; i++) { if (!tiles[i].HasProp && !tiles[i].HasPropOrigin) { continue; } writer.Write((Int16)tiles[i].Prop.Type); writer.Write((Int16)tiles[i].Prop.Rotation); writer.Write(tiles[i].Prop.Tiles.Count); for (int x = 0; x < tiles[i].Prop.Tiles.Count; x++) { writer.Write(tiles[i].Prop.Tiles[x].Index); } propCount++; } int prpEndPos = (int)writer.BaseStream.Position; writer.BaseStream.Position = prpCountPos; writer.Write(propCount); writer.BaseStream.Position = prpEndPos; /* Misc Metadata */ writer.Write(maxGoonCount); writer.Write(hazardCount); writer.Write(abilityCounts.Rally); writer.Write(abilityCounts.Medical); writer.Write(abilityCounts.FirePhone); writer.Write(abilityCounts.Marshal); writer.Close(); //Save screenshot if generated one if (levelScreenshot != null) { File.WriteAllBytes(Application.streamingAssetsPath + "/LEVELS/" + LevelManager.Instance.CurrentMeta.levelName + ".png", levelScreenshot); } Debug.Log("Saved level " + LevelManager.Instance.CurrentMeta.levelName + " with " + tiles.Count + " tiles and " + hazardCount + " hazards, which is GUID " + LevelManager.Instance.CurrentMeta.levelGUID + "."); }