public Shift(MoveType moveType, Character character, CharacterMark fromMark, CharacterMark toMark, Transform circleCenter) { this.moveType = moveType; this.character = character; this.fromMark = fromMark; this.toMark = toMark; this.circleCenter = circleCenter; }
public IEnumerator DoRotate(Direction direction, CharacterMark skip = null) { var characterMarks = skip == null ? this.characterMarks : this.characterMarks.Except(Enumerable.Repeat(skip, 1)).ToList(); var shifts = new List <Shift>(); for (var i = 0; i < characterMarks.Count; i++) { var current = characterMarks[i]; var nextIndex = direction == Direction.Clockwise ? i + 1 : i - 1; nextIndex += characterMarks.Count; nextIndex %= characterMarks.Count; var next = characterMarks[nextIndex]; var currentRealIndex = this.characterMarks.IndexOf(current); var currentNextIndex = this.characterMarks.IndexOf(next); var isDoSiDo = !((currentRealIndex - 1 + this.characterMarks.Count) % this.characterMarks.Count == currentNextIndex || (currentRealIndex + 1) % this.characterMarks.Count == currentNextIndex); shifts.Add(new Shift(isDoSiDo ? MoveType.DoSiDo : MoveType.Shift, characterMarkSlots[current], current, next, circleCenter)); } foreach (var mark in characterMarks) { characterMarkSlots[mark] = null; } SoundController.main.PlaySound("swap"); var t = 0f; while (t < 1) { foreach (var shift in shifts) { var pt = shift.Interpolate(t); if (shift.character == mainCharacter) { AddIncantationPoint(pt); } } yield return(new WaitForEndOfFrame()); t += Time.deltaTime / moveTime; } foreach (var shift in shifts) { characterMarkSlots[shift.toMark] = shift.character; OnCharacterMoved(shift.character, shift.moveType, shift.fromMark, shift.toMark); yield return(StartCoroutine(CheckBeef(shift.character))); } RefreshIncantation(); }
private void OnCharacterMoved(Character character, MoveType moveType, CharacterMark fromMark, CharacterMark toMark) { if (character == mainCharacter) { currentIncantation.Add(new GameMove() { type = moveType, fromMark = fromMark, toMark = toMark, circle = this }); } }
public static void AddCharacterMark(int head, int tail, CharacterModel model) { var charaMark = new CharacterMark(); charaMark.Brush = model.MarkBrush; charaMark.CharacterId = model.Id; charaMark.HeadCharIndex = head; charaMark.TailCharIndex = tail; charaMark.Parent = model; ModelsComposite.MarkManager.AddMark(charaMark); }
public IEnumerator DoSwap(CharacterMark a, CharacterMark b, bool doSiDo) { var characterDisplayA = characterMarkSlots[a]; var characterDisplayB = characterMarkSlots[b]; characterMarkSlots[a] = null; characterMarkSlots[b] = null; var shiftA = new Shift(doSiDo ? MoveType.DoSiDo : MoveType.Cross, characterDisplayA, a, b, circleCenter); var shiftB = new Shift(doSiDo ? MoveType.DoSiDo : MoveType.Cross, characterDisplayB, b, a, circleCenter); SoundController.main.PlaySound("swap"); var t = 0f; while (t < 1) { var ptA = shiftA.Interpolate(t); var ptB = shiftB.Interpolate(t); if (characterDisplayA == mainCharacter) { AddIncantationPoint(ptA); } if (characterDisplayB == mainCharacter) { AddIncantationPoint(ptB); } yield return(new WaitForEndOfFrame()); t += Time.deltaTime / moveTime; } characterMarkSlots[a] = characterDisplayB; characterMarkSlots[b] = characterDisplayA; OnCharacterMoved(characterDisplayA, doSiDo ? MoveType.DoSiDo : MoveType.Cross, a, b); OnCharacterMoved(characterDisplayB, doSiDo ? MoveType.DoSiDo : MoveType.Cross, b, a); yield return(StartCoroutine(CheckBeef(characterDisplayA))); yield return(StartCoroutine(CheckBeef(characterDisplayB))); RefreshIncantation(); }
public IEnumerator DoRotate(Direction direction, CharacterMark skip = null) { var characterMarks = skip == null ? this.characterMarks : this.characterMarks.Except(Enumerable.Repeat(skip, 1)).ToList(); var shifts = new List<Shift>(); for (var i = 0; i < characterMarks.Count; i++) { var current = characterMarks[i]; var nextIndex = direction == Direction.Clockwise ? i + 1 : i - 1; nextIndex += characterMarks.Count; nextIndex %= characterMarks.Count; var next = characterMarks[nextIndex]; var currentRealIndex = this.characterMarks.IndexOf(current); var currentNextIndex = this.characterMarks.IndexOf(next); var isDoSiDo = !((currentRealIndex - 1 + this.characterMarks.Count) % this.characterMarks.Count == currentNextIndex || (currentRealIndex + 1) % this.characterMarks.Count == currentNextIndex); shifts.Add(new Shift(isDoSiDo ? MoveType.DoSiDo : MoveType.Shift, characterMarkSlots[current], current, next, circleCenter)); } foreach (var mark in characterMarks) { characterMarkSlots[mark] = null; } SoundController.main.PlaySound("swap"); var t = 0f; while (t < 1) { foreach (var shift in shifts) { var pt = shift.Interpolate(t); if (shift.character == mainCharacter) { AddIncantationPoint(pt); } } yield return new WaitForEndOfFrame(); t += Time.deltaTime / moveTime; } foreach (var shift in shifts) { characterMarkSlots[shift.toMark] = shift.character; OnCharacterMoved(shift.character, shift.moveType, shift.fromMark, shift.toMark); yield return StartCoroutine(CheckBeef(shift.character)); } RefreshIncantation(); }
public IEnumerator DoSwap(CharacterMark a, CharacterMark b, bool doSiDo) { var characterDisplayA = characterMarkSlots[a]; var characterDisplayB = characterMarkSlots[b]; characterMarkSlots[a] = null; characterMarkSlots[b] = null; var shiftA = new Shift(doSiDo ? MoveType.DoSiDo : MoveType.Cross, characterDisplayA, a, b, circleCenter); var shiftB = new Shift(doSiDo ? MoveType.DoSiDo : MoveType.Cross, characterDisplayB, b, a, circleCenter); SoundController.main.PlaySound("swap"); var t = 0f; while (t < 1) { var ptA = shiftA.Interpolate(t); var ptB = shiftB.Interpolate(t); if (characterDisplayA == mainCharacter) { AddIncantationPoint(ptA); } if (characterDisplayB == mainCharacter) { AddIncantationPoint(ptB); } yield return new WaitForEndOfFrame(); t += Time.deltaTime / moveTime; } characterMarkSlots[a] = characterDisplayB; characterMarkSlots[b] = characterDisplayA; OnCharacterMoved(characterDisplayA, doSiDo ? MoveType.DoSiDo : MoveType.Cross, a, b); OnCharacterMoved(characterDisplayB, doSiDo ? MoveType.DoSiDo : MoveType.Cross, b, a); yield return StartCoroutine(CheckBeef(characterDisplayA)); yield return StartCoroutine(CheckBeef(characterDisplayB)); RefreshIncantation(); }
public Shift(MoveType moveType, Character character, CharacterMark fromMark, CharacterMark toMark, Transform circleCenter ) { this.moveType = moveType; this.character = character; this.fromMark = fromMark; this.toMark = toMark; this.circleCenter = circleCenter; }