Skip to content
This repository was archived by the owner on Aug 29, 2022. It is now read-only.

Autosplitter #2

Open
wants to merge 7 commits into
base: autosplitter
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 85 additions & 20 deletions LiveSplit.DarkSoulsIGT/Conditions/Condition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@
using System.Collections.Generic;
using System.Windows.Forms;

namespace LiveSplit.DarkSoulsIGT.Conditions {
namespace LiveSplit.DarkSoulsIGT.Conditions
{

public enum InputTypes {
public enum InputTypes
{
Dropdown,
number
}

public abstract class ConditionBuilder {

public abstract class ConditionBuilder
{
public abstract event OnConditionReadyEventHandler OnConditionReady;

public static List<ConditionBuilder> Builders = new List<ConditionBuilder>()
Expand All @@ -25,7 +27,8 @@ public abstract class ConditionBuilder {
public delegate void OnConditionReadyEventHandler(Condition condition);
}

public class BossDiedBuilder : ConditionBuilder {
public class BossDiedBuilder : ConditionBuilder
{
public override string Name => "Bosses";

public override event OnConditionReadyEventHandler OnConditionReady;
Expand Down Expand Up @@ -56,10 +59,34 @@ public override TableLayoutPanel GetControl()
}
}

public abstract class Condition {
public enum ConditionType : int
{
None = -1,
BossDied,
ItemPickup,
Quitout,
Warp,
}

public abstract class Condition
{
public static readonly string[] Names =
{
"Boss",
"Item",
"Quitout",
"Warp",
};

public event OnConditionCompleteEventHandler OnConditionComplete;

public ConditionType type = ConditionType.None;

public Condition(ConditionType type)
{
this.type = type;
}

public void RaiseOnConditionComplete()
{
OnConditionComplete?.Invoke();
Expand All @@ -72,34 +99,66 @@ public void RaiseOnConditionComplete()
public delegate void OnConditionCompleteEventHandler();
}

public class ConditionList {
public class ConditionList
{

public event OnConditionListCompleteEventHandler OnConditionListComplete;

int current = 0;
List<Condition> conditions;
private int current = 0;
private List<Condition> conditions;

public ConditionList(List<Condition> conditions)
{
this.conditions = conditions;
/*
foreach (var condition in conditions)
{
condition.OnConditionComplete += Condition_OnConditionComplete;
}
*/
}

public void AddCondition(Condition condition)
{
conditions.Add(condition);
if (condition != null)
condition.OnConditionComplete += Condition_OnConditionComplete;
}

public void AddCondition(int index, Condition condition)
{
conditions[index] = condition;
if (condition != null)
condition.OnConditionComplete += Condition_OnConditionComplete;
}

public void RemoveCondition(int index)
{
Condition condition = conditions[index];
condition.Stop();
conditions.RemoveAt(index);
}

public int ConditionCount
{
get { return conditions.Count; }
}

private void Condition_OnConditionComplete()
{
conditions[current].Stop();

if (current == conditions.Count - 1)
if (conditions.Count > 0)
{
OnConditionListComplete?.Invoke();
}
else
{
current += 1;
conditions[current].Start();
conditions[current].Stop();

if (current == conditions.Count - 1)
{
OnConditionListComplete?.Invoke();
}
else
{
current += 1;
conditions[current].Start();
}
}
}

Expand All @@ -114,12 +173,18 @@ public void Reset()

public void Start()
{
conditions[current].Start();
if (conditions.Count > 0)
{
conditions[current].Start();
}
}

public void Stop()
{
conditions[current].Stop();
if (conditions.Count > 0)
{
conditions[current].Stop();
}
}


Expand Down
14 changes: 10 additions & 4 deletions LiveSplit.DarkSoulsIGT/Conditions/OnBossDied.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
using System.Windows.Forms;

namespace LiveSplit.DarkSoulsIGT.Conditions {
class OnBossDied: Condition {
private BossFlag boss;
namespace LiveSplit.DarkSoulsIGT.Conditions
{
class OnBossDied : Condition
{
public BossFlag boss = null;
private bool isDead = false;

public OnBossDied(BossFlag boss): base()
public OnBossDied() : base(ConditionType.BossDied)
{
}

public OnBossDied(BossFlag boss) : this()
{
this.boss = boss;
}
Expand Down
46 changes: 46 additions & 0 deletions LiveSplit.DarkSoulsIGT/Conditions/OnItemPickup.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LiveSplit.DarkSoulsIGT.Conditions
{
class OnItemPickup : Condition
{
public ItemFlag item = null;
bool isObtained = false;


public OnItemPickup() : base(ConditionType.ItemPickup)
{
}

public override void Reset()
{
isObtained = false;
}

public override void Start()
{
// TODO add this
//Model.Instance.OnItemObtained += Instance_OnItemObtained;
}

public override void Stop()
{
// TODO add this
//Model.Instance.OnItemObtained -+= Instance_OnItemObtained;
}

private void Instance_OnItemObtained(ItemFlag item)
{
if (item.FlagID != item.FlagID) return;
if (isObtained) return;

isObtained = true;
RaiseOnConditionComplete();
Stop();
}
}
}
11 changes: 6 additions & 5 deletions LiveSplit.DarkSoulsIGT/Conditions/OnQuitout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
using System.Text;
using System.Threading.Tasks;

namespace LiveSplit.DarkSoulsIGT.Conditions {
class OnQuitout : Condition {
namespace LiveSplit.DarkSoulsIGT.Conditions
{
class OnQuitout : Condition
{
public int total;
int count = 0;
int total = 1;

public OnQuitout(int total = 1)
public OnQuitout(int total = 1) : base(ConditionType.Quitout)
{
this.total = total;
}
Expand All @@ -32,7 +34,6 @@ public override void Stop()
private void Instance_OnQuitout()
{
count++;

if (count >= total)
{
RaiseOnConditionComplete();
Expand Down
44 changes: 44 additions & 0 deletions LiveSplit.DarkSoulsIGT/Conditions/OnWarp.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LiveSplit.DarkSoulsIGT.Conditions
{
class OnWarp : Condition
{
public int total;
int count = 0;

public OnWarp(int total = 1) : base(ConditionType.Warp)
{
this.total = total;
}

public override void Reset()
{
count = 0;
}

public override void Start()
{
//Model.Instance.OnWarp += Instance_OnWarp;
}

public override void Stop()
{
//Model.Instance.OnWarp -= Instance_OnWarp;
}

private void Instance_OnWarp()
{
count++;
if (count >= total)
{
RaiseOnConditionComplete();
Stop();
}
}
}
}
36 changes: 17 additions & 19 deletions LiveSplit.DarkSoulsIGT/DSComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@
using LiveSplit.DarkSoulsIGT.Conditions;
using System.Collections.Generic;

namespace LiveSplit.DarkSoulsIGT {
public class DSComponent : LogicComponent {
namespace LiveSplit.DarkSoulsIGT
{
public class DSComponent : LogicComponent
{
private readonly TimerModel timerModel;
private readonly LiveSplitState state;
private readonly DSSettings settings;

int current = 0;
List<ConditionList> splits;

AutosplitterUI autosplitterUI;

public override string ComponentName => "Dark Souls & Dark Souls: Remastered In-Game Timer";


Expand All @@ -35,6 +39,8 @@ public DSComponent(LiveSplitState state)
};

Model.Instance.OnDarkSoulsHooked += Instance_OnDarkSoulsHooked;

autosplitterUI = new AutosplitterUI(settings.tblAutosplitter, state.Run);
}

private void Split_OnConditionListComplete()
Expand All @@ -45,32 +51,22 @@ private void Split_OnConditionListComplete()
}
}

private void State_OnStart(object sender, EventArgs e)
private void ResetAutosplitter()
{
current = 0;
state.IsGameTimePaused = true;

// TODO get the list from settings
List<ConditionList> fromSettings = new List<ConditionList>();

fromSettings.Add(new ConditionList(new List<Condition>()
{
new OnBossDied(Flags.Bosses[0]),
new OnBossDied(Flags.Bosses[1]),
}));

fromSettings.Add(new ConditionList(new List<Condition>()
{
new OnQuitout(),
}));

splits = fromSettings;
splits = autosplitterUI.splitConditions;

foreach (var split in splits)
{
split.OnConditionListComplete += Split_OnConditionListComplete; ;
split.OnConditionListComplete += Split_OnConditionListComplete;
}
}

private void State_OnStart(object sender, EventArgs e)
{
ResetAutosplitter();
splits[current].Start();
}

Expand All @@ -86,6 +82,8 @@ private void State_OnReset(object sender, TimerPhase value)
}

splits.Clear();

ResetAutosplitter();
}

private void State_OnUndoSplit(object sender, EventArgs e)
Expand Down
Loading