Exemple #1
0
    // Start is called before the first frame update
    void Start()
    {
        objPlayer = GameObject.Find("Player");
        player    = objPlayer.GetComponent <Player>();

        dirVec    = new Vector3[4];
        dirVec[0] = new Vector3(0, 1);
        dirVec[1] = new Vector3(1, 0);
        dirVec[2] = new Vector3(0, -1);
        dirVec[3] = new Vector3(-1, 0);

        sprEnemy    = new Sprite[4];
        sprEnemy[0] = sprEnemy0;
        sprEnemy[1] = sprEnemy1;
        sprEnemy[2] = sprEnemy2;
        sprEnemy[3] = sprEnemy3;

        HP = maxHP;

        map       = new List <Tile3>();
        path      = new List <Tile3>();
        openList  = new List <Tile3>();
        closeList = new List <Tile3>();

        playerPos = new Vector3(0, 0, 0);

        GetMap();
        Tile3 start = GetTile(transform.position.x, transform.position.y);
        Tile3 end   = GetTile(0.25f, -0.05f);

        GetRoute(start, end);
    }
Exemple #2
0
    private bool IsNearLoc(Tile3 srcLoc, Tile3 targetLoc)
    {
        float diffX = Math.Abs(srcLoc.X - targetLoc.X);
        float diffY = Math.Abs(srcLoc.Y - targetLoc.Y);
        float err   = 0.005f;

        return(diffX <= moveUnit + err && diffY <= moveUnit + err && !(Math.Abs(diffX - moveUnit) <= err && Math.Abs(diffY - moveUnit) <= err));
    }
Exemple #3
0
 // Once the game needs to restart to its normal values in order to play again
 void resetGame()
 {
     Tile1.SetActive(false);
     Tile2.SetActive(false);
     Tile3.SetActive(false);
     pickTileText.SetActive(false);
     moneyAddFlag = true;
 }
Exemple #4
0
    public void Execute(Tile3 parent, Tile3 endTile)
    {
        Parent = parent;
        G      = CalcGValue(parent, this);

        float diffX = Math.Abs(endTile.X - X);
        float diffY = Math.Abs(endTile.Y - Y);

        H = (diffX + diffY) / mSpd;
    }
Exemple #5
0
    public bool moneyAddFlag = true;                // Flag to disable Play 100 from doing anything



    // Start is called before the first frame update
    void Start()
    {
        // Restart the amount of credits to zero at the beginning of the game
        creditAmount = 0;
        //Restart the playButton back to show up
        playButton.SetActive(true);

        // Don't show pick a tile text yet
        pickTileText.SetActive(false);

        // Let all the tiles be unactive until we hit play
        Tile1.SetActive(false);
        Tile2.SetActive(false);
        Tile3.SetActive(false);
    }
Exemple #6
0
    public static float CalcGValue(Tile3 parent, Tile3 current)
    {
        float diffX = Math.Abs(parent.X - current.X);
        float diffY = Math.Abs(parent.Y - current.Y);
        float value = moveUnit / mSpd;

        switch (current.Block)
        {
        case -1:
            value = 9999999;
            break;

        case 0:
            value = moveUnit / mSpd;
            break;

        case 1:
            //value = (hallHP / hallSize) / (atk * aSpd);
            value = 1;
            break;

        case 2:
            //value = (fenceHP / fenceSize) / (atk * aSpd);
            value = 2;
            break;

        case 3:
            //value = (farmHP / farmSize) / (atk * aSpd);
            value = 2;
            break;

        case 4:
            //value = (sanctumHP / sanctumSize) / (atk * aSpd);
            value = 2;
            break;

        case 5:
            //value = (forgeHP / forgeSize) / (atk * aSpd);
            value = 2;
            break;
        }

        return(parent.G + value);
    }
