示例#1
0
    public override void SupportStar(StarElement friendStar)
    {
        if (CanSupport == false)
        {
            return;
        }
        else
        {
            CanSupport = false;
            coldTime   = Random.Range(2.0f, 6.0f);
        }

        int randomTroopNum = GetRandomTroopNum();

        if (randomTroopNum > 0)
        {
            Transform  currentBornPos = m_bornPoint[Random.Range(0, m_bornPoint.Length)];
            GameObject newShip        = Instantiate(m_shipPrefab) as GameObject;
            if (newShip)
            {
                ShipElement shipElement = newShip.GetComponent <ShipElement>();
                shipElement.m_StarFrom     = this;
                shipElement.m_StarTo       = friendStar;
                shipElement.m_ShipSize     = (ShipElement.ShipSize)randomTroopNum;
                shipElement.m_ShipTroopNum = randomTroopNum;
                shipElement.m_FlySpeed     = shipElement.m_SurrondSpeed = 4 + Random.Range(0.0f, 5.0f);
                newShip.transform.position = currentBornPos.position;
                ((TestShip)shipElement).SetShipScaleBySize();

                this.m_TroopNum -= randomTroopNum;
            }
        }

        ResetSize();
    }
示例#2
0
        private bool CanBeginSurrond(ShipElement ship, StarElement otherStar)
        {
            Vector3 crossV1               = otherStar.transform.position - ship.transform.position;
            Vector3 crossV2               = new Vector3(crossV1.x, crossV1.y + 1, crossV1.z);//ship.transform.up;
            Vector3 crossResult           = Vector3.Cross(crossV1, crossV2) * m_Ship.m_SurrondDirection;
            Vector3 plane2TargetDirection = m_Ship.m_StarTo.transform.position - m_Ship.transform.position;

            return(!CanResumeMove(plane2TargetDirection, crossResult));
        }
示例#3
0
        public override void EnterOtherStar(Collider collider)
        {
            StarElement otherStar = collider.gameObject.GetComponent <StarElement>();

            SetShipSurrondDirection(otherStar);
            if (CanBeginSurrond(m_Ship, otherStar))            //Change To Surrond
            {
                m_Ship.m_SurrondStar    = collider.gameObject.GetComponent <StarElement>();
                m_Ship.transform.parent = otherStar.transform;
                m_StateManager.ChangeStateTo(ShipState.Surrond);
            }
        }
示例#4
0
        private void SetShipSurrondDirection(StarElement otherStar)
        {
            Vector3 crossV1     = otherStar.transform.position - m_Ship.transform.position;
            Vector3 crossV2     = new Vector3(crossV1.x, crossV1.y + 1, crossV1.z);         //ship.transform.up;
            Vector3 crossResult = Vector3.Cross(crossV1, crossV2) * m_Ship.m_SurrondSpeed;
            Vector3 ship2Target = m_Ship.m_StarTo.transform.position - this.m_Ship.transform.position;
            float   distance1   = (ship2Target - crossResult * 1).sqrMagnitude;
            float   distance2   = (ship2Target - crossResult * (-1)).sqrMagnitude;

            if (distance1 < distance2)
            {
                m_Ship.m_SurrondDirection = 1;
            }
            else
            {
                m_Ship.m_SurrondDirection = -1;
            }
        }
示例#5
0
    public override void SupportStar(StarElement friendStar, int supportNum)
    {
        int troopNum = supportNum;

        if (troopNum > 0)
        {
            Transform  currentBornPos = m_bornPoint[Random.Range(0, m_bornPoint.Length)];
            GameObject newShip        = Instantiate(m_shipPrefab) as GameObject;
            if (newShip)
            {
                ShipElement shipElement = newShip.GetComponent <ShipElement>();
                shipElement.m_StarFrom     = this;
                shipElement.m_StarTo       = friendStar;
                shipElement.m_ShipSize     = GetSizeByNum(troopNum);
                shipElement.m_ShipTroopNum = troopNum;
                shipElement.m_FlySpeed     = shipElement.m_SurrondSpeed = 4 + Random.Range(0.0f, 5.0f);
                newShip.transform.position = currentBornPos.position;
                ((TestShip)shipElement).SetShipScaleBySize();
                this.m_TroopNum -= troopNum;
            }
        }

        ResetSize();
    }
示例#6
0
 public override void Visit(StarElement star)
 {
     _graphics.FillPolygon(_brush, BaseStarElement.Calculate5StarPoints(star.Rect.Location, star.Rect.Width, star.Rect.Width / 2));
     //_graphics.FillEllipse(_brush, s);
 }
示例#7
0
 public virtual void SupportStar(StarElement friendStar, int supportNum)
 {
 }
示例#8
0
 public virtual void SupportStar(StarElement friendStar)
 {
 }
示例#9
0
 public virtual void AttackStar(StarElement enemyStar)
 {
 }
示例#10
0
 public abstract void Visit(StarElement star);