Exemplo n.º 1
0
    // ====================================================================================================== //
    private void playerContinuesInput()
    {
        // make sure for nice timly equal interval between inputs
        if (_timeToNextMove >= 0.0F)
        {
            _timeToNextMove -= Time.deltaTime;
            return;
        }
        _timeToNextMove = _moveInterval;

        // if target position is not null - continue going there
        if (_partyTargetPosition != Position.NullPosition)
        {
            Position nextPosition = WalkingAlgorithm.GetNextPosition(Party.Instance.Position, _partyTargetPosition);
            if (nextPosition != Position.NullPosition)
            {
                DungeonTile nextTile = nextPosition.DungeonTile;
                if (nextTile != null)
                {
                    Dungeon.Instance.PutDungeonObjectInTile(Party.Instance.DungeonObject, nextTile);
                    Dungeon.Instance.RevealPartySurroundings();
                    Party.Instance.PayWalkCost();

                    // stop when reach target
                    if (nextPosition == _partyTargetPosition)
                    {
                        _partyTargetPosition = Position.NullPosition;

                        // if in peace mode - [collect loot] or [use stairs] or [move between areas]
                        if (IsPartyInPeaceMode)
                        {
                            // pickup
                            Party.Instance.PickupItemsInPosition();
                            // use stairs
                            Party.Instance.UseStairsInPosition();
                            // move to adjacent area
                            Party.Instance.MoveToAdjacentAreaInPosition();
                        }
                    }
                }
            }
        }

        // waiting for player input
        //checkDirectionKeys();
        checkWaitKey();
    }
Exemplo n.º 2
0
    // ====================================================================================================== //
    private void creaturesTurn()
    {
        if (!_creaturesTurn)
        {
            return;
        }

        Debug.Log("Creatures turn");

        _isPartyInPeaceMode = true;

        foreach (Creature creature in Dungeon.Instance.GetCreatures())
        {
            // continue if dead
            if (!creature.IsAlive)
            {
                continue;
            }

            // check is see party & starting to chase them
            if (!creature.IsChasing)
            {
                if (SightAlgorithm.CanSee(creature.Position, Party.Instance.Position))
                {
                    creature.IsChasing = true;
                }
            }

            // continue if not chasing
            if (!creature.IsChasing)
            {
                creature.ResetActionUnits(); // if not chasing, fill all action points
                continue;
            }

            _isPartyInPeaceMode = false;

            // cancel the travel of the party
            _partyTargetPosition = Position.NullPosition;

            // if close to party - melee
            if (creature.Position.DistanceTo(Party.Instance.Position) == 1)
            {
                Creature randomPartyMember = Party.Instance.GetRandomLiveMember();
                if (randomPartyMember != null)
                {
                    creature.MeleeAttack(randomPartyMember);
                }
            }
            else // otherwise, move toward party
            {
                Position nextPosition = WalkingAlgorithm.GetNextPosition(creature.Position, Party.Instance.Position);
                if (nextPosition != Position.NullPosition)
                {
                    DungeonTile nextTile = nextPosition.DungeonTile;
                    if (nextTile != null)
                    {
                        Debug.Log(creature.name + " move");
                        Dungeon.Instance.PutDungeonObjectInTile(creature, nextTile);
                        creature.PayWalkCost();
                    }
                }
            }
        }

        // end of creatures turn...
        _creaturesTurn = false;

        // save area
        Dungeon.Instance.SaveCurrentArea();

        // TODO: prepare party should be after monsters turn.. but it blinks - deal with it!
        // preparePartyForNextTurn();
    }