Exemple #7
0
    // Start is called before the first frame update
    void Start()
    {
        objPlayer = GameObject.Find("Player");
        player    = objPlayer.GetComponent <Player>();

        dirVec    = new Vector3[4];
        dirVec[0] = new Vector3(0, 1);
        dirVec[1] = new Vector3(1, 0);
        dirVec[2] = new Vector3(0, -1);
        dirVec[3] = new Vector3(-1, 0);

        sprEnemyFront    = new Sprite[5];
        sprEnemyFront[0] = sprEnemyFront0;
        sprEnemyFront[1] = sprEnemyFront1;
        sprEnemyFront[2] = sprEnemyFront2;
        sprEnemyFront[3] = sprEnemyFront3;
        sprEnemyFront[4] = sprEnemyFront4;

        sprEnemyBack    = new Sprite[5];
        sprEnemyBack[0] = sprEnemyBack0;
        sprEnemyBack[1] = sprEnemyBack1;
        sprEnemyBack[2] = sprEnemyBack2;
        sprEnemyBack[3] = sprEnemyBack3;
        sprEnemyBack[4] = sprEnemyBack4;

        currentSprite = sprEnemyFront;

        HP = maxHP;

        map       = new List <Tile3>();
        path      = new List <Tile3>();
        openList  = new List <Tile3>();
        closeList = new List <Tile3>();

        playerPos = new Vector3(0, 0, 0);

        GetMap();
        Tile3 start = GetTile(transform.position.x, transform.position.y);
        Tile3 end   = GetTile(0, 0);

        GetRoute(start, end);

        objWorld = GameObject.Find("World").GetComponent <World>();
    }
Exemple #8
0
    /*
     * Button -> Play100
     * GameObj -> addCreditsObj
     * Function -> This can only be played when Credits has 100 or more. When pressed, Credits will be reduced
     * by 100 and play beings.
     */
    public void onClickPlay()
    {
        // This can only be played when credits have 100 or more
        if (creditAmount >= 100 && moneyAddFlag)
        {
            // When pressed, credits will be reduced by 100
            creditAmount -= 100;
            // Display the current amount of credits
            creditText.text = "Credits: " + creditAmount.ToString();
            // TODO: Start playing the game
            Tile1.SetActive(true);
            Tile2.SetActive(true);
            Tile3.SetActive(true);

            tile1Value = 0;
            tile2Value = 0;
            Tile3Value = 0;

            assignValues();
        }
    }
Exemple #9
0
    void GetMap()
    {
        map.Clear();
        for (int i = 0; i <= (2.05f - (-2.05f)) / 0.1f; i++)
        {
            for (int j = 0; j <= (2.05f - (-2.05f)) / 0.1f; j++)
            {
                int          block   = 0;
                float        x       = -2.05f + 0.1f * i;
                float        y       = -2.05f + 0.1f * j;
                RaycastHit2D raycast = Physics2D.Raycast(new Vector2(x - 0.01f, y - 0.01f), new Vector2(1, 1), 0.02f, LayerMask.GetMask("Object"));
                if (raycast)
                {
                    switch (raycast.transform.tag)
                    {
                    case "Wall": block = -1; break;

                    case "Hall": block = 1; break;

                    case "Fence": block = 2; break;

                    case "Farm": block = 3; break;

                    case "Sanctum": block = 4; break;

                    case "Forge": block = 5; break;
                    }
                }
                var loc = new Tile3()
                {
                    X     = x,
                    Y     = y,
                    Block = block
                };
                map.Add(loc);
            }
        }
    }
Exemple #10
0
    Tile3 GetTile(float x, float y)
    {
        float xx = (int)(x / moveUnit) * moveUnit + 0.05f;
        float yy = (int)(y / moveUnit) * moveUnit + 0.05f;

        if (xx < 0)
        {
            xx -= moveUnit;
        }
        if (yy < 0)
        {
            yy -= moveUnit;
        }
        Tile3 resTile = map[0];

        foreach (Tile3 tile in map)
        {
            if (tile.X - xx <= 0.01f && tile.Y - yy <= 0.01f)
            {
                resTile = tile;
            }
        }
        return(resTile);
    }
