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

// Token: 0x02000129 RID: 297
[Token(Token = "0x2000129")]
public class GameSave
{
	// Token: 0x17000064 RID: 100
	// (get) Token: 0x06000F10 RID: 3856 RVA: 0x00023B8C File Offset: 0x00021D8C
	[Token(Token = "0x17000064")]
	[JsonIgnore]
	public bool IsStandardMode
	{
		[Token(Token = "0x6000F10")]
		[Address(RVA = "0x54A320", Offset = "0x549120", VA = "0x18054A320")]
		get
		{
			return this.basic.difficulty == GameDifficulty.Standard;
		}
	}

	// Token: 0x06000F11 RID: 3857 RVA: 0x00023BB0 File Offset: 0x00021DB0
	[Token(Token = "0x6000F11")]
	[Address(RVA = "0x54A050", Offset = "0x548E50", VA = "0x18054A050")]
	[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;
		base..ctor();
	}

	// Token: 0x06000F12 RID: 3858 RVA: 0x00023C08 File Offset: 0x00021E08
	[Token(Token = "0x6000F12")]
	[Address(RVA = "0x54A190", Offset = "0x548F90", VA = "0x18054A190")]
	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;
		base..ctor();
		GameSaveBasicData gameSaveBasicData2 = this.basic;
		this.dataVersion = (int)((ulong)46L);
		gameSaveBasicData2.dataIndex = dataIndex;
		this.basic.difficulty = difficulty;
		this.UpdateSaveTimeStamp();
	}

	// Token: 0x06000F13 RID: 3859 RVA: 0x00023C94 File Offset: 0x00021E94
	[Token(Token = "0x6000F13")]
	[Address(RVA = "0x549ED0", Offset = "0x548CD0", VA = "0x180549ED0")]
	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: 0x06000F14 RID: 3860 RVA: 0x000020D3 File Offset: 0x000002D3
	[Token(Token = "0x6000F14")]
	[Address(RVA = "0x549FD0", Offset = "0x548DD0", VA = "0x180549FD0")]
	public void UpdateSaveTimeStamp()
	{
		throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
	}

	// Token: 0x04001993 RID: 6547
	[FieldOffset(Offset = "0x10")]
	[Token(Token = "0x4001993")]
	public int dataVersion;

	// Token: 0x04001994 RID: 6548
	[FieldOffset(Offset = "0x18")]
	[Token(Token = "0x4001994")]
	public GameSaveBasicData basic;

	// Token: 0x04001995 RID: 6549
	[FieldOffset(Offset = "0x20")]
	[Token(Token = "0x4001995")]
	public PlayerStatsData stats;

	// Token: 0x04001996 RID: 6550
	[FieldOffset(Offset = "0x28")]
	[Token(Token = "0x4001996")]
	public GamePropertyData props;

	// Token: 0x04001997 RID: 6551
	[FieldOffset(Offset = "0x30")]
	[Token(Token = "0x4001997")]
	public StageFlagData flags;

	// Token: 0x04001998 RID: 6552
	[FieldOffset(Offset = "0x38")]
	[Token(Token = "0x4001998")]
	public TutorialTipData tips;
}
