Example #1
0
    private void HandleStateTransitionSideEffect(CleanerState oldState, CleanerState newState)
    {
        switch (oldState)
        {
        case CleanerState.Hit:
            attackDisabled = false;
            break;
        }

        switch (newState)
        {
        case CleanerState.Turning:
            HeadingRight = !HeadingRight;
            velocity.x   = 0f;
            stateEndTime = Time.time + 0.5f;
            break;

        case CleanerState.Hit:
            attackDisabled = true;
            stateEndTime   = Time.time + 0.5f;
            break;

        case CleanerState.Dead:
            attackDisabled = true;
            break;
        }
    }
    public void CitizenOn(Citizen citizen)
    {
        this.citizen           = citizen;
        this.citizen.cleanerOn = true;

        cleanerState = CleanerState.CitizenReady;
    }
Example #3
0
 void Start()
 {
     cleanerState = CleanerState.Idle;
     previousPos  = transform.position;
     rightMoves   = new List <Vector3>();
     wrongMoves   = new List <Vector3>();
     localVacPos  = new Vector3(0, 0, 0);
     rightMoves.Add(localVacPos);
     movesDone = new List <MoveDir>();
 }
Example #4
0
 private void MoveDown()
 {
     if (Vector3.Distance(endPos, transform.position) > distanceThreshold)
     {
         transform.Translate(-Vector3.forward * Time.deltaTime * SPEED, Space.World);
     }
     else
     {
         cleanerState = CleanerState.Idle;
     }
 }
Example #5
0
 private void MoveLeft()
 {
     if (Vector3.Distance(endPos, transform.position) > distanceThreshold)
     {
         transform.Translate(-Vector3.right * Time.deltaTime * speed, Space.World);
     }
     else
     {
         cleanerState = CleanerState.Idle;
     }
 }
Example #6
0
    void Update()
    {
        switch (cleanerState)
        {
        // if Cleaner is active, Move!
        case CleanerState.Active:
            switch (movingDirection)
            {
            case (MoveDir.Up):
                MoveUp();
                break;

            case (MoveDir.Down):
                MoveDown();
                break;

            case (MoveDir.Left):
                MoveLeft();
                break;

            case (MoveDir.Right):
                MoveRight();
                break;
            }
            CheckCollision();     //Checks collision with walls or other objects
            break;

        //if cleaner is Idle : Clean if Cell is dirty, move if cell is clean
        case CleanerState.Idle:
            switch (cellState)
            {
            case CellState.Clean:
                movingDirection = Move();
                cleanerState    = CleanerState.Active;
                break;

            case CellState.Dirty:
                Clean();
                cellState = CellState.Clean;
                break;
            }
            break;

        case CleanerState.Off:
        {
            // do nothing
            break;
        }
        }
    }
Example #7
0
    private void UpdateState()
    {
        CleanerState nextStateByEnvironment = GetNextStateByEnvironment();

        nextState = (nextState > nextStateByEnvironment ? nextState : nextStateByEnvironment);

        if (state != nextState)
        {
            HandleStateTransitionSideEffect(state, nextState);
            state = nextState;
        }

        nextState = CleanerState.None;
    }
Example #8
0
    void FixedUpdate()
    {
        switch (cleanerState)
        {
        case CleanerState.Active:
            switch (movingDirection)
            {
            case (MoveDir.Up):
                MoveUp();
                break;

            case (MoveDir.Down):
                MoveDown();
                break;

            case (MoveDir.Left):
                MoveLeft();
                break;

            case (MoveDir.Right):
                MoveRight();
                break;
            }
            CheckCollision();     //Checks collision with walls or other objects
            break;

        case CleanerState.Idle:
            switch (cellState)
            {
            case CellState.Clean:
                movingDirection = Move();
                cleanerState    = CleanerState.Active;
                break;

            case CellState.Dirty:
                Clean();
                cellState = CellState.Clean;
                break;
            }
            break;
        }
    }
    public void SetState(CleanerState cleanerState)
    {
        this.cleanerState = cleanerState;

        if (cleanerState == CleanerState.Cleaning)
        {
            takeTime = 0;
        }
        else if (cleanerState == CleanerState.CleaningEnd)
        {
            citizen.cleanerOn = false;

            Tile tile = GameManager.Ins.tileController.tiles[0, 4];

            //var tile = GameObject.FindObjectOfType<TileController>().tiles[0, 4];
            //citizen.transform.position = tile.transform.position;
            //citizen.pos = tile.pos;

            citizen.gameObject.SetActive(true);
            citizen.ChangeColor(CitizenColor.White);
            citizen.ResetPos(tile);
            citizen.GoHome();



            //citizen.StartFSM();

            /*
             * if (citizen.Home != null)
             * {
             *  citizen.SetCitizenHome(citizen.Home);
             * }
             * else
             * {
             *  citizen.ChangePattern();
             * }
             */

            citizen      = null;
            cleanerState = CleanerState.Idle;
        }
    }
Example #10
0
 void Start()
 {
     Debug.Log("Start");
     cleanerState = CleanerState.Idle;
     previousPos  = transform.position;
 }
Example #11
0
 void Awake()
 {
     cleanerState = CleanerState.Idle;
     previousPos  = transform.position;
 }
Example #12
0
 public override void Die()
 {
     nextState = CleanerState.Dead;
     UpdateState();
     base.Die();
 }
Example #13
0
 public override void OnDamaged(IInteractable attacker, int damage, Vector2 knockback)
 {
     base.OnDamaged(attacker, damage, knockback);
     nextState = CleanerState.Hit;
     UpdateState();
 }