using System;
using System.Collections.Generic;
using Cpp2IlInjected;
using Newtonsoft.Json;

// Token: 0x02000154 RID: 340
[Token(Token = "0x2000154")]
public class GameSave
{
	// Token: 0x17000068 RID: 104
	// (get) Token: 0x06001078 RID: 4216 RVA: 0x00026554 File Offset: 0x00024754
	[Token(Token = "0x17000068")]
	[JsonIgnore]
	public bool IsStandardMode
	{
		[Token(Token = "0x6001078")]
		[Address(RVA = "0xA2B4E0", Offset = "0xA2A4E0", VA = "0x180A2B4E0")]
		get
		{
			return this.basic.difficulty == GameDifficulty.Standard;
		}
	}

	// Token: 0x06001079 RID: 4217 RVA: 0x00026578 File Offset: 0x00024778
	[Token(Token = "0x6001079")]
	[Address(RVA = "0xA2B1B0", Offset = "0xA2A1B0", VA = "0x180A2B1B0")]
	[JsonConstructor]
	public GameSave()
	{
		GameSaveBasicData gameSaveBasicData = new GameSaveBasicData();
		this.basic = gameSaveBasicData;
		PlayerStatsData playerStatsData = new PlayerStatsData();
		this.stats = playerStatsData;
		GamePropertyData gamePropertyData = new GamePropertyData();
		this.props = gamePropertyData;
		StageFlagData stageFlagData = new StageFlagData();
		this.flags = stageFlagData;
		TutorialTipData tutorialTipData = new TutorialTipData();
		this.tips = tutorialTipData;
		BossRushData bossRushData = new BossRushData();
		this.bossRush = bossRushData;
		base..ctor();
	}

	// Token: 0x0600107A RID: 4218 RVA: 0x000265E0 File Offset: 0x000247E0
	[Token(Token = "0x600107A")]
	[Address(RVA = "0xA2B320", Offset = "0xA2A320", VA = "0x180A2B320")]
	public GameSave(int dataIndex, GameDifficulty difficulty)
	{
		GameSaveBasicData gameSaveBasicData = new GameSaveBasicData();
		this.basic = gameSaveBasicData;
		PlayerStatsData playerStatsData = new PlayerStatsData();
		this.stats = playerStatsData;
		GamePropertyData gamePropertyData = new GamePropertyData();
		this.props = gamePropertyData;
		StageFlagData stageFlagData = new StageFlagData();
		this.flags = stageFlagData;
		TutorialTipData tutorialTipData = new TutorialTipData();
		this.tips = tutorialTipData;
		BossRushData bossRushData = new BossRushData();
		this.bossRush = bossRushData;
		base..ctor();
		GameSaveBasicData gameSaveBasicData2 = this.basic;
		this.dataVersion = (int)((ulong)46L);
		gameSaveBasicData2.dataIndex = dataIndex;
		this.basic.difficulty = difficulty;
		this.UpdateSaveTimeStamp();
	}

	// Token: 0x0600107B RID: 4219 RVA: 0x0002667C File Offset: 0x0002487C
	[Token(Token = "0x600107B")]
	[Address(RVA = "0xA2B030", Offset = "0xA2A030", VA = "0x180A2B030")]
	public void OnBeatingGame(BeatingGameData data)
	{
		GameSaveBasicData gameSaveBasicData = this.basic;
		gameSaveBasicData.stage = (GameStage)((ulong)1L);
		gameSaveBasicData.savePoint = (int)((ulong)4294967295L);
		Dictionary<GameStage, List<int>> dictionary = new Dictionary();
		gameSaveBasicData.savePointMap = dictionary;
		int num = gameSaveBasicData.gameCleared;
		gameSaveBasicData.showTeleportMenu = false;
		if (num < 99)
		{
			num++;
			gameSaveBasicData.gameCleared = num;
		}
		this.stats.OnBeatingGame(data);
		this.props.OnBeatingGame(data);
		this.flags.OnBeatingGame();
		this.UpdateSaveTimeStamp();
	}

	// Token: 0x0600107C RID: 4220 RVA: 0x00026704 File Offset: 0x00024904
	[Token(Token = "0x600107C")]
	[Address(RVA = "0xA2AF50", Offset = "0xA29F50", VA = "0x180A2AF50")]
	public void BossRushRemoveTestMode()
	{
		GameSaveBasicData gameSaveBasicData = this.basic;
		gameSaveBasicData.stage = (GameStage)((ulong)9L);
		Dictionary<GameStage, List<int>> dictionary = new Dictionary();
		gameSaveBasicData.savePointMap = dictionary;
		gameSaveBasicData.showTeleportMenu = false;
		this.stats.BossRushRemoveTestMode();
		this.props.BossRushRemoveTestMode();
		this.flags.BossRushRemoveTestMode();
		this.bossRush.RemoveTestMode();
		this.UpdateSaveTimeStamp();
	}

	// Token: 0x0600107D RID: 4221 RVA: 0x000020D3 File Offset: 0x000002D3
	[Token(Token = "0x600107D")]
	[Address(RVA = "0xA2B130", Offset = "0xA2A130", VA = "0x180A2B130")]
	public void UpdateSaveTimeStamp()
	{
		throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
	}

	// Token: 0x04001AD6 RID: 6870
	[FieldOffset(Offset = "0x10")]
	[Token(Token = "0x4001AD6")]
	public int dataVersion;

	// Token: 0x04001AD7 RID: 6871
	[FieldOffset(Offset = "0x18")]
	[Token(Token = "0x4001AD7")]
	public GameSaveBasicData basic;

	// Token: 0x04001AD8 RID: 6872
	[FieldOffset(Offset = "0x20")]
	[Token(Token = "0x4001AD8")]
	public PlayerStatsData stats;

	// Token: 0x04001AD9 RID: 6873
	[FieldOffset(Offset = "0x28")]
	[Token(Token = "0x4001AD9")]
	public GamePropertyData props;

	// Token: 0x04001ADA RID: 6874
	[FieldOffset(Offset = "0x30")]
	[Token(Token = "0x4001ADA")]
	public StageFlagData flags;

	// Token: 0x04001ADB RID: 6875
	[FieldOffset(Offset = "0x38")]
	[Token(Token = "0x4001ADB")]
	public TutorialTipData tips;

	// Token: 0x04001ADC RID: 6876
	[FieldOffset(Offset = "0x40")]
	[Token(Token = "0x4001ADC")]
	public BossRushData bossRush;
}