Exemple #11
0
    void GetRoute(Tile3 start, Tile3 end)
    {
        var startTile = start;
        var endTile   = end;

        openList.Clear();
        closeList.Clear();
        path.Clear();

        openList.Add(startTile);
        Tile3 tile = null;

        do
        {
            if (openList.Count == 0)
            {
                break;
            }

            tile = openList.OrderBy(o => o.F).First();
            openList.Remove(tile);
            closeList.Add(tile);

            if (tile == endTile)
            {
                break;
            }

            foreach (var target in map)
            {
                if (target.Block == -1)
                {
                    continue;
                }
                if (closeList.Contains(target))
                {
                    continue;
                }
                if (!IsNearLoc(tile, target))
                {
                    continue;
                }

                if (!openList.Contains(target))
                {
                    openList.Add(target);
                    target.Execute(tile, endTile);
                }
                else
                {
                    if (Tile3.CalcGValue(tile, target) < target.G)
                    {
                        target.Execute(tile, endTile);
                    }
                }
            }
        }while (tile != null);

        if (tile != endTile)
        {
            Debug.Log("Stuck");
        }

        do
        {
            path.Add(tile);
            tile = tile.Parent;
        }while (tile != null);
        path.Reverse();
        while (GetTile(start.X, start.Y) == GetTile(path[0].X, path[0].Y))
        {
            path.RemoveAt(0);
        }

        for (int i = 0; i < path.Count; i++)
        {
            Debug.DrawRay(new Vector3(path[i].X - 0.02f, path[i].Y), new Vector3(0.04f, 0), Color.white, 1);
            Debug.DrawRay(new Vector3(path[i].X, path[i].Y - 0.02f), new Vector3(0, 0.04f), Color.white, 1);
        }
    }
Exemple #12
0
    // Update is called once per frame
    void Update()
    {
        try
        {
            if (!isMoving)
            {
                if (!isPlayerTarget)
                {
                    currentPos = transform.position;
                    routePos   = new Vector3(path[0].X, path[0].Y);

                    RaycastHit2D raycast = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Object"));

                    bool isInRangeTem = false;
                    if (raycast)
                    {
                        if (path.IndexOf(GetTile(raycast.point.x, raycast.point.y)) >= 0)
                        {
                            isInRangeTem = true;
                            cooldown    -= Time.deltaTime;
                            while (cooldown < 0)
                            {
                                raycast.collider.transform.parent.GetComponent <BuildingObject>().DamageBuilding(atk);
                                cooldown += maxCooldown;
                            }
                        }
                    }
                    if (isInRangeTem == false)
                    {
                        isInRange = false;
                        cooldown  = maxCooldown / 2;
                        isMoving  = true;
                    }
                }
                else
                {
                    GetMap();
                    Tile3 start = GetTile(transform.position.x, transform.position.y);
                    Tile3 end   = GetTile(objPlayer.transform.position.x, objPlayer.transform.position.y);
                    GetRoute(start, end);
                    Debug.DrawRay(new Vector3(start.X - 0.02f, start.Y), new Vector3(0.04f, 0), Color.red, 1);
                    Debug.DrawRay(new Vector3(start.X, start.Y - 0.02f), new Vector3(0, 0.04f), Color.red, 1);
                    Debug.DrawRay(new Vector3(end.X - 0.02f, end.Y), new Vector3(0.04f, 0), Color.red, 1);
                    Debug.DrawRay(new Vector3(end.X, end.Y - 0.02f), new Vector3(0, 0.04f), Color.red, 1);


                    currentPos = transform.position;

                    routePos = new Vector3(path[0].X, path[0].Y);

                    RaycastHit2D raycast1 = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Player"));
                    RaycastHit2D raycast2 = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Object"));

                    bool isInRangeTem = false;
                    if (raycast1 && !raycast2)
                    {
                        isInRangeTem = true;
                        cooldown    -= Time.deltaTime;
                        while (cooldown < 0)
                        {
                            player.DamagePlayer(25);
                            cooldown += maxCooldown;
                        }
                    }
                    if (isInRangeTem == false)
                    {
                        isInRange = false;
                        cooldown  = maxCooldown / 2;
                        isMoving  = true;
                    }
                }
            }
            if (isMoving)
            {
                transform.Translate(speed * Time.deltaTime * 10 * (routePos - currentPos).normalized * moveUnit, Space.World);
                if ((routePos - transform.position).magnitude <= 0.01f)
                {
                    isMoving           = false;
                    transform.position = routePos;
                    path.RemoveAt(0);
                }
            }
        }
        catch { }

        // Health bar
        gameObject.GetComponentsInChildren <SpriteRenderer>()[2].transform.localScale    = new Vector3(1.2f * HP / maxHP, 0.2f, 0);
        gameObject.GetComponentsInChildren <SpriteRenderer>()[2].transform.localPosition = new Vector3(-0.6f * (1 - HP / maxHP), 1.3f, 0);
    }
