예제 #1
0
 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;
 }
예제 #2
0
    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();
    }
예제 #3
0
 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);
        }
예제 #5
0
        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);
        }
예제 #6
0
    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();
    }
예제 #7
0
	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();
	}
예제 #8
0
	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();
	}
예제 #9
0
		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;
		}
예제 #10
0
	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 }); 
		}
	}