public static Condition checkMissionResult(PuzzleManager puzzleManager, PuzzleManager.PuzzleObject catIsHolding, PuzzleManager.PuzzleObject dogIsHolding) { var needsToCheckTrees = false; for (int i = 0; i < PuzzleManager.stageInfo.colCount; i++) { for (int j = 0; j < PuzzleManager.stageInfo.rowCount; j++) { if (puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.GOAL_CAT && (puzzleManager.catPosition[0] != i || puzzleManager.catPosition[1] != j)) { return(Condition.CAT_NOT_IN_GOAL_FAIL); } if (puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.GOAL_DOG && (puzzleManager.dogPosition[0] != i || puzzleManager.dogPosition[1] != j)) { return(Condition.DOG_NOT_IN_GOAL_FAIL); } if (puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.BIRD || puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.SQUIRREL || catIsHolding == PuzzleManager.PuzzleObject.BIRD || catIsHolding == PuzzleManager.PuzzleObject.SQUIRREL || dogIsHolding == PuzzleManager.PuzzleObject.BIRD || dogIsHolding == PuzzleManager.PuzzleObject.SQUIRREL) { return(Condition.ANIMAL_NOT_IN_GOAL_FAIL); } if (puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.EGG || catIsHolding == PuzzleManager.PuzzleObject.EGG || dogIsHolding == PuzzleManager.PuzzleObject.EGG) { return(Condition.ITEM_NOT_IN_GOAL_FAIL); } if (puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.ANIMAL_POINT || puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD || puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X2 || puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X3 || puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.ANIMAL_POINT_SQUIRREL) { needsToCheckTrees = true; } } } if (needsToCheckTrees) { for (int i = 0; i < PuzzleManager.stageInfo.colCount; i++) { for (int j = 0; j < PuzzleManager.stageInfo.rowCount; j++) { if (puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.TREE_WITH_BIRD || puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X2 || puzzleManager.kindMatrix[i, j] == PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X3) { return(Condition.ANIMAL_NOT_IN_GOAL_FAIL); } } } } return(Condition.SUCCESS); }
public void instantiateObjectFromKind(PuzzleManager.PuzzleObject obj, int i, int j) { if (prefabDict.ContainsKey(obj)) { instantiateObject(prefabDict[obj], i, j); } }
public static PuzzleManager.PuzzleObject WhatRemainsAfterRemovingObject(PuzzleManager.PuzzleObject obj) { // Can remove from Animal Delivery Point if (obj == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X3) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X2); } if (obj == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X2) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD); } if (obj == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT); } if (obj == PuzzleManager.PuzzleObject.ANIMAL_POINT_SQUIRREL) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT); } // Can remove from Item Delivery Point if (obj == PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X3) { return(PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X2); } if (obj == PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X2) { return(PuzzleManager.PuzzleObject.ITEM_POINT_EGG); } if (obj == PuzzleManager.PuzzleObject.ITEM_POINT_EGG) { return(PuzzleManager.PuzzleObject.ITEM_POINT); } // Can remove from Tree if (obj == PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X3) { return(PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X2); } if (obj == PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X2) { return(PuzzleManager.PuzzleObject.TREE_WITH_BIRD); } if (obj == PuzzleManager.PuzzleObject.TREE_WITH_BIRD) { return(PuzzleManager.PuzzleObject.TREE_UPPER); } // Can remove from floor return(PuzzleManager.PuzzleObject.NTH); }
public static PuzzleManager.PuzzleObject CanCatGrab(PuzzleManager.PuzzleObject obstacle) { // Can grab from floor if ((new List <PuzzleManager.PuzzleObject> { PuzzleManager.PuzzleObject.BIRD, PuzzleManager.PuzzleObject.SQUIRREL, PuzzleManager.PuzzleObject.EGG, // TODO }).Contains(obstacle)) { return(obstacle); } // Can grab bird from place if ((new List <PuzzleManager.PuzzleObject> { PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD, PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X2, PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X3, PuzzleManager.PuzzleObject.TREE_WITH_BIRD, PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X2, PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X3, // TODO }).Contains(obstacle)) { return(PuzzleManager.PuzzleObject.BIRD); } // Can grab squirrel from place if ((new List <PuzzleManager.PuzzleObject> { PuzzleManager.PuzzleObject.ANIMAL_POINT_SQUIRREL, // TODO }).Contains(obstacle)) { return(PuzzleManager.PuzzleObject.SQUIRREL); } // Can grab egg from place if ((new List <PuzzleManager.PuzzleObject> { PuzzleManager.PuzzleObject.ITEM_POINT_EGG, PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X2, PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X3, // TODO }).Contains(obstacle)) { return(PuzzleManager.PuzzleObject.EGG); } // Can't grab return(PuzzleManager.PuzzleObject.NTH); }
public void resetMissionState() { missionFailed = false; Destroy(catIsHolding); catIsHoldingKind = PuzzleManager.PuzzleObject.NTH; catHolding.color = new Color(1, 1, 1, 0); Destroy(dogIsHolding); dogIsHoldingKind = PuzzleManager.PuzzleObject.NTH; dogHolding.color = new Color(1, 1, 1, 0); if (catArrow) { catArrow.gameObject.SetActive(false); } if (dogArrow) { dogArrow.gameObject.SetActive(false); } catIsWaiting = false; dogIsWaiting = false; }
public static char CanDogMove(PuzzleManager.PuzzleObject obstacle) { // Is blocked by if ((new List <PuzzleManager.PuzzleObject> { PuzzleManager.PuzzleObject.BLOCK, PuzzleManager.PuzzleObject.ANIMAL_POINT, PuzzleManager.PuzzleObject.ANIMAL_POINT_SQUIRREL, PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD, PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X2, PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X3, PuzzleManager.PuzzleObject.ITEM_POINT, PuzzleManager.PuzzleObject.ITEM_POINT_EGG, PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X2, PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X3, PuzzleManager.PuzzleObject.CAT, PuzzleManager.PuzzleObject.BIRD, PuzzleManager.PuzzleObject.SQUIRREL, PuzzleManager.PuzzleObject.PUPPER, PuzzleManager.PuzzleObject.TREE_LOWER, PuzzleManager.PuzzleObject.TREE_UPPER, PuzzleManager.PuzzleObject.TREE_WITH_BIRD, PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X2, PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X3, // TODO }).Contains(obstacle)) { return('N'); } // Can push if ((new List <PuzzleManager.PuzzleObject> { PuzzleManager.PuzzleObject.PUSHABLE, // TODO }).Contains(obstacle)) { return('P'); } // Can move return('Y'); }
IEnumerator grabDog(char direction) { int[] pos = getDogDestination(direction); if (Utils.IsDogInCorner(puzzleManager, direction)) { Debug.Log("Dog can't grab"); missionFailed = true; if (dogIsHolding == null) { missionResult = MissionResult.Condition.DOG_GRAB_FAIL; } else { missionResult = MissionResult.Condition.DOG_PLACE_FAIL; } yield return(moveDogFailTransition(direction)); // Dog can't grab } else { var oldPos = puzzleManager.dogReference.transform.position; switch (direction) { case 'U': for (var i = 0; i < 5; i++) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x, oldPos.y + i / 10f * puzzleManager.cellDistance, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10f)); } break; case 'L': for (var i = 0; i < 5; i++) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x - i / 10f * puzzleManager.cellDistance, oldPos.y, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10)); } break; case 'R': for (var i = 0; i < 5; i++) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x + i / 10f * puzzleManager.cellDistance, oldPos.y, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10)); } break; case 'D': for (var i = 0; i < 5; i++) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x, oldPos.y - i / 10f * puzzleManager.cellDistance, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10)); } break; } if (dogIsHolding == null) { var obstacle = puzzleManager.kindMatrix[pos[0], pos[1]]; var canGrab = Utils.CanDogGrab(obstacle); if (canGrab != PuzzleManager.PuzzleObject.NTH) { var obstacleObj = puzzleManager.prefabDict[canGrab]; var obstacleSprite = obstacleObj.GetComponent <SpriteRenderer>(); var whatRemains = Utils.WhatRemainsAfterRemovingObject(obstacle); dogIsHolding = Instantiate(obstacleObj, new Vector3(100, 100, 100), Quaternion.identity); dogIsHoldingKind = canGrab; puzzleManager.kindMatrix[pos[0], pos[1]] = whatRemains; dogHolding.color = new Color(obstacleSprite.color.r, obstacleSprite.color.g, obstacleSprite.color.b, .5f); dogHolding.sprite = obstacleSprite.sprite; Destroy(puzzleManager.objMatrix[pos[0], pos[1]]); puzzleManager.instantiateObjectFromKind(whatRemains, pos[0], pos[1]); } else { // Dog can't grab this Debug.Log("Dog can't grab this"); missionFailed = true; missionResult = MissionResult.Condition.DOG_GRAB_FAIL; puzzleManager.dogAnim.SetBool("IsDizzy", true); } } else { var canPlace = Utils.CanPlaceObject(dogIsHoldingKind, puzzleManager.kindMatrix[pos[0], pos[1]]); if (canPlace != PuzzleManager.PuzzleObject.NTH) { Destroy(puzzleManager.objMatrix[pos[0], pos[1]]); puzzleManager.kindMatrix[pos[0], pos[1]] = canPlace; puzzleManager.instantiateObjectFromKind(canPlace, pos[0], pos[1]); Destroy(dogIsHolding); dogIsHoldingKind = PuzzleManager.PuzzleObject.NTH; dogHolding.color = new Color(1, 1, 1, 0); } else { // Dog can't place here Debug.Log("Dog can't place here"); missionFailed = true; missionResult = MissionResult.Condition.DOG_PLACE_FAIL; puzzleManager.dogAnim.SetBool("IsDizzy", true); } } switch (direction) { case 'U': for (var i = 4; i >= 0; i--) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x, oldPos.y + i / 10f * puzzleManager.cellDistance, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10f)); } break; case 'L': for (var i = 4; i >= 0; i--) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x - i / 10f * puzzleManager.cellDistance, oldPos.y, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10)); } break; case 'R': for (var i = 4; i >= 0; i--) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x + i / 10f * puzzleManager.cellDistance, oldPos.y, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10)); } break; case 'D': for (var i = 4; i >= 0; i--) { puzzleManager.dogReference.transform.position = new Vector3( oldPos.x, oldPos.y - i / 10f * puzzleManager.cellDistance, oldPos.z ); yield return(new WaitForSeconds(secondsPerMove / 10)); } break; } } }
public static PuzzleManager.PuzzleObject CanPlaceObject(PuzzleManager.PuzzleObject obj, PuzzleManager.PuzzleObject target) { // Can place on floor if ((new List <PuzzleManager.PuzzleObject> { PuzzleManager.PuzzleObject.NTH, // TODO }).Contains(target)) { return(obj); } // Can place on Animal Delivery Point if (target == PuzzleManager.PuzzleObject.ANIMAL_POINT) { if (obj == PuzzleManager.PuzzleObject.SQUIRREL) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT_SQUIRREL); } if (obj == PuzzleManager.PuzzleObject.BIRD) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD); } } if (target == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD && obj == PuzzleManager.PuzzleObject.BIRD) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X2); } if (target == PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X2 && obj == PuzzleManager.PuzzleObject.BIRD) { return(PuzzleManager.PuzzleObject.ANIMAL_POINT_BIRD_X3); } // Can place on Item Delivery Point if (target == PuzzleManager.PuzzleObject.ITEM_POINT) { if (obj == PuzzleManager.PuzzleObject.EGG) { return(PuzzleManager.PuzzleObject.ITEM_POINT_EGG); } } if (target == PuzzleManager.PuzzleObject.ITEM_POINT_EGG && obj == PuzzleManager.PuzzleObject.EGG) { return(PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X2); } if (target == PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X2 && obj == PuzzleManager.PuzzleObject.EGG) { return(PuzzleManager.PuzzleObject.ITEM_POINT_EGG_X3); } // Can place on tree if (target == PuzzleManager.PuzzleObject.TREE_UPPER && obj == PuzzleManager.PuzzleObject.BIRD) { return(PuzzleManager.PuzzleObject.TREE_WITH_BIRD); } if (target == PuzzleManager.PuzzleObject.TREE_WITH_BIRD && obj == PuzzleManager.PuzzleObject.BIRD) { return(PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X2); } if (target == PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X2 && obj == PuzzleManager.PuzzleObject.BIRD) { return(PuzzleManager.PuzzleObject.TREE_WITH_BIRD_X3); } // Can't place return(PuzzleManager.PuzzleObject.NTH); }