protected override void Fire(Vector3 direction, float projectileSpeed = 40f)
        {
            MeshObject projectileMesh = PrimitiveMeshes.Octahedron(Position, 0.5f, Assets.projectile4Texture);

            Scene.AddGameObject(new EnemyProjectile(projectileMesh, direction, projectileSpeed, damage));
        }
 public IceMonster(Vector3 position, float health, float damage)
     : base(PrimitiveMeshes.Tetrahedron(position, 3f, Assets.iceMonsterTexture), health, damage)
 {
     rand = new Random();
 }
 public IceShotgunDude(Vector3 position, float health, float damage)
     : base(PrimitiveMeshes.Octahedron(position, 3f, Assets.iceShotgunDudeTexture), health, damage)
 {
 }
        public bool Update(float deltaTime)
        {
            PlayerStats playerStats = game.PlayerStats;

            if (playerStats.dead)
            {
                return(false);
            }

            Scene scene = game.Scene;

            float sprintMultiplier = Controls.IsDown(Keybinds.sprint) ? 2.5f : 1f;

            Vector3 shift = Vector3.Zero;

            if (Controls.IsDown(Keybinds.forward))
            {
                shift += 20f * deltaTime * scene.Camera.Forward * sprintMultiplier;
            }
            if (Controls.IsDown(Keybinds.backwards))
            {
                shift -= 20f * deltaTime * scene.Camera.Forward;
            }
            if (Controls.IsDown(Keybinds.strafeRight))
            {
                shift += 15f * deltaTime * scene.Camera.Right;
            }
            if (Controls.IsDown(Keybinds.strafeLeft))
            {
                shift -= 15f * deltaTime * scene.Camera.Right;
            }

            float rotation = 0f;

            if (Controls.Scheme == ControlScheme.MouseKeyboard)
            {
                rotation += MathF.PI * 100f * deltaTime * Controls.MouseDelta();
            }
            else
            {
                if (Controls.IsDown(Keybinds.turnLeft))
                {
                    rotation -= 0.5f * MathF.PI * deltaTime * sprintMultiplier;
                }
                if (Controls.IsDown(Keybinds.turnRight))
                {
                    rotation += 0.5f * MathF.PI * deltaTime * sprintMultiplier;
                }
            }

            Vector3 realShift = scene.SmoothMovement(scene.Camera.CameraPos, shift, PlayerStats.thickness);

            scene.Camera.CameraPos += realShift;
            scene.Camera.Rotation  += rotation;

            int playerRoomX = (int)(scene.Camera.CameraPos.X / SceneGenerator.tileSize + SceneGenerator.size / 2f);
            int playerRoomY = (int)(scene.Camera.CameraPos.Z / SceneGenerator.tileSize + SceneGenerator.size / 2f);

            scene.Visited[playerRoomX, playerRoomY] = true;

            if (playerStats.tempHealth > 0f)
            {
                playerStats.tempHealth -= deltaTime * 0.2f;
                if (playerStats.tempHealth < 0f)
                {
                    playerStats.tempHealth = 0f;
                }
            }

            if (playerStats.shootTime > 0f)
            {
                playerStats.shootTime -= deltaTime;
            }

            if (playerStats.hit)
            {
                playerStats.hitTime -= deltaTime;
                if (playerStats.hitTime < 0f)
                {
                    playerStats.hitTime = 0f;
                    playerStats.hit     = false;
                }
            }

            playerStats.onFire = false;

            if (Controls.IsDown(Keybinds.fire) || (Controls.Scheme == ControlScheme.MouseKeyboard && Controls.IsLMBDown()))
            {
                if (playerStats.shootTime <= 0f)
                {
                    playerStats.shootTime = 1f / (3f + playerStats.skillShootingSpeed * 0.5f);
                    Assets.tsch.Play();

                    MeshObject projectileMesh = PrimitiveMeshes.Octahedron(scene.Camera.CameraPos + Vector3.Down, 0.4f, Assets.projectileTexture);
                    scene.AddGameObject(new Projectile(projectileMesh, scene.Camera.Forward, 75f, 2f));
                }
            }

            if (Controls.IsPressed(Keybinds.action))
            {
                if (Vector3.Distance(scene.Camera.CameraPos, new Vector3(playerStats.exitPosition.X, 0f, playerStats.exitPosition.Y)) < 7f &&
                    2 * playerStats.monsters >= playerStats.totalMonsters)
                {
                    if (playerStats.monsters < playerStats.totalMonsters)
                    {
                        playerStats.fullClear = false;
                    }
                    foreach (Collectible.Type?collectible in scene.Collectibles)
                    {
                        if (collectible != null)
                        {
                            playerStats.fullClear = false;
                        }
                    }

                    playerStats.floor++;
                    Achievements.UnlockLeveled("Level", playerStats.floor, game.HUD);

                    if (playerStats.fullClear)
                    {
                        Achievements.UnlockLeveled("100%", playerStats.floor - 1, game.HUD);
                    }

                    return(true);
                }
                else
                {
                    foreach (GameObject gameObject in scene.gameObjects)
                    {
                        if (gameObject is Collectible collectible && Vector3.Distance(scene.Camera.CameraPos, collectible.Position) < 7f)
                        {
                            collectible.PickUp(playerStats);
                        }
                    }
                }
            }

            if (playerStats.skillPoints > 0 && Controls.IsPressed(Keybinds.skills))
            {
                HUD.skillPointMenu = !HUD.skillPointMenu;
            }
            if (playerStats.skillPoints == 0)
            {
                HUD.skillPointMenu = false;
            }
            if (HUD.skillPointMenu)
            {
                if (Controls.IsPressed(Keybinds.skill1))
                {
                    playerStats.skillPoints--;
                    playerStats.skillMaxHealth++;
                    playerStats.maxHealth += 20f;
                    playerStats.AddHealth(20f);
                    Achievements.UnlockLeveled("HP", playerStats.skillMaxHealth, game.HUD);
                }
                else if (Controls.IsPressed(Keybinds.skill2))
                {
                    playerStats.skillPoints--;
                    playerStats.skillMaxArmor++;
                    playerStats.maxArmor += 20f;
                    playerStats.AddArmor(20f);
                    Achievements.UnlockLeveled("Armor", playerStats.skillMaxArmor, game.HUD);
                }
                else if (Controls.IsPressed(Keybinds.skill3) && playerStats.skillArmorProtection < 35)
                {
                    playerStats.skillPoints--;
                    playerStats.skillArmorProtection++;
                    playerStats.armorProtection += 0.02f;
                    Achievements.UnlockLeveled("AP", playerStats.skillArmorProtection, game.HUD);
                }
                else if (Controls.IsPressed(Keybinds.skill4))
                {
                    playerStats.skillPoints--;
                    playerStats.skillShootingSpeed++;
                    Achievements.UnlockLeveled("Speed", playerStats.skillShootingSpeed, game.HUD);
                }
            }

            return(false);
        }
Exemple #5
0
 public SpinnyBoi(Vector3 position, float health, float damage)
     : base(PrimitiveMeshes.TetraStar(position, 3f, Assets.spinnyBoiTexture), health, damage)
 {
 }
Exemple #6
0
 public BasicMonster(Vector3 position, float health, float damage)
     : base(PrimitiveMeshes.Tetrahedron(position, 3f, Assets.monsterTexture), health, damage)
 {
 }
Exemple #7
0
    public void drawHive()
    {
        GameObject worldController = GameObject.Find("WorldController");
        Hive       hive            = worldController.GetComponent <WorldController>().World.Hive;

        GameObject roomContainer = new GameObject("Rooms");

        roomContainer.transform.SetPositionAndRotation(new Vector3(0f, 0f, 0f), new Quaternion(0f, 0f, 0f, 0f));

        float startX = -10; //-(hive.Width / 2);

        List <NavMeshSurface> surfaces = new List <NavMeshSurface>();

        for (int x = 0; x < hive.Width; x++)
        {
            float startY = 10; //-(hive.Height / 2);

            for (int y = 0; y < hive.Height; y++)
            {
                Vector3 newPosition = new Vector3(startX, 0f, startY);
                //GameObject newRoom = new GameObject(hive.Rooms[x, y].ID);
                GameObject newRoom = GameObject.CreatePrimitive(PrimitiveType.Plane);
                newRoom.name = hive.Rooms[x, y].ID;
                newRoom.transform.SetParent(roomContainer.transform);
                newRoom.transform.SetPositionAndRotation(newPosition, new Quaternion(0f, 0f, 0f, 0f));
                newRoom.GetComponent <MeshRenderer>().material.mainTexture = HiveBackground;
                newRoom.AddComponent <NavMeshSurface>();
                surfaces.Add(newRoom.GetComponent <NavMeshSurface>());

                if (x == 0)
                {
                    GameObject lWall = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    lWall.name = hive.Rooms[x, y].ID + "_LeftWall";
                    lWall.transform.SetParent(newRoom.transform);
                    lWall.transform.localScale    = new Vector3(1, 2, 10);
                    lWall.transform.localPosition = new Vector3(-5, 1, 0);
                    lWall.GetComponent <MeshRenderer>().material = HiveWall;
                }
                if (x < hive.Width - 1)
                {
                    GameObject rDoorTop = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    rDoorTop.name = hive.Rooms[x, y].ID + "_RightDoorTop";
                    rDoorTop.transform.SetParent(newRoom.transform);
                    rDoorTop.transform.localScale    = new Vector3(1, 2, 4);
                    rDoorTop.transform.localPosition = new Vector3(5, 1, 3);
                    rDoorTop.GetComponent <MeshRenderer>().material = HiveWall;
                    GameObject rDoorBottom = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    rDoorBottom.name = hive.Rooms[x, y].ID + "_RightDoorBottom";
                    rDoorBottom.transform.SetParent(newRoom.transform);
                    rDoorBottom.transform.localScale    = new Vector3(1, 2, 4);
                    rDoorBottom.transform.localPosition = new Vector3(5, 1, -3);
                    rDoorBottom.GetComponent <MeshRenderer>().material = HiveWall;
                }
                if (x == hive.Width - 1)
                {
                    GameObject rWall = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    rWall.name = hive.Rooms[x, y].ID + "_RightWall";
                    rWall.transform.SetParent(newRoom.transform);
                    rWall.transform.localScale    = new Vector3(1, 2, 10);
                    rWall.transform.localPosition = new Vector3(5, 1, 0);
                    rWall.GetComponent <MeshRenderer>().material = HiveWall;
                }
                if (y == 0)
                {
                    GameObject tWall = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    tWall.name = hive.Rooms[x, y].ID + "_TopWall";
                    tWall.transform.SetParent(newRoom.transform);
                    tWall.transform.localScale    = new Vector3(10, 2, 1);
                    tWall.transform.localPosition = new Vector3(0, 1, 5);
                    tWall.GetComponent <MeshRenderer>().material = HiveWall;
                }
                if (y < hive.Height - 1)
                {
                    GameObject bDoorLeft = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    bDoorLeft.name = hive.Rooms[x, y].ID + "_BottomDoorLeft";
                    bDoorLeft.transform.SetParent(newRoom.transform);
                    bDoorLeft.transform.localScale    = new Vector3(4, 2, 1);
                    bDoorLeft.transform.localPosition = new Vector3(-3, 1, -5);
                    bDoorLeft.GetComponent <MeshRenderer>().material = HiveWall;
                    GameObject bDoorRight = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    bDoorRight.name = hive.Rooms[x, y].ID + "_BottomDoorRight";
                    bDoorRight.transform.SetParent(newRoom.transform);
                    bDoorRight.transform.localScale    = new Vector3(4, 2, 1);
                    bDoorRight.transform.localPosition = new Vector3(3, 1, -5);
                    bDoorRight.GetComponent <MeshRenderer>().material = HiveWall;
                }
                if (y == hive.Height - 1)
                {
                    GameObject bWall = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    bWall.name = hive.Rooms[x, y].ID + "_BottomWall";
                    bWall.transform.SetParent(newRoom.transform);
                    bWall.transform.localScale    = new Vector3(10, 2, 1);
                    bWall.transform.localPosition = new Vector3(0, 1, -5);
                    bWall.GetComponent <MeshRenderer>().material = HiveWall;
                }


                startY -= 10;
            }
            startX += 10;
        }

        foreach (NavMeshSurface surface in surfaces)
        {
            surface.BuildNavMesh();
        }

        GameObject hexagonCell = new PrimitiveMeshes().NewHexagonPrimitive("newCell", HiveWall);

        hexagonCell.transform.SetPositionAndRotation(new Vector3(-30, 0, -15), new Quaternion(0f, 0f, 0f, 0f));
        GameObject hexagonCell2 = new PrimitiveMeshes().NewHexagonPrimitive("newCell2", HiveWall);

        hexagonCell.transform.SetPositionAndRotation(new Vector3(-45, 0, -30), new Quaternion(0f, 0f, 0f, 0f));
    }