示例#1
0
    private IEnumerator MagicWandCoroutine(WallBase wall)
    {
        MainGameSceneMonoBehavior.Instance.SpeedMultiplier = 0;
        this.GetComponent <Animator>().SetBool("TriggerMagic", true);
        yield return(new WaitForSeconds(0.5f));

        GameObject powerUp = wall.GetRandomPowerUp();

        powerUp.SetActive(true);
        wall.Chest.SetActive(true);
        var TargetPosition = new Vector3(-1.15f, 4.0f, 1.46f);

        //var TargetPosition = new Vector3(-1.15f, 5.51f, -3.54f);
        HelperFunctions.MoveObejectTowardsPosition(this, wall.Chest, TargetPosition, 20.0f);
        yield return(new WaitForSeconds(3.0f));

        MainGameSceneMonoBehavior.Instance.SpeedMultiplier = 1;
        //yield return new WaitForSeconds(1.0f);
        RemoveStoreObjectFromGamePlay();
        //yield return new WaitForSeconds(0.5f);
        wall.ConvertColorBall = true;

        //HelperFunctions.MoveObejectTowardsPosition(this, powerUp, TargetPosition, 20.0f);
        //wall.ColorBallTriggered = true;
        yield return(new WaitForSeconds(1.0f));
        //MainGameSceneMonoBehavior.Instance.AddGemToMeter();
    }
示例#2
0
    public void Setup(WallBase wall)
    {
        this.wall = wall;
        mineButton.onClick.AddListener(() => MineAction());

        RefreshUI();
    }
    public void SelectTile(TaskableBase tile)
    {
        DeselectTile();

        selectedObject = tile;
        selectedIcon.SetActive(true);
        selectedIcon.transform.parent   = selectedObject.transform;
        selectedIcon.transform.position = selectedObject.transform.position;

        BuildingBase buildingObject = tile.GetComponent <BuildingBase>();
        WallBase     wallObject     = tile.GetComponent <WallBase>();
        HaulableBase haulObject     = tile.GetComponent <HaulableBase>();

        if (buildingObject)
        {
            if (buildingObject.currentTask)
            {
                taskActionBarInstance = Instantiate(taskActionBarPrefab, transform);
                taskActionBarInstance.Setup(buildingObject);
            }
            else
            {
                buildingActionBarInstance = Instantiate(buildingActionBarPrefab, transform);
                buildingActionBarInstance.Setup(buildingObject);

                FactoryBase factoryObject = buildingObject.GetComponent <FactoryBase>();
                if (factoryObject)
                {
                    factoryActionBarInstance = Instantiate(factoryActionBarPrefab, transform);
                    factoryActionBarInstance.Setup(factoryObject);
                }
            }
        }
        else if (wallObject)
        {
            if (wallObject.currentTask)
            {
                taskActionBarInstance = Instantiate(taskActionBarPrefab, transform);
                taskActionBarInstance.Setup(wallObject);
            }
            else
            {
                wallActionBarInstance = Instantiate(wallActionBarPrefab, transform);
                wallActionBarInstance.Setup(wallObject);
            }
        }
        else if (haulObject)
        {
            if (haulObject.currentTask)
            {
                taskActionBarInstance = Instantiate(taskActionBarPrefab, transform);
                taskActionBarInstance.Setup(haulObject);
            }
            else
            {
                haulableActionBarInstance = Instantiate(haulableActionBarPrefab, transform);
                haulableActionBarInstance.Setup(haulObject);
            }
        }
    }
