예제 #1
0
    public void SetTurretType(TurretType newType)
    {
        turretType = newType;
        foreach (TurretTypeLink link in typeLinks)
        {
            link.sprite.gameObject.SetActive(link.type == turretType);
            if (link.type == turretType)
            {
                if (link.behaviour == null)
                {
                    turretBehaviour = null;
                }
                else
                {
                    turretBehaviour.Shutdown();
                    turretBehaviour                  = Instantiate(link.behaviour);
                    turretBehaviour.turret           = this;
                    turretBehaviour.bulletSpawnPoint = bulletSpawnPoint;
                    turretBehaviour.Init();
                }
            }
        }

        if (turretType == TurretType.Boost)
        {
            boostSprite.gameObject.SetActive(true);
            if (turretBehaviour != null)
            {
                turretBehaviour.Shutdown();
                turretBehaviour = null;
            }
        }
    }
예제 #2
0
 private void Start()
 {
     if (myScript == null)
     {
         myScript = GetComponentInParent <TurretBehaviour>(); // supposedly, there is only one instance of TurretBehviour, in the top parent
     }
 }
예제 #3
0
    private void Awake()
    {
        alarmTimer = alarmTime;

        behaviourComponent = GetComponentInParent <TurretBehaviour>();
        polygonCollider    = GetComponent <PolygonCollider2D>();
        vision             = GetComponent <LineRenderer>();

        SetLine();
    }
예제 #4
0
        public void TransitionTo(TurretBehaviour behaviour)
        {
            if (CurrentTurretBehaviour == behaviour)
            {
                return;
            }

            //Console.WriteLine(bot.tankName + "  TURRET: " + behaviour);
            CurrentTurretBehaviour = behaviour;
        }
예제 #5
0
 void Awake()
 {
     if (!m_MoneyManager)
     {
         m_MoneyManager = FindObjectOfType <TotalMoney>();
     }
     if (!m_TurretBehaviour)
     {
         m_TurretBehaviour = GetComponent <TurretBehaviour>();
     }
 }
예제 #6
0
    void Start()
    {
        turret         = GetComponent <TurretBehaviour>();
        viewFromGround = new Vector3(transform.position.x, 0f, transform.position.z); //for overlap spheres

        //States
        FSMState idle = new FSMState();

        idle.enterActions.Add(Wait);

        FSMState active = new FSMState();

        active.enterActions.Add(Alerted);
        active.exitActions.Add(StopAlert);

        FSMState attack = new FSMState();

        attack.enterActions.Add(StartAttack);
        attack.stayActions.Add(Attack);
        attack.exitActions.Add(StopAttack);

        //Transitions
        FSMTransition t1 = new FSMTransition(PatrolInCamp);
        FSMTransition t2 = new FSMTransition(NobodyOnAlarm);
        FSMTransition t3 = new FSMTransition(EnemiesInRange);
        FSMTransition t4 = new FSMTransition(NoEnemiesInRange);

        // Link states with transitions
        idle.AddTransition(t1, active);
        active.AddTransition(t2, idle);
        active.AddTransition(t3, attack);
        attack.AddTransition(t4, active);

        //Setup a FSA at initial state
        fsm = new FSM(idle);

        // Start monitoring
        StartCoroutine(Patrol());
    }
예제 #7
0
    public int FindWeaknesses(TurretBehaviour TurretBehaviour, EnemyBehaviour EnemyBehaviour)
    {
        int numberOfWeaknesses = 1;

        if (TurretBehaviour.attackType == TurretBehaviour.AttackType.Bullet && EnemyBehaviour.type == EnemyBehaviour.Type.Carbon)
        {
            numberOfWeaknesses++;
        }
        if (TurretBehaviour.attackType == TurretBehaviour.AttackType.Plasma && EnemyBehaviour.type == EnemyBehaviour.Type.Synthetic)
        {
            numberOfWeaknesses++;
        }
        if (TurretBehaviour.attackType == TurretBehaviour.AttackType.Heat && EnemyBehaviour.type == EnemyBehaviour.Type.Silicon)
        {
            numberOfWeaknesses++;
        }
        if (TurretBehaviour.attackType == TurretBehaviour.AttackType.Energy && EnemyBehaviour.type == EnemyBehaviour.Type.Carbon)
        {
            numberOfWeaknesses++;
        }

        return(numberOfWeaknesses);
    }
예제 #8
0
    void OnEnable()
    {
        GM        = GameObject.Find("GameManager").GetComponent <GameManager>();
        rigidbody = gameObject.GetComponent <Rigidbody>();
        StartMovement();
        if (GM.Turret != null)
        {
            turretBehaviour = GM.Turret.GetComponent <TurretBehaviour>();
        }

        if (turretBehaviour != null)
        {
            if (turretBehaviour.distanceIsLess(transform.position))
            {
                ShootMe();
            }
            else
            {
                checkTrajectory();
            }
        }

        InvokeRepeating("CheckifTooFar", 0.0f, 1.0f);
    }
예제 #9
0
        private void Pickup()
        {
            // Get nearest
            CurrentObject = getNearestInteractable();
            //null check
            if (!CurrentObject)
            {
                return;
            }

            //check for upgrade menu
            if (CurrentObject.gameObject.CompareTag("Turret"))
            {
                TurretBehaviour turret = CurrentObject.GetComponent <TurretBehaviour>();
                if (turret.UpgradeMenu.activeInHierarchy)
                {
                    turret.UpgradeMenu.SetActive(false);
                }
                else if (!turret.UpgradeMenu.activeInHierarchy)
                {
                    turret.UpgradeMenu.SetActive(true);
                }
                DropRotate();
                return;
            }

            OutlineObject.gameObject.SetActive(true);
            if (CurrentObject.gameObject.CompareTag("CanPickup"))
            {
                PickupNormal();
            }
            else if (CurrentObject.gameObject.CompareTag("CanRotate"))
            {
                Rotate();
            }
        }
예제 #10
0
 private void Awake()
 {
     turretBehaviour        = Instantiate(typeLinks[0].behaviour);
     turretBehaviour.turret = this;
     boostSprite.gameObject.SetActive(false);
 }
    // END CONSTRUCTORS

    private void Awake()
    {
        utility         = new Utility();
        turretBehaviour = GetComponent <TurretBehaviour>(); //might need to be moved if turrets dont work when you are built during gameplay
        GetComponentInChildren <SphereCollider>().radius = range;
    }
예제 #12
0
 public void Attack(TurretBehaviour turretBehaviour, EnemyBehaviour enemyBehaviour)
 {
     FindWeaknesses(turretBehaviour, enemyBehaviour);
     enemyBehaviour.currentHealth = enemyBehaviour.currentHealth - turretBehaviour.attackDamage * damageMultiplier;
 }
        //Fire when mediator is attached
        internal void Init()
        {
            //Set mediator
            mediator = GetComponent<PlayerMediator>();
            if (mediator == null){
                Debug.Log( "Mediator was not set on: " + gameObject );
                return;
            }

            //Movement related
            camT = mediator.cam.transform;
            StartCoroutine( MovementUpdate());

            //Set Turret behaviour, weapon type and listener
            turretBehaviour = new TurretBehaviour();
            turretBehaviour.StartTurret(this, TurretElement.BASIC_POOL);
            turretBehaviour.fireSignal.AddListener( OnFire );
            turretBehaviour.RetrieveManualControl();

            isPlayerControlled = true; //Movement Related
        }
예제 #14
0
 private void launchTurret()
 {
     TurretBehaviour turretInvoke   = turretObject.GetComponent <TurretBehaviour>();
     GameObject      turretInvokeGo = Instantiate(turretObject, hit.point, Quaternion.identity) as GameObject;
 }
 // Start is called before the first frame update
 void Start()
 {
     turretBehaviour = GameObject.Find("Turret").GetComponent <TurretBehaviour>();
 }
예제 #16
0
 void Awake()
 {
     MoneyManager    = FindObjectOfType <TotalMoney>();
     turretBehaviour = GetComponent <TurretBehaviour>();
 }