Example #1
0
    protected override void Awake()
    {
        base.Awake();
        m_harvesterState = eHarvesterState.NotHarvesting;

        Harvester harvesterComponent = GetComponent <Harvester>();

        Assert.IsNotNull(harvesterComponent);
        m_harvester = harvesterComponent;
    }
Example #2
0
    public void switchToState(eHarvesterState newState, BoidSpawner boidSpawner = null)
    {
        m_harvesterState = newState;
        m_currentState   = eUnitState.InUseBySecondaryState;
        m_targetID       = Utilities.INVALID_ID;

        switch (newState)
        {
        case eHarvesterState.SetBoidSpawner:
        {
            Assert.IsNotNull(boidSpawner);

            m_harvester.m_boidSpawner = boidSpawner;
        }
        break;

        case eHarvesterState.TargetAvailableBoid:
        {
            Assert.IsNotNull(m_harvester.m_boidSpawner);

            m_harvester.m_targetBoid = m_harvester.m_boidSpawner.getAvailableBoid(m_unit.getID());
            if (m_harvester.m_targetBoid)
            {
                m_tankMovement.moveTo(m_harvester.m_targetBoid.transform.position);
                m_harvesterState    = eHarvesterState.MovingToTargetedBoid;
                m_findAvailableBoid = false;
            }
            else
            {
                m_findAvailableBoid = true;
            }
        }
        break;

        case eHarvesterState.SetDestinationResourceBuilding:
        {
            Assert.IsNotNull(m_harvester.m_buildingToReturnResource);

            fRectangle AABB = m_harvester.m_buildingToReturnResource.GetComponent <Selection>().getAABB();
            m_tankMovement.moveTo(
                Utilities.getClosestPositionOutsideAABB(AABB, transform.position,
                                                        m_harvester.m_buildingToReturnResource.transform.position, m_harvester.m_destinationOffSetHQ));

            m_harvesterState = eHarvesterState.MovingToResourceBuilding;
        }
        break;
        }
    }
Example #3
0
    protected override void Update()
    {
        base.Update();

        if (m_currentState != eUnitState.InUseBySecondaryState)
        {
            m_harvesterState = eHarvesterState.NotHarvesting;
            m_harvester.releaseTargetBoid();
        }
        if (m_findAvailableBoid)
        {
            switchToState(eHarvesterState.TargetAvailableBoid);
        }

        switch (m_harvesterState)
        {
        case eHarvesterState.MovingToTargetedBoid:
        {
            Assert.IsNotNull(m_harvester.m_targetBoid);
            if ((m_harvester.m_targetBoid.transform.position - transform.position).sqrMagnitude <=
                m_harvester.m_distanceToHarvest * m_harvester.m_distanceToHarvest)
            {
                switchToState(eHarvesterState.HarvestTargetedBoid);
            }
        }
        break;

        case eHarvesterState.HarvestTargetedBoid:
        {
            Assert.IsNotNull(m_harvester.m_targetBoid);
            if ((m_harvester.m_targetBoid.transform.position - transform.position).sqrMagnitude <=
                m_harvester.m_distanceToHarvest * m_harvester.m_distanceToHarvest / 2)
            {
                Assert.IsNotNull(m_harvester.m_boidSpawner);
                m_harvester.m_boidSpawner.destroyBoid(m_harvester.m_targetBoid);

                bool harvesterResourceCapacityReached = false;
                m_harvester.incrementResource(out harvesterResourceCapacityReached);
                if (harvesterResourceCapacityReached)
                {
                    switchToState(eHarvesterState.SetDestinationResourceBuilding);
                }
                else
                {
                    switchToState(eHarvesterState.TargetAvailableBoid);
                }
            }
        }
        break;

        case eHarvesterState.MovingToResourceBuilding:
        {
            if (m_tankMovement.reachedDestination())
            {
                GameManager.Instance.addResourcesToFaction(m_harvester);
                switchToState(eHarvesterState.TargetAvailableBoid);
            }
        }
        break;
        }
    }