public void CheckMoves(List <MoveLink> moveLinks) { List <MoveLink> links = new List <MoveLink>(); links.AddRange(moveLinks); if (currentMove != null) { foreach (MoveLink l in currentMove.links) { if ((l.minTime <= moveTime) && (l.maxTime >= moveTime)) { links.Add(l); } } } int nextMoveIndex = -1; int priority = -100; for (int i = 0; i < links.Count; i++) { MoveLink currentLink = links[i]; if (currentLink.priority >= priority) { bool meetsConditions = false; for (int j = 0; j < currentLink.conditions.Count; j++) { LinkCondition condition = currentLink.conditions[j]; meetsConditions = CheckCondition(condition); if (!meetsConditions) { break; } } if (meetsConditions) { nextMoveIndex = i; priority = currentLink.priority; } } } if (nextMoveIndex != -1) { foreach (LinkCondition l in links[nextMoveIndex].conditions) { ExecuteCondition(l); } StartMove(links[nextMoveIndex].move); } }
public bool CheckMove(MoveLink link) { bool meetsConditions = false; for (int j = 0; j < link.conditions.Count; j++) { LinkCondition condition = link.conditions[j]; meetsConditions = CheckCondition(condition); if (!meetsConditions) { break; } } return(meetsConditions); }
public static SheetLinkData FromJson(JObject obj) { var data = new SheetLinkData() { SheetName = (string)obj["sheet"] }; if (obj["project"] == null) { data.Projection = new IdentityProjection(); } else { data.ProjectedColumnName = (string)obj["project"]; data.Projection = new ColumnProjection() { ProjectedColumnName = data.ProjectedColumnName }; } if (obj["key"] == null) { data.RowProducer = new PrimaryKeyRowProducer(); } else { data.KeyColumnName = (string)obj["key"]; data.RowProducer = new IndexedRowProducer() { KeyColumnName = data.KeyColumnName }; } var when = obj["when"]; if (when != null) { var condition = new LinkCondition(); condition.KeyColumnName = (string)when["key"]; condition.Value = when["value"].ToObject <object>(); data.When = condition; } return(data); }
public void ExecuteCondition(LinkCondition condition) { switch (condition.conditionType) { case ConditionType.inputCondition: if (playerInput != null) { playerInput[condition.buttonIndex].Execute(); } break; case ConditionType.weaponCondition: if (playerInput != null) { int ind = PlayerInputHandler.WEAPON1INDEX; if (playerInput.Weapon2.Name == condition.weapon) { ind = PlayerInputHandler.WEAPON2INDEX; } playerInput[ind].Execute(); } break; case ConditionType.AirJumpCondition: if (playerInput != null) { playerInput.DoubleJump = false; } break; case ConditionType.CanDodge: dodgeCount++; break; case ConditionType.RangeCondition: if (targeter != null && targeter.CurrentTarget != null) { targeter.CurrentTarget.StartAttack(condition.buttonIndex); } break; } }
public static SheetLinkData FromJson(JObject obj) { SheetLinkData data; if (obj["sheet"] != null) { data = new SingleSheetLinkData() { SheetName = (string)obj["sheet"] }; } else if (obj["sheets"] != null) { data = new MultiSheetLinkData() { SheetNames = ((JArray)obj["sheets"]).Select(t => (string)t).ToArray() }; } else { throw new InvalidOperationException("complexlink link must contain either 'sheet' or 'sheets'."); } if (obj["project"] == null) { data.Projection = new IdentityProjection(); } else { data.ProjectedColumnName = (string)obj["project"]; data.Projection = new ColumnProjection() { ProjectedColumnName = data.ProjectedColumnName }; } if (obj["key"] == null) { data.RowProducer = new PrimaryKeyRowProducer(); } else { data.KeyColumnName = (string)obj["key"]; data.RowProducer = new IndexedRowProducer() { KeyColumnName = data.KeyColumnName }; } var when = obj["when"]; if (when != null) { var condition = new LinkCondition(); condition.KeyColumnName = (string)when["key"]; condition.Value = when["value"].ToObject <object>(); data.When = condition; } return(data); }
private bool CheckCondition(LinkCondition condition) { switch (condition.conditionType) { case ConditionType.inputCondition: return(playerInput != null && playerInput[condition.buttonIndex].CanUse()); case ConditionType.holdCondition: return(playerInput != null && playerInput[condition.buttonIndex].Hold() >= condition.holdNumber); case ConditionType.releaseCondition: return(playerInput != null && playerInput[condition.buttonIndex].Hold() <= 0); case ConditionType.groundCondition: if (entityController != null) { return(entityController.Grounded == condition.boolSetting); } return(true); case ConditionType.weaponCondition: if (playerInput != null) { if (playerInput.Weapon1.Name == condition.weapon) { return(playerInput[PlayerInputHandler.WEAPON1INDEX].CanUse()); } else if (playerInput.Weapon2.Name == condition.weapon) { return(playerInput[PlayerInputHandler.WEAPON2INDEX].CanUse()); } } return(false); case ConditionType.weaponHoldCondition: if (playerInput != null) { if (playerInput.Weapon1.Name == condition.weapon) { return(playerInput[PlayerInputHandler.WEAPON1INDEX].Hold() >= condition.holdNumber); } else if (playerInput.Weapon2.Name == condition.weapon) { return(playerInput[PlayerInputHandler.WEAPON2INDEX].Hold() >= condition.holdNumber); } } return(false); case ConditionType.AirJumpCondition: if (playerInput != null) { return(playerInput.DoubleJump); } return(false); case ConditionType.AttackFlagCondition: return(((flagHandler.CommonFlags & CommonFlags.CanAttack) != CommonFlags.None) == condition.boolSetting); case ConditionType.CanDodge: return(maxDodge <= 0 || dodgeCount < maxDodge); case ConditionType.RangeCondition: if (targeter != null) { return((targeter.CurrentTarget != null) && (targeter.CurrentRange == condition.buttonIndex)); } return(false); case ConditionType.AttackTimeCondition: if (targeter != null) { return((targeter.CurrentTarget != null) && (targeter.CurrentTarget.LastAttack(condition.buttonIndex) > condition.TimeCondition)); } return(false); case ConditionType.MoveTimeCondition: return((Time.time - lastMoveTime) > condition.TimeCondition); default: return(false); } }