Exemple #13
0
    void GetRoute(Tile3 start, Tile3 end)
    {
        var startTile = start;
        var endTile   = end;

        openList.Clear();
        closeList.Clear();
        path.Clear();

        openList.Add(startTile);
        Tile3        tile = null;
        List <Tile3> tileList;
        int          index;

        do
        {
            if (openList.Count == 0)
            {
                break;
            }

            tile = openList.OrderBy(o => o.F).First();
            openList.Remove(tile);
            closeList.Add(tile);

            tileList = new List <Tile3>();
            index    = map.IndexOf(tile);
            if (index < map.Count - 1)
            {
                tileList.Add(map[index + 1]);
            }
            if (index > 0)
            {
                tileList.Add(map[index - 1]);
            }
            if (index < map.Count - 42)
            {
                tileList.Add(map[index + 42]);
            }
            if (index > 41)
            {
                tileList.Add(map[index - 42]);
            }

            if (tile == endTile)
            {
                break;
            }
            if (tileList.Count == 0)
            {
                continue;
            }

            foreach (var target in tileList)
            {
                if (target.Block == -1)
                {
                    continue;
                }
                if (closeList.Contains(target))
                {
                    continue;
                }
                if (!IsNearLoc(tile, target))
                {
                    continue;
                }

                if (!openList.Contains(target))
                {
                    openList.Add(target);
                    target.Execute(tile, endTile);
                }
                else
                {
                    if (Tile3.CalcGValue(tile, target) < target.G)
                    {
                        target.Execute(tile, endTile);
                    }
                }
            }
        }while (tile != null);

        if (tile != endTile)
        {
            UnityEngine.Debug.Log("Stuck");
        }

        do
        {
            path.Add(tile);
            tile = tile.Parent;
        }while (tile != null);
        path.Reverse();
        while (GetTile(start.X, start.Y) == GetTile(path[0].X, path[0].Y))
        {
            path.RemoveAt(0);
        }
    }
