예제 #1
0
        public override BTStatus Execute()
        {
            MinerRef.SB.ArriveOn(mBB.MiningTarget.transform.position + new Vector3(Random.Range(-2, 2), Random.Range(-2, 2), Random.Range(-2, 2)), 2.9f, 0.1f);


            if (Vector3.Distance(MinerRef.transform.position, mBB.MiningTarget.transform.position) <= 5) //Wait until the ship has arrived
            {
                MinerRef.SB.ResetBehaviours();

                return(BTStatus.SUCCESS);
            }
            else if (mBB.depositing == true)
            {
                return(BTStatus.SUCCESS);
            }

            if (MinerRef.CheckDistanceFromTarget() == true)
            {
                // mBB.fleeing = true;

                return(BTStatus.FAILURE);
            }
            else
            {
                mBB.fleeing = false;
            }

            //  else if(mBB.fleeing==true) //Make the Miner flee
            //   {
            //    Debug.Log("FLEEING");
            //    return BTStatus.FAILURE;
            // }
            return(BTStatus.RUNNING);
        }
예제 #2
0
        public override bool CheckStatus()
        {
            if (mBB != null)
            {
                mBB.MiningTarget = MinerRef.MiningTarget;
                if (mBB.MiningTarget != null && mBB.fleeing == false) //If an asteroid has been discovered and the ship isn't being chased, mine
                {
                    return(true);
                }
                else
                {
                    // MinerRef.SB.ResetBehaviours(); //Reset all behaviours except obstacle avoidance so that the ship stops its current behaviour
                }
            }

            if (MinerRef.CheckDistanceFromTarget() == true)
            {
                mBB.fleeing = true;

                return(false);
            }
            else
            {
                mBB.fleeing = false;
                MinerRef.SB.ResetBehaviours();
            }

            return(false);
        }
예제 #3
0
        public override BTStatus Execute()
        {
            if (Time.time - lastmine >= MinerRef.MineSpeed) //Only mine as fast as the desired speed
            {
                lastmine = Time.time;
                if (Vector3.Distance(mBB.MiningTarget.transform.position, MinerRef.transform.position) < 5.0f) //Mine from the asteroid
                {
                    if (mBB.MiningTarget.GoldCount != 0)
                    {
                        MinerRef.ResourceUnit += mBB.MiningTarget.Extract(MinerRef.MineStrength);
                    }
                }
            }

            if (MinerRef.CheckDistanceFromTarget() == true)
            {
                // mBB.fleeing = true;

                return(BTStatus.FAILURE);
            }
            else
            {
                mBB.fleeing = false;
            }


            if (MinerRef.ResourceUnit >= MinerRef.MaximumResourceStorage || mBB.MiningTarget.GoldCount == 0 && mBB.HQ != null)
            {
                if (mBB.HQ != null)
                {
                    MinerRef.SB.ArriveOn(mBB.HQ.transform.position + new Vector3(Random.Range(-2, 2), Random.Range(-2, 2), Random.Range(-2, 2)), 2.9f, 0.1f);
                }
                return(BTStatus.SUCCESS);
            }



            return(BTStatus.RUNNING);
        }