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(); }
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)); }
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); } }
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; } }
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(); }
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); }
public virtual void SupportStar(StarElement friendStar, int supportNum) { }
public virtual void SupportStar(StarElement friendStar) { }
public virtual void AttackStar(StarElement enemyStar) { }
public abstract void Visit(StarElement star);