コード例 #1
0
    public void ChangeState(HexStates state)
    {
        if (state == this.state)
        {
            Debug.LogError("This is already my state!");
            return;
        }
        this.state = state;
        switch (state)
        {
        case HexStates.PotentiallyFull:
            MarkAsPotentiallyFull();
            break;

        case HexStates.AwaitingFill:
            MarkAsAwiatingFill();
            break;

        case HexStates.Full:
            Fill();
            break;

        case HexStates.Hard:
            Harden();
            break;

        case HexStates.Empty:
            MarkAsEmpty();
            break;
        }
    }
コード例 #2
0
ファイル: HexTile.cs プロジェクト: Etmer/DragonRTS
 public HexTile(HexTile tile, GameObject worldObject, TileData data)
 {
     tileType             = TileType.Default;
     _currentState        = HexStates.Idle;
     _worldtransform      = worldObject.transform;
     _defaultPosition     = _worldtransform.position;
     _renderer            = worldObject.GetComponentInChildren <MeshRenderer>();
     _material            = _renderer.material;
     _highlightedPosition = _defaultPosition + Vector3.up * 0.1f;
     _colorCoding         = tile._colorCoding;
     highestPoint         = _defaultPosition + Vector3.up * (data.meshSizeY - MapGenerator.DefaultTile.meshSizeY / 2);
 }
コード例 #3
0
ファイル: Hex.cs プロジェクト: Semimartian/Hexpose
    public void ChangeState(HexStates state)
    {
        if (state == this.state)
        {
            Debug.LogError("This is already my state!");
            return;
        }
        this.state = state;
        switch (state)
        {
        case HexStates.Path:
            MarkAsPotentiallyFull();
            break;

        case HexStates.AwaitingFill:
            StartCoroutine(MarkAsAwiatingFill());
            break;

        case HexStates.Full:
            Fill();
            break;

        /* case HexStates.Hard:
         *   Harden();
         *   break;*/
        case HexStates.Empty:
            MarkAsEmpty();
            break;

        case HexStates.MarkedForFailure:
            MarkForFailure();
            break;

        case HexStates.FullOfFailure:
            FillWithFailure();
            break;

        case HexStates.Bombed:
            MarkForBombing();
            break;
        }
    }
コード例 #4
0
    public void FloorCheck()
    {
        isOnAPotentialWall = false;
        Vector3 overlapSpherePosition = myTransform.position;

        overlapSpherePosition.y = Hex.HEX_LOW_Y;
        Collider[] overlappingColliders =
            Physics.OverlapSphere(overlapSpherePosition, overlapSphereCollider.radius);
        for (int i = 0; i < overlappingColliders.Length; i++)
        {
            Transform t = overlappingColliders[i].transform;
            // if (t.parent != null)
            {
                Hex hex = t /*.parent*/.GetComponent <Hex>();
                if (hex != null)
                {
                    HexStates hexState = hex.State;
                    switch (hexState)
                    {
                    case HexStates.AwaitingFill:
                        isOnAPotentialWall = true; break;

                    /*case HexStates.Full:
                     *  Collide(); break;*/
                    case HexStates.Empty:

                        if (hex.Specialty != HexSpecialties.Enemy)
                        {
                            hex.ChangeState(HexStates.Path);
                        }
                        break;

                        /*case HexStates.Hard:
                         *   hex.ChangeState(HexStates.Empty); break;*/
                    }
                }
            }
        }
    }
コード例 #5
0
 private void OnCollisionEnter(Collision collision)
 {
     //return;
     if (collision.collider != null && collision.collider.transform.parent != null)
     {
         Hex hex = collision.collider.transform.parent.GetComponent <Hex>();
         if (hex != null)
         {
             HexStates hexState = hex.State;
             if (hexState == HexStates.Full)
             {
                 Collide();
             }
             else if (hexState == HexStates.Empty)
             {
                 hex.ChangeState(HexStates.PotentiallyFull);
             }
             else if (hexState == HexStates.Hard)
             {
                 hex.ChangeState(HexStates.Empty);
             }
         }
     }
 }