示例#4
0
    // Collision check to verify whether the player got hurt by the paint ball
    public void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.CompareTag("WallMidPoint"))
        {
            GameObject wallGO = collision.collider.transform.parent.gameObject;
            if (wallGO != null)
            {
                WallBase wallScript = wallGO.GetComponent <WallBase>();
                if (wallScript != null && !wallScript.IsNonWindowWall && !wallScript.Closed && !wallScript.ColorBallTriggered && !wallScript.ConvertColorBall)
                {
                    GameObject ColorBall = wallScript.GetRandomColorBall();
                    ColorBall.SetActive(true);
                    ColorBall.GetComponent <Animator>().SetBool("Fade", FadeColorBallsOnShoot);
                    ColorBall.transform.parent = ColorBallsParent.transform;
                    SoundController.Instance.GunShot.Play();
                    var TargetPosition = Camera.main.transform.position;
                    //new Vector3(4.15f, 5.51f, -3.54f);
                    HelperFunctions.MoveObejectTowardsPosition(this, ColorBall, TargetPosition, 20.0f);
                    wallScript.ColorBallTriggered = true;
                    //AchievementRecordController.Instance.IncrementMissWindowAchievements();
                    if (mainGameSceneMB.CurrentLevel.isLoadStatic)
                    {
                        wallDestroyer.DestroyAllWallsInList();
                    }
                }
            }
        }
        else if (collision.collider.CompareTag("WinnerWall"))
        {
            mainGameSceneMB.SpeedMultiplier = 0;

            EndGame();
        }
    }
    private IEnumerator CloseWindowCoroutine(WallBase wall)
    {
        Witch.GetComponent <Animator>().SetTrigger("CloseWindow");
        yield return(new WaitForSeconds(0.5f));

        wall.ClosingBegan = true;
        wall.Closed       = true;
    }
    void CheckWallDestroyed(TaskableBase destroyedObject)
    {
        WallBase wall = destroyedObject.GetComponent <WallBase>();

        if (wall)
        {
            if (TilemapManager.instance.wallTilemap.WorldToCell(wall.transform.position) ==
                TilemapManager.instance.depositTilemap.WorldToCell(this.transform.position))
            {
                DestroySelf();
            }
        }
    }
示例#7
0
 public void OnCollisionEnter(Collision collision)
 {
     if (collision.collider.CompareTag("WallMidPoint"))
     {
         GameObject wallGO = collision.collider.transform.parent.gameObject;
         if (wallGO != null)
         {
             WallBase wallScript = wallGO.GetComponent <WallBase>();
             if (wallScript != null && !wallScript.IsNonWindowWall)
             {
                 wallScript.ReportNearMiss = true;
             }
         }
     }
 }
示例#8
0
 public void OnCollisionEnter(Collision collision)
 {
     if (collision.collider.CompareTag("WallMidPoint"))
     {
         GameObject wallGO = collision.collider.transform.parent.gameObject;
         if (wallGO != null)
         {
             WallBase wallScript = wallGO.GetComponent <WallBase>();
             if (wallScript != null && !wallScript.IsNonWindowWall)
             {
                 //SoundController.Instance.Warning.Play();
             }
         }
     }
 }
示例#9
0
 public void OnTriggerEnter(Collider collider)
 {
     if (collider.CompareTag("WallMidPoint"))
     {
         GameObject wallGO = collider.transform.parent.gameObject;
         if (wallGO != null)
         {
             WallBase wallScript = wallGO.GetComponent <WallBase>();
             if (wallScript != null && !wallScript.IsNonWindowWall)
             {
                 StartCoroutine(ShootBackCoroutine(wallScript));
             }
         }
     }
 }
示例#10
0
    public void EvaluateTouchForMainGame(Touch touch)
    {
        Vector3    mPosition = new Vector3(touch.position.x, touch.position.y, 10.0f);
        var        rayOrigin = Camera.main.ScreenToWorldPoint(mPosition);
        RaycastHit hitInfo;

        Physics.Raycast(new Vector3(rayOrigin.x, rayOrigin.y, rayOrigin.z), Camera.main.transform.forward, out hitInfo);
        if (hitInfo.collider != null && hitInfo.collider.gameObject.name == "SwipePad")
        {
            if (touch.phase == TouchPhase.Began)
            {
                startPosition = new Vector3(touch.position.x, touch.position.y, 10.0f);
                hitInfo.collider.transform.parent.parent.parent.GetComponent <WallBase>().ClosingBegan = true;
            }
            else if (touch.phase == TouchPhase.Moved)
            {
                WallBase wallScript = hitInfo.collider.transform.parent.parent.parent.GetComponent <WallBase>();
                if (!wallScript.ColorBallTriggered)
                {
                    wallScript.CheckIfWindowClosed(startPosition);
                }
            }

            else if (touch.phase != TouchPhase.Began && touch.phase != TouchPhase.Stationary)
            {
            }
        }

        //if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Began)
        //{
        RaycastHit gemHitInfo;
        Ray        ray       = Camera.main.ScreenPointToRay(Input.mousePosition);
        bool       raycasted = Physics.Raycast(ray, out gemHitInfo, 100.0f, LayerMask.GetMask("Gem"));

        if (raycasted)
        {
            if (gemHitInfo.collider != null)
            {
                if (gemHitInfo.collider.CompareTag("Gem"))
                {
                    //MainGameSceneMonoBehavior.Instance.AddGemToMeter(5);
                    Destroy(gemHitInfo.collider.gameObject);
                }
            }
        }
        //}
    }
