Пример #1
0
    public void RemoveTurret(TurretPosition pos)
    {
        if (pos.turrets.Count > 0)
        {
            MessageTutorial.Send("remove");
        }
        foreach (Turret turret in pos.turrets)
        {
            Destroy(turret.gameObject);
        }

        pos.turrets = new List <Turret>();

        //TODO: Set turret types
        if (pos.leftPosition.turrets.Count > 0)
        {
            List <TurretPosition> positions = pos.leftPosition.GetLeftmostPositionWithTurret(spokes - 1).GetTurrets(spokes - 1);
            foreach (TurretPosition position in positions)
            {
                position.SetTurretType(positions.Count);
            }
        }

        if (pos.rightPosition.turrets.Count > 0)
        {
            List <TurretPosition> positions = pos.rightPosition.GetTurrets(spokes - 1);
            foreach (TurretPosition position in positions)
            {
                position.SetTurretType(positions.Count);
            }
        }
    }
Пример #2
0
 //Used for when the static Create method wants to set the local position for the turret.
 public void SetPosition(TurretPosition position)
 {
     localPosition = position;
     if (localPosition == TurretPosition.TOP)
     {
         transform.localScale = new Vector3(transform.localScale.x, -transform.localScale.y, transform.localScale.z);
     }
 }
Пример #3
0
    // Returns a random turret position in world space from x, y coords.
    public GridCellPos GetRandomTurretGridCell()
    {
        TurretPosition randomTurretPos = shuffledTurretPositions.Dequeue();

        shuffledTurretPositions.Enqueue(randomTurretPos);

        GridCellPos randomGridCellPos = new GridCellPos(randomTurretPos.x, randomTurretPos.y);

        return(randomGridCellPos);
    }
Пример #4
0
    void Update()
    {
        targetPosition = TurretManager.Instance.GetTopPosition();

        if (targetPosition != null)
        {
            transform.position = targetPosition.positionObject.transform.position + transform.up * turretHeightOffset * targetPosition.turrets.Count;
            transform.rotation = targetPosition.positionObject.transform.rotation;
        }
    }
Пример #5
0
    private void Awake()
    {
        bulletPooler.InitializePool();
        laserPooler.InitializePool();
        rocketPooler.InitializePool();

        float theta = 360f / spokes;

        turretPositions = new TurretPositions();

        for (int i = 0; i < spokes; i++)
        {
            TurretPosition pos = new TurretPosition();
            pos.turrets             = new List <Turret>();
            pos.positionObject      = Instantiate(turretPositionPrefab, planet.transform);
            pos.positionObject.name = string.Format("Turret Position {0}", i);
            pos.positionObject.transform.localPosition = Vector3.zero;
            pos.positionObject.transform.Rotate(Vector3.forward * theta * -i);
            pos.positionObject.transform.Translate(Vector3.up * turretDropPosition.position.y);
            if (i > 0)
            {
                turretPositions[turretPositions.Count - 1].rightPosition = pos;
                pos.leftPosition = turretPositions[turretPositions.Count - 1];
            }
            turretPositions.Add(pos);
        }

        turretPositions[0].leftPosition = turretPositions[turretPositions.Count - 1];
        turretPositions[turretPositions.Count - 1].rightPosition = turretPositions[0];

        ghostTurretInstance      = Instantiate(ghostTurret, transform).GetComponent <GhostTurret>();
        ghostTurretInstance.name = "Ghost Turret";
        ghostTurretInstance.gameObject.SetActive(false);

        ghostTurretInstance.targetPosition     = turretPositions[0];
        ghostTurretInstance.topPosition        = turretDropPosition;
        ghostTurretInstance.turretHeightOffset = turretHeightOffset;

        List <int> biomeTesting = new List <int>();

        for (int i = 0; i < 20; i++)
        {
            biomeTesting.Add(i % 4);
        }

        //SetBiomeData(biomeTesting.ToArray());
    }
Пример #6
0
    public static Turret Create(float xLocation, TurretPosition position)
    {
        //Get the turret from the Resources folder.
        if (turret == null)
        {
            turret = Resources.Load("Enemies/Turret/Turret") as GameObject;
            if (turret == null)
            {
                Debug.LogError("Enemies/Turret/Turret could not be loaded!");
            }
        }

        //Determine the y location of the turret based on the position.
        if (turret != null)
        {
            float yLocation = 0;
            switch (position)
            {
            case TurretPosition.BOTTOM:
                yLocation = -3.2f;
                break;

            case TurretPosition.TOP:
                yLocation = 3.2f;
                break;

            case TurretPosition.ROLLING:
                //These guys can pretty much go anywhere and have a rigidbody 2d, so it doesn't really matter where they goe.
                yLocation = -1f;
                break;
            }
            //Instantiate the turret
            GameObject createdTurret = (GameObject)(Instantiate(turret, new Vector3(xLocation, yLocation, 0), Quaternion.identity));
            //If the turret is on the turret, rotate the turret mount.
            createdTurret.GetComponent <Turret> ().SetPosition(position);
            //Initialize the turret.
            createdTurret.GetComponent <Turret> ().InitializeCharacter();
            //Return the turret.
            return(createdTurret.GetComponent <Turret> ());
        }
        else
        {
            Debug.LogError("Turret does not exist!");
            return(null);
        }
    }
Пример #7
0
        protected bool TrackTargetPickSubtarget(Ingame.MyDetectedEntityInfo Target)
        {
            if (TurretPosition.DistanceTo(Target.Position) > Turret.Range)
            {
                return(false);
            }
            if (!Target.IsGrid())
            {
                IMyEntity TargetEntity = MyAPIGateway.Entities.GetEntityById(Target.EntityId);
                if (TurretPosition.DistanceTo(TargetEntity.GetPosition()) > Turret.Range)
                {
                    return(false);
                }
                Turret.TrackTarget(TargetEntity);
                return(true);
            }
            IMyCubeGrid Grid = MyAPIGateway.Entities.GetEntityById(Target.EntityId) as IMyCubeGrid;

            if (Grid == null)
            {
                return(false);
            }
            List <IMyTerminalBlock> TermBlocks = new List <IMyTerminalBlock>();
            IMyGridTerminalSystem   Term       = Grid.GetTerminalSystem();

            if (Term == null)
            {
                return(false);
            }
            Term.GetBlocks(TermBlocks);
            TermBlocks.RemoveAll(x => !x.IsFunctional);
            if (!TermBlocks.Any())
            {
                Turret.TrackTarget(Grid);
                return(true);
            }

            var PrioritizedBlocks = TermBlocks.OrderByDescending(x => PriorityIndex(x)).ThenBy(x => DistanceSq(x.GetPosition()));

            Turret.TrackTarget(PrioritizedBlocks.First());
            return(true);
        }
Пример #8
0
    public void PlaceTurret(TurretPosition pos)
    {
        Turret newTurret = Instantiate(turretPrefab, pos.positionObject.transform);

        newTurret.transform.localRotation = Quaternion.identity;
        newTurret.transform.localPosition = new Vector3(0, turretHeightOffset * pos.turrets.Count, 0);
        newTurret.gameObject.name         = "New Turret";
        newTurret.SetTurretType(Turret.TurretType.Basic);
        newTurret.myPosition            = pos;
        newTurret.transform.localScale *= 2.0f;

        pos.turrets.Add(newTurret);
        ghostTurretInstance.gameObject.SetActive(false);

        List <TurretPosition> positions = pos.GetLeftmostPositionWithTurret(spokes - 1).GetTurrets(spokes - 1);

        foreach (TurretPosition position in positions)
        {
            position.SetTurretType(positions.Count);
        }

        TurretSoundManager.Instance.PlaySound("TurretBuild", true);
    }
Пример #9
0
        protected bool TrackTarget(Ingame.MyDetectedEntityInfo Target, long SubtargetID)
        {
            if (TurretPosition.DistanceTo(Target.Position) > Turret.Range)
            {
                return(false);
            }
            IMyCubeGrid Grid = MyAPIGateway.Entities.GetEntityById(Target.EntityId) as IMyCubeGrid;

            if (Grid == null)
            {
                return(false);
            }
            IMyTerminalBlock        Block  = null;
            List <IMyTerminalBlock> Blocks = new List <IMyTerminalBlock>();

            Grid.GetTerminalSystem().GetBlocks(Blocks);
            Block = Blocks.FirstOrDefault(x => x.EntityId == SubtargetID);
            if (Block == null || TurretPosition.DistanceTo(Block.GetPosition()) > Turret.Range)
            {
                return(false);
            }
            Turret.TrackTarget(Block);
            return(true);
        }