コード例 #6
0
    public void FloorCheck(List <Vector3> positions, int currentPositionIndex)
    {
        bool changed = false;

        int count = positions.Count;

        //Debug.Log("positions to check: " + count);
        overlapSphereCollider.transform.position = positions[count - 1];
        for (int j = 0; j < count; j++)
        {
            Vector3 top    = positions[j];
            Vector3 bottom = positions[j] + new Vector3(0, -3, 0);

            Collider[] overlappingColliders = Physics.OverlapCapsule
                                                  (bottom, top, overlapSphereCollider.radius);

            //Debug.Log("positions[j]: " + positions[j]);
            // Debug.Log("overlapSphereCollider.radius: " + overlapSphereCollider.radius);

            //Debug.Log("overlappingColliders.Length: " + overlappingColliders.Length);
            for (int i = 0; i < overlappingColliders.Length; i++)
            {
                Transform t = overlappingColliders[i].transform;
                //if (t.parent != null)
                {
                    Hex hex = t /*.parent*/.GetComponent <Hex>();
                    if (hex != null)
                    {
                        HexStates hexState = hex.State;
                        if (hexState != HexStates.Full)//TODO: I dont like the full/enemy deal here
                        {
                            if (hex.Specialty == HexSpecialties.Enemy)
                            {
                                Debug.Log("An enemy is touching a sensitive hexagon...");
                                HexMap.InfectPlayerPath(hex);
                                return;
                            }


                            switch (hexState)
                            {
                            /* case HexStates.AwaitingFill:
                             *   isOnAPotentialWall = true; break;*/
                            /*case HexStates.Full:
                             *  Collide(); break;*/
                            case HexStates.Empty:
                            {
                                hex.ChangeState(HexStates.Path);
                                changed = true;
                            }
                            break;
                            }

                            Vector3 hexPosition = hex.transform.position;
                            hexPosition.y          = Hex.HEX_PRESSED_Y;
                            hex.transform.position = hexPosition;
                        }
                    }
                    else
                    {
                        HexBomb bomb = t /*.parent*/.GetComponent <HexBomb>();
                        if (bomb != null)
                        {
                            bomb.Explode();
                        }
                    }
                }
            }
        }

        if (changed)
        {
            SoundManager.PlayOneShotSoundAt(SoundNames.HexPressed, positions[currentPositionIndex]);// t.position);

            if (HexMap.CalculateFill())
            {
                SoundManager.PlayOneShotSoundAt(SoundNames.AllGlocken, positions[currentPositionIndex]);
            }
        }
    }
コード例 #7
0
ファイル: HexTile.cs プロジェクト: Etmer/DragonRTS
    private void ChangeState(HexStates desiredState)
    {
        if (desiredState == _currentState)
        {
            return;
        }

        switch (desiredState)
        {
        case HexStates.Idle:
            if (_currentState == HexStates.Highlighted || _currentState == HexStates.Deselected)
            {
                Lift(false);
                ChangeColor(false);
                _currentState = desiredState;
                break;
            }
            break;

        case HexStates.Highlighted:
            if (_currentState == HexStates.Idle)
            {
                _currentColor = _colorCoding.highLightColor;
                Lift(true);
                ChangeColor(true);
                _currentState = desiredState;
                break;
            }
            if (_currentState == HexStates.Selected)
            {
                break;
            }
            break;

        case HexStates.Selected:
            if (_currentState == HexStates.Idle)
            {
                Lift(true);
                _currentColor = _colorCoding.selectedColor;
                ChangeColor(true);
                _currentState = desiredState;
                break;
            }
            else if (_currentState == HexStates.Highlighted)
            {
                _currentColor = _colorCoding.selectedColor;
                ChangeColor(true);
                _currentState = desiredState;
                break;
            }
            break;

        case HexStates.Deselected:
            if (_currentState == HexStates.Selected)
            {
                Lift(false);
                ChangeColor(false);
                _currentState = desiredState;
                ChangeState(HexStates.Idle);
                break;
            }
            break;
        }
    }
コード例 #8
0
    private IEnumerator PrepareHexExplosionCoroutine(Hex origin)
    {
        SoundManager.PlayOneShotSoundAt(SoundNames.BombActivation, origin.transform.position);
        HexStates  statePostExplosion = HexStates.Full;
        int        range        = 4;
        float      waitTime     = 0.15f;
        List <Hex> hexesInRange = new List <Hex>(6);

        hexesInRange.Add(origin);


        if (origin.State != statePostExplosion)
        {
            origin.ChangeState(HexStates.Bombed);
        }
        for (int i = 0; i < range; i++)
        {
            int count = hexesInRange.Count;
            for (int j = 0; j < count; j++)
            {
                Hex[] neighbours = hexesInRange[j].GetNeighbours();
                for (int n = 0; n < neighbours.Length; n++)
                {
                    Hex neighbour = neighbours[n];
                    //30.9 if (neighbour.State == HexStates.Empty)// || neighbour.State == HexStates.PotentiallyFull )
                    if (neighbour.State != statePostExplosion && neighbour.State != HexStates.Bombed)
                    {
                        neighbour.ChangeState(HexStates.Bombed);
                    }
                    hexesInRange.Add(neighbour);
                }
            }
        }
        //ANNNND Again
        hexesInRange.Clear();
        hexesInRange.Add(origin);

        if (origin.State != statePostExplosion)
        {
            origin.ChangeState(statePostExplosion);
        }
        for (int i = 0; i < range; i++)
        {
            yield return(new WaitForSeconds(waitTime));

            int count = hexesInRange.Count;
            for (int j = 0; j < count; j++)
            {
                Hex[] neighbours = hexesInRange[j].GetNeighbours();
                for (int n = 0; n < neighbours.Length; n++)
                {
                    Hex neighbour = neighbours[n];
                    //30.9 if (neighbour.State == HexStates.Empty)// || neighbour.State == HexStates.PotentiallyFull )
                    if (neighbour.State != statePostExplosion)
                    {
                        neighbour.ChangeState(statePostExplosion);
                    }
                    hexesInRange.Add(neighbour);
                }
                if (HexMap.CalculateFill())
                {
                    SoundManager.PlayOneShotSoundAt(SoundNames.AllGlocken, origin.transform.position);
                }
                KillEnemiesOnTopOfFullHexes();
            }
        }

        UpdateFullPercentage();

        //awaitingFill = true;
    }