Beispiel #1
0
        // mendapatkan index tempat obstacle yang sedang aktif, diaktifkan paling awal, dan memiliki prefab id prefabId, pada pool yang sesuai
        public int GetIndexLastActive(ObstacleModel.ID prefabId)
        {
            int prefabIndex = GetPrefabIndex(prefabId);

            if (app.model.obstacleModel.indexFirstActive [prefabIndex] == ObstacleModel.INDEX_INACTIVE)
            {
                return(ObstacleModel.INDEX_INACTIVE);
            }
            int result = app.model.obstacleModel.indexNextActive [prefabIndex] - 1;

            if (result < 0)
            {
                result = app.model.obstacleModel.pool [prefabIndex].Count - 1;
            }
            return(result);
        }
Beispiel #2
0
        // menonaktifkan obstacle pertama yang aktif dari pool untuk prefab dengan ID prefabId
        public void DeactivateFromPool(ObstacleModel.ID prefabId)
        {
            int prefabIndex = GetPrefabIndex(prefabId);

            if (app.model.obstacleModel.indexFirstActive [prefabIndex] != ObstacleModel.INDEX_INACTIVE)
            {
                DeactivateObstacle(app.model.obstacleModel.pool [prefabIndex][app.model.obstacleModel.indexFirstActive [prefabIndex]]);
                app.model.obstacleModel.indexFirstActive [prefabIndex]++;
                if (app.model.obstacleModel.indexFirstActive [prefabIndex] >= app.model.obstacleModel.pool [prefabIndex].Count)
                {
                    app.model.obstacleModel.indexFirstActive [prefabIndex] = 0;
                }
                if (app.model.obstacleModel.indexFirstActive [prefabIndex] == app.model.obstacleModel.indexNextActive [prefabIndex])
                {
                    app.model.obstacleModel.indexFirstActive [prefabIndex] = ObstacleModel.INDEX_INACTIVE;
                }
            }
        }
Beispiel #3
0
        void Update()
        {
            // gerakkan obstacle
            for (int prefabIndex = 0; prefabIndex < app.model.obstacleModel.prefabs.Length; prefabIndex++)
            {
                int indexNow = app.model.obstacleModel.indexFirstActive [prefabIndex];
                if (indexNow != ObstacleModel.INDEX_INACTIVE)
                {
                    int   indexBorder  = app.model.obstacleModel.indexNextActive [prefabIndex];
                    float xTranslation = -app.model.groundModel.baseGroundSpeed * Time.deltaTime;
                    do
                    {
                        app.model.obstacleModel.pool[prefabIndex][indexNow].GetComponent <Rigidbody2D>().transform.Translate(
                            xTranslation, 0.0f, 0.0f
                            );
                        indexNow++;
                        if (indexNow >= app.model.obstacleModel.pool[prefabIndex].Count)
                        {
                            indexNow = 0;
                        }
                    } while (indexNow != indexBorder);
                }
            }

            // menyembunyikan obstacle yang terlalu kiri
            for (int prefabIndex = 0; prefabIndex < app.model.obstacleModel.prefabs.Length; prefabIndex++)
            {
                ObstacleModel.ID prefabId = app.model.obstacleModel.prefabIds [prefabIndex];
                if (GetIndexFirstActive(prefabId) != ObstacleModel.INDEX_INACTIVE)
                {
                    GameObject leftmostObstacle = app.model.obstacleModel.pool [prefabIndex] [GetIndexFirstActive(prefabId)];
                    while (leftmostObstacle.transform.position.x <= app.model.groundModel.xLeft)
                    {
                        DeactivateFromPool(prefabId);
                        if (GetIndexFirstActive(prefabId) == ObstacleModel.INDEX_INACTIVE)
                        {
                            break;
                        }
                        leftmostObstacle = app.model.obstacleModel.pool [prefabIndex] [GetIndexFirstActive(prefabId)];
                    }
                }
            }

            // menghitung waktu
            if (!app.model.screenModel.paused && !app.model.screenModel.gameOver)
            {
                app.model.obstacleModel.currentDeltaTime += Time.deltaTime;
            }

            // cek waktu kapan menggenerate obstacle baru
            if (app.model.obstacleModel.currentDeltaTime >= app.model.obstacleModel.nextObstacleTime)
            {
                int        rightmostGroundPrefabIndex = app.controller.groundController.GetPrefabIndex(GroundModel.ID.GROUND_MIDDLE);
                int        rightmostGroundPoolIndex   = app.controller.groundController.GetIndexLastActive(GroundModel.ID.GROUND_MIDDLE);
                GameObject rightmostGround            = app.model.groundModel.pool [rightmostGroundPrefabIndex] [rightmostGroundPoolIndex];
                Vector3    rightmostGroundPosition    = rightmostGround.transform.position;

                float deltaTime = Random.Range(app.model.obstacleModel.minimumDeltaTime, app.model.obstacleModel.maximumDeltaTime);
                app.model.obstacleModel.nextObstacleTime = deltaTime;
                app.model.obstacleModel.currentDeltaTime = 0.0f;
                int intObstacleID;
                if (app.controller.backgroundController.area == false)
                {
                    intObstacleID = Random.Range(0, 2);
                }
                else
                {
                    intObstacleID = Random.Range(1, 3);
                }

                ObstacleModel.ID nextObstacleID = (ObstacleModel.ID)intObstacleID;
                ActivateFromPool(nextObstacleID);

                // pemosisian
                GameObject rightmostObstacle = app.model.obstacleModel.pool[GetPrefabIndex(nextObstacleID)][GetIndexLastActive(nextObstacleID)];
                if (nextObstacleID == ObstacleModel.ID.OBSTACLE_GROUND_SPIKE)
                {
                    Debug.Log("duri");
                    rightmostObstacle.transform.position = new Vector3(
                        app.model.groundModel.xRight + app.model.groundModel.boundSize.x,
                        rightmostGroundPosition.y + (-app.model.groundModel.boundSize.y + app.model.obstacleModel.boundSizes [GetPrefabIndex(nextObstacleID)].y) * 0.5f,
                        rightmostObstacle.transform.position.z
                        );
                }
                else if (nextObstacleID == ObstacleModel.ID.OBSTACLE_SMALL_SLIME)
                {
                    Debug.Log("slime");
                    rightmostObstacle.transform.position = new Vector3(
                        app.model.groundModel.xRight + app.model.groundModel.boundSize.x,
                        rightmostGroundPosition.y + (-app.model.groundModel.boundSize.y + app.model.obstacleModel.boundSizes [GetPrefabIndex(nextObstacleID)].y) * 0.5f,
                        rightmostObstacle.transform.position.z
                        );
                }
                else
                {
                    Debug.Log("lebah");
                    rightmostObstacle.transform.position = new Vector3(
                        app.model.groundModel.xRight + app.model.groundModel.boundSize.x,
                        rightmostGroundPosition.y + (app.model.groundModel.boundSize.y * 5 / 7 + app.model.playerModel.boundSize.y),
                        rightmostObstacle.transform.position.z
                        );
                }
            }
        }
Beispiel #4
0
        // mendapatkan index tempat obstacle yang sedang aktif, diaktifkan paling awal, dan memiliki prefab id prefabId, pada pool yang sesuai
        public int GetIndexFirstActive(ObstacleModel.ID prefabId)
        {
            int prefabIndex = GetPrefabIndex(prefabId);

            return(app.model.obstacleModel.indexFirstActive [prefabIndex]);
        }
Beispiel #5
0
 // mendapatkan index tempat prefab ber-id prefabId pada array of prefab
 public int GetPrefabIndex(ObstacleModel.ID prefabId)
 {
     return(app.model.obstacleModel.prefabIdToPrefabIndex [(int)prefabId]);
 }