Esempio n. 1
0
    public void ClearSpaceMarking()
    {
        if (mCollisionMap == null)
        {
            return;
        }

        if (!useCollisionMap)
        {
            return;
        }

        mCollisionMap.RemoveMarking(uniqueCollisionIdentity);
    }
Esempio n. 2
0
    public override void Activate(GameObject caster)
    {
        base.Activate(caster);

        // Find a walkable tile nearby that is empty and move there immediately, then play an effect.
        CollisionMap collisionMap = GameObject.FindObjectOfType<CollisionMap>();

        int x = Mathf.RoundToInt(Game.instance.avatar.transform.position.x);
        int y = Mathf.RoundToInt(Game.instance.avatar.transform.position.z);
        y = -y;

        List<Vector2Int> viablePositions = new List<Vector2Int>();
        for (int xOffset = -13; xOffset <= 13; ++xOffset)
        {
            for (int yOffset = -13; yOffset <= 13; ++yOffset)
            {
                int testX = x + xOffset;
                int testY = y + yOffset;
                if (testX >= 0 && testY >= 0 && testX < collisionMap.width && testY < collisionMap.height &&
                    collisionMap.SpaceMarking(testX, testY) == 0)
                {
                    viablePositions.Add(new Vector2Int(testX, testY));
                }
            }
        }

        if (viablePositions.Count == 0)
            return;


        Vector2Int pos = viablePositions.Sample();

        collisionMap.RemoveMarking(Game.instance.avatar.commonComponents.simpleMovement.uniqueCollisionIdentity);
        collisionMap.MarkSpace(pos.x, pos.y, Game.instance.avatar.GetComponent<SimpleMovement>().uniqueCollisionIdentity);

        Game.instance.avatar.transform.position = new Vector3(pos.x, 0, -pos.y);
        Game.instance.avatar.follower.transform.position = Game.instance.avatar.transform.position + new Vector3(-0.25f, 0f, 0.25f);

        GameObject effect = PrefabManager.instance.InstantiatePrefabByName("CFX2_WWExplosion_C");
        effect.transform.position = Game.instance.avatar.transform.position;
        effect.AddComponent<DestroyAfterTimeElapsed>().time = 2f;

        Game.instance.soundManager.PlaySound("teleport");
    }
Esempio n. 3
0
    private void TeleportIfPossible()
    {
        CollisionMap      collisionMap    = Game.instance.levelGenerator.collisionMap;
        List <Vector2Int> viablePositions = collisionMap.EmptyPositionsNearPosition(mTeleportTarget, 1);

        if (viablePositions.Count == 0)
        {
            return;
        }

        Vector2Int newTarget = viablePositions.Find(i => (i.x == mTeleportTarget.x && i.y == mTeleportTarget.y + 1));

        if (newTarget.x != 0 || newTarget.y != 0)
        {
            mTeleportTarget = newTarget;
        }
        else
        {
            mTeleportTarget = viablePositions[0];
        }

        Vector2Int currentPos = MapCoordinateHelper.WorldToMapCoords(transform.position);

        if (!collisionMap.RemoveMarking(commonComponents.simpleMovement.uniqueCollisionIdentity))
        {
            Debug.LogError("CM error in PlayerController");
        }

        collisionMap.MarkSpace(mTeleportTarget.x, mTeleportTarget.y, commonComponents.simpleMovement.uniqueCollisionIdentity);

        Game.instance.avatar.transform.position          = MapCoordinateHelper.MapToWorldCoords(mTeleportTarget);
        Game.instance.avatar.follower.transform.position = Game.instance.avatar.transform.position + new Vector3(-0.25f, 0f, 0.25f);

        GameObject effect = PrefabManager.instance.InstantiatePrefabByName("CFX2_WWExplosion_C");

        effect.transform.position = Game.instance.avatar.transform.position;
        effect.AddComponent <DestroyAfterTimeElapsed>().time = 2f;
    }
Esempio n. 4
0
    public void Teleport(bool playerCentric = false)
    {
        teleportTimer = teleportCooldown;

        CollisionMap collisionMap = GameObject.FindObjectOfType <CollisionMap>();

        Vector2Int pos = MapCoordinateHelper.WorldToMapCoords(transform.position);

        if (playerCentric)
        {
            pos = MapCoordinateHelper.WorldToMapCoords(Game.instance.avatar.transform.position);
        }

        List <Vector2Int> viablePositions = new List <Vector2Int>();

        for (int xOffset = -teleportMaxDistance; xOffset <= teleportMaxDistance; ++xOffset)
        {
            for (int yOffset = -teleportMaxDistance; yOffset <= teleportMaxDistance; ++yOffset)
            {
                if (playerCentric)
                {
                    if (xOffset != 0 && yOffset != 0)
                    {
                        continue;
                    }
                }

                int teleDist = Mathf.Abs(xOffset) + Mathf.Abs(yOffset);
                if (teleDist < teleportMinDistance || teleDist > teleportMaxDistance)
                {
                    continue;
                }

                int testX = pos.x + xOffset;
                int testY = pos.y + yOffset;
                if (testX >= 0 && testY >= 0 && testX < collisionMap.width && testY < collisionMap.height &&
                    collisionMap.SpaceMarking(testX, testY) == 0)
                {
                    viablePositions.Add(new Vector2Int(testX, testY));
                }
            }
        }

        if (viablePositions.Count == 0)
        {
            return;
        }


        Vector2Int targetPos = viablePositions.Sample();

        collisionMap.RemoveMarking(GetComponent <SimpleMovement>().uniqueCollisionIdentity);
        collisionMap.MarkSpace(targetPos.x, targetPos.y, GetComponent <SimpleMovement>().uniqueCollisionIdentity);

        Vector3 previousPosition = transform.position;

        transform.position = new Vector3(targetPos.x, 0, -targetPos.y);

        GameObject effect = PrefabManager.instance.InstantiatePrefabByName("CFX2_WWExplosion_C");

        effect.transform.position = previousPosition;
        effect.AddComponent <DestroyAfterTimeElapsed>().time = 2f;
        effect.transform.localScale = Vector3.one * 0.75f;
        Speedup(effect);

        GameObject effect2 = PrefabManager.instance.InstantiatePrefabByName("CFX2_WWExplosion_C");

        effect2.transform.position = transform.position;
        effect2.AddComponent <DestroyAfterTimeElapsed>().time = 2f;
        effect2.transform.localScale = Vector3.one * 0.75f;
        Speedup(effect2);

        Game.instance.soundManager.PlaySound("teleport");
    }