Exemple #14
0
    // Update is called once per frame
    void Update()
    {
        if (!objWorld.isGameOver)
        {
            try
            {
                if (!isMoving)
                {
                    if (!isPlayerTarget)
                    {
                        currentPos = transform.position;
                        routePos   = new Vector3(path[0].X, path[0].Y);

                        if (routePos.y - currentPos.y > 0.001f)
                        {
                            sightDir = 0;
                        }
                        else if (routePos.x - currentPos.x > 0.001f)
                        {
                            sightDir = 1;
                        }
                        else if (currentPos.y - routePos.y > 0.001f)
                        {
                            sightDir = 2;
                        }
                        else if (currentPos.x - routePos.x > 0.001f)
                        {
                            sightDir = 3;
                        }

                        RaycastHit2D raycast = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Object"));

                        bool isInRangeTem = false;
                        if (raycast)
                        {
                            isInRangeTem = true;
                            cooldown    -= Time.deltaTime;
                            while (cooldown < 0)
                            {
                                raycast.collider.transform.parent.GetComponent <BuildingObject>().DamageBuilding(atk);
                                cooldown += maxCooldown;
                            }
                        }
                        if (isInRangeTem == false)
                        {
                            isInRange = false;
                            cooldown  = maxCooldown / 2;
                            isMoving  = true;
                        }
                    }
                    else
                    {
                        GetMap();
                        Tile3 start = GetTile(transform.position.x, transform.position.y);
                        Tile3 end   = GetTile(objPlayer.transform.position.x, objPlayer.transform.position.y);
                        GetRoute(start, end);

                        currentPos = transform.position;
                        routePos   = new Vector3(path[0].X, path[0].Y);

                        if (routePos.y - currentPos.y > 0.001f)
                        {
                            sightDir = 0;
                        }
                        else if (routePos.x - currentPos.x > 0.001f)
                        {
                            sightDir = 1;
                        }
                        else if (currentPos.y - routePos.y > 0.001f)
                        {
                            sightDir = 2;
                        }
                        else if (currentPos.x - routePos.x > 0.001f)
                        {
                            sightDir = 3;
                        }

                        RaycastHit2D raycast = Physics2D.Raycast(transform.position, routePos - currentPos, range, LayerMask.GetMask("Player"));

                        bool isInRangeTem = false;
                        if (raycast)
                        {
                            isInRangeTem = true;
                            cooldown    -= Time.deltaTime;
                            while (cooldown < 0)
                            {
                                player.DamagePlayer(25);
                                cooldown += maxCooldown;
                            }
                        }
                        if (isInRangeTem == false)
                        {
                            isInRange = false;
                            cooldown  = maxCooldown / 2;
                            isMoving  = true;
                        }
                    }
                }
                if (isMoving)
                {
                    transform.Translate(speed * Time.deltaTime * 10 * (routePos - currentPos).normalized * moveUnit, Space.World);
                    if ((routePos - transform.position).magnitude <= 0.01f)
                    {
                        isMoving           = false;
                        transform.position = routePos;
                        path.RemoveAt(0);
                    }

                    /*
                     * else if ((routePos - transform.position).magnitude >= 0.11f)
                     * {
                     *  isMoving = false;
                     *  Tile3 start = GetTile(transform.position.x, transform.position.y);
                     *  Tile3 end = GetTile(0, 0);
                     *  GetRoute(start, end);
                     * }
                     */
                }
            }
            catch { }

            if (sightDir >= 1 && sightDir <= 2)
            {
                currentSprite = sprEnemyFront;
            }
            else
            {
                currentSprite = sprEnemyBack;
            }

            imageTime += Time.deltaTime;
            while (imageTime > 1 / imageSpeed)
            {
                imageIndex++;
                imageTime -= 1 / imageSpeed;
            }
            imageIndex %= 9;

            int _imageIndex = imageIndex;
            if (_imageIndex > 4)
            {
                _imageIndex = -_imageIndex + 8;
            }

            gameObject.GetComponentsInChildren <SpriteRenderer>()[0].sprite = currentSprite[_imageIndex];

            if (sightDir >= 2)
            {
                gameObject.GetComponentsInChildren <SpriteRenderer>()[0].flipX = true;
            }
            else
            {
                gameObject.GetComponentsInChildren <SpriteRenderer>()[0].flipX = false;
            }

            // Health bar
            transform.Find("GhoulSprite").transform.Find("GhoulHealthBar").transform.localScale    = new Vector3(1.2f * HP / maxHP, 0.2f, 0);
            transform.Find("GhoulSprite").transform.Find("GhoulHealthBar").transform.localPosition = new Vector3(-0.6f * (1 - HP / maxHP), 1.2f, 0);
        }
    }