示例#11
0
 // Tells all neighbors to check their surroundings and update their shading
 public virtual void UpdateNeighbors()
 {
     foreach (Vector2 direction in neighborDirections)
     {
         Vector3Int cell    = TilemapManager.instance.wallTilemap.WorldToCell(this.transform.position + (Vector3)direction);
         GameObject cellObj = TilemapManager.instance.wallTilemap.GetInstantiatedObject(cell);
         if (cellObj)
         {
             WallBase neighborWall = cellObj.GetComponent <WallBase>();
             if (neighborWall && neighborWall.isAlive)
             {
                 neighborWall.CheckNeighbors();
                 neighborWall.UpdateShading();
             }
         }
     }
 }
示例#12
0
 public void OnCollisionEnter(Collision collision)
 {
     if (collision.collider.CompareTag("WallMidPoint"))
     {
         WallBase wallScript = collision.collider.transform.parent.GetComponent <WallBase>();
         //if (Instance.TrainerOn)
         if (wallScript != null && wallScript.shouldPauseForTrainer)
         {
             mainGameSceneMB.SpeedMultiplier = 0;
             //TutorialUI.SetActive(true);
             TrainerSkipped = false;
             TutorialAnimator.SetInteger("Gesture", (int)wallScript.tutorialGesture);
             Instruction.text = wallScript.TutorialInstruction;
             float startTime = Time.time;
             SkipButton.SetActive(true);
             StartCoroutine(ResumeAfterFiveSeconds(wallScript, startTime));
         }
     }
 }
示例#13
0
    private IEnumerator ShootBackCoroutine(WallBase wall)
    {
        this.GetComponent <Animator>().SetBool("TriggerBall", true);
        SoundController.Instance.GunShot.Play();
        MainGameSceneMonoBehavior.Instance.SpeedMultiplier = 0;
        Ball.SetActive(true);
        wall.HeadTarget.SetActive(true);
        var TargetPosition = wall.HeadTarget.transform.position;

        HelperFunctions.MoveObejectTowardsPosition(this, Ball, TargetPosition, 20.0f);
        yield return(new WaitForSeconds(1.0f));

        wall.FluidOverHead.SetActive(true);
        wall.HeadTarget.SetActive(false);
        SoundController.Instance.Splash.Play();
        MainGameSceneMonoBehavior.Instance.SpeedMultiplier = 1;
        RemoveStoreObjectFromGamePlay();
        wall.ColorBallTriggered = true;
    }
示例#14
0
    private IEnumerator ResumeAfterFiveSeconds(WallBase wallScript, float startTime)
    {
        while (((wallScript.IsNonWindowWall && !wallScript.ClosingBegan) || (!wallScript.IsNonWindowWall && !wallScript.Closed)) && !TrainerSkipped)
        {
            if (Time.time - startTime > 5.0f)
            {
                break;
            }
            yield return(new WaitForEndOfFrame());
        }

        //yield return new WaitForSeconds(5.0f);
        mainGameSceneMB.SpeedMultiplier = 1;
        Instruction.text = string.Empty;
        TutorialAnimator.SetInteger("Gesture", 0);
        SkipButton.SetActive(false);
        SwitchTrainerOn(false);
        if (SwitchOffCallback != null)
        {
            SwitchOffCallback();
        }
        yield return(new WaitForSeconds(1.0f));
    }
    // Called on events that should refresh the menu
    void RefreshMenus(TaskableBase taskable)
    {
        if (taskable && taskable == selectedObject)
        {
            if (taskable.currentTask)
            {
                // Create or update task action bar
                if (taskActionBarInstance)
                {
                    taskActionBarInstance.RefreshUI();
                }
                else
                {
                    taskActionBarInstance = Instantiate(taskActionBarPrefab, transform);
                    taskActionBarInstance.Setup(selectedObject);
                }

                // clean up building and wall action bars
                if (buildingActionBarInstance)
                {
                    Destroy(buildingActionBarInstance.gameObject);
                }
                if (wallActionBarInstance)
                {
                    Destroy(wallActionBarInstance.gameObject);
                }
                if (factoryActionBarInstance)
                {
                    Destroy(factoryActionBarInstance.gameObject);
                }
                if (haulableActionBarInstance)
                {
                    Destroy(haulableActionBarInstance.gameObject);
                }
            }
            else
            {
                // Clean up task action bar
                if (taskActionBarInstance)
                {
                    Destroy(taskActionBarInstance.gameObject);
                }

                // refresh building and wall action bars
                BuildingBase buildingObject = taskable.GetComponent <BuildingBase>();
                WallBase     wallObject     = taskable.GetComponent <WallBase>();
                HaulableBase haulObject     = taskable.GetComponent <HaulableBase>();
                if (buildingObject)
                {
                    if (buildingActionBarInstance)
                    {
                        buildingActionBarInstance.RefreshUI();
                    }
                    else
                    {
                        buildingActionBarInstance = Instantiate(buildingActionBarPrefab, transform);
                        buildingActionBarInstance.Setup(buildingObject);
                    }
                    FactoryBase factoryObject = buildingObject.GetComponent <FactoryBase>();
                    if (factoryObject)
                    {
                        if (factoryActionBarInstance)
                        {
                            factoryActionBarInstance.RefreshUI();
                        }
                        else
                        {
                            factoryActionBarInstance = Instantiate(factoryActionBarPrefab, transform);
                            factoryActionBarInstance.Setup(factoryObject);
                        }
                    }
                }
                else if (wallObject)
                {
                    if (wallActionBarInstance)
                    {
                        wallActionBarInstance.RefreshUI();
                    }
                    else
                    {
                        wallActionBarInstance = Instantiate(wallActionBarPrefab, transform);
                        wallActionBarInstance.Setup(wallObject);
                    }
                }
                else if (haulObject)
                {
                    if (haulableActionBarInstance)
                    {
                        haulableActionBarInstance.RefreshUI();
                    }
                    else
                    {
                        haulableActionBarInstance = Instantiate(haulableActionBarPrefab, transform);
                        haulableActionBarInstance.Setup(haulObject);
                    }
                }
            }
        }
    }
示例#16
0
        public bool TileCollisions(bool tileCollide = true, bool tileTrigger = true, float wallDrag = 0.9f)
        {
            bool collided = false;

            for (int i = -1; i < 2; i++)
            {
                for (int j = -1; j < 2; j++)
                {
                    //if (position == oldPosition)
                    //    return collided; disabled because may cause issues with OnCollide hooks on some tiles, enable later and try again
                    Point currentTilePos = Center.WorldToTileCoords() + new Point(i, j);
                    if (currentWorld.IsTileInWorld(currentTilePos))
                    {
                        //these are by reference iirc
                        FloorBase floorBase = currentWorld.floorLayer[currentTilePos.X, currentTilePos.Y].Base;
                        if (Collide(currentTilePos, floorBase.CollisionRect(), tileCollide ? floorBase.IsSolid() : false) && tileTrigger)
                        {
                            //TODO TODO
                        }

                        WallBase wallBase = currentWorld.wallLayer[currentTilePos.X, currentTilePos.Y].Base;
                        if (Collide(currentTilePos, wallBase.CollisionRect(), tileCollide ? wallBase.IsSolid() : false) && tileTrigger)
                        {
                            //TODO TODO
                        }

                        ObjectBase objectBase = currentWorld.objectLayer[currentTilePos.X, currentTilePos.Y].Base;
                        if (Collide(currentTilePos, objectBase.CollisionRect(), tileCollide ? objectBase.IsSolid() : false) && tileTrigger)
                        {
                            //TODO //tileBase.OnCollide(this)
                        }
                    }
                }
            }
            return(collided);

            bool Collide(Point location, Rectangle[] rectList, bool solid)
            {
                bool hasCollided = false;

                foreach (Rectangle tileRect in rectList)
                {
                    Rectangle testRect = new Rectangle(location.TileToWorldCoords() + tileRect.Location, tileRect.Size);

                    if (testRect.Intersects(Rect))
                    {
                        if (solid)//if solid, so position changing stuff, else just return
                        {
                            if (testRect.Intersects(OldRect))
                            {                                                                                   //anti-stuck
                                position += Vector2.Normalize((Rect.Center - testRect.Center).ToVector2()) * 2; //multiplier at the ned is the distance it moves (speed)
                            }
                            else
                            {
                                if (testRect.Intersects(new Rectangle(new Point((int)position.X, (int)oldPosition.Y), size.ToPoint())))
                                {
                                    position.X  = oldPosition.X;
                                    velocity.X  = 0;
                                    velocity.Y *= wallDrag;
                                }
                                if (testRect.Intersects(new Rectangle(new Point((int)oldPosition.X, (int)position.Y), size.ToPoint())))
                                {
                                    position.Y  = oldPosition.Y;
                                    velocity.Y  = 0;
                                    velocity.X *= wallDrag;
                                }
                            }
                        }
                        hasCollided = true;
                    }
                }
                if (hasCollided)
                {
                    collided = true;
                }
                return(hasCollided);
            }
        }