private void Update() { if (Input.GetMouseButtonDown(0)) { Ray ray = new Ray(transform.position, Vector3.forward); if (Physics.Raycast(ray, out RaycastHit hitInfo)) { if (hitInfo.collider.TryGetComponent(out Block block)) { _rigidbody.isKinematic = false; _rigidbody.velocity = Vector3.zero; } else if (hitInfo.collider.TryGetComponent(out Segment segment)) { _rigidbody.isKinematic = true; _rigidbody.velocity = Vector3.zero; } else if (hitInfo.collider.TryGetComponent(out Finish finish)) { _rigidbody.isKinematic = true; _rigidbody.velocity = Vector3.zero; FinishBlock?.Invoke(); } } } if (Input.GetMouseButton(0)) { if (_currentStick == null && _rigidbody.isKinematic == true) { _power = 0; _currentStick = CreateStick(); } _power += Time.deltaTime; _power = Mathf.Clamp(_power, 0f, 1f); if (_currentStick != null) { _currentStick.UpdateBlend(_power); } } if (Input.GetMouseButtonUp(0)) { transform.parent = null; if (_currentStick != null) { _rigidbody.isKinematic = false; _rigidbody.AddForce(Vector3.up * _jumpForce * _power, ForceMode.Impulse); Destroy(_currentStick.gameObject); } _currentStick = null; transform.rotation = Quaternion.identity;// new Quaternion(0, 0, 0, 0); transform.position = new Vector3(transform.position.x, transform.position.y, -4f); } }
private void PrepareLevel(bool spawnPlayer) { Level level = new Level(LEVEL_WIDTH, LEVEL_HEIGHT); BOUNDRY_BLOCKS[0] = new Vector3(0, 0); BOUNDRY_BLOCKS[1] = new Vector3(LEVEL_WIDTH * 2.65f, 0); BOUNDRY_BLOCKS[2] = new Vector3(0, LEVEL_HEIGHT * 2.65f); BOUNDRY_BLOCKS[3] = new Vector3(0, 0); for (int x = 0; x < LEVEL_WIDTH; x++) { for (int y = 0; y < LEVEL_HEIGHT; y++) { Color color = currentLevelTex.GetPixel(x, y); if (ColorMap.MatchesColor(color, ColorMap.THEME_FOREST)) // read in theme { ThemeLoader.LoadForestTheme(); } else if (ColorMap.MatchesColor(color, ColorMap.THEME_DESERT)) { ThemeLoader.LoadDesertTheme(); } else if (ColorMap.MatchesColor(color, ColorMap.DULL_BLOCK)) { DullBlock block = Instantiate(defaultBlock); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.CHECKPOINT)) { CheckpointBlock block = Instantiate(checkpointBlock); block.block = Block.init(x, y, level, block.gameObject); CheckpointManager.AddCheckpoint(block); } else if (ColorMap.MatchesColor(color, ColorMap.AIR_BLOCK)) { AirBlock block = Instantiate(airBlock); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.SPEED_BLOCK)) { SpeedBlock block = Instantiate(speedBlock); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.CRUMBLY_BLOCK)) { CrumblyBlock block = Instantiate(crumblyBlock); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.FINISH)) { FinishBlock block = Instantiate(finishBlock); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.LEAP_BOOST_BLOCK)) { LeapBoostBlock block = Instantiate(leapBoostBlock); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.AUTO_LEAP_BOOST_BLOCK)) { AutoLeapBoostBlock block = Instantiate(autoLeapBoostBlock); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.DISGUISED_CRUMBLY_BLOCK)) { CrumblyBlock block = Instantiate(crumblyBlock); Disguise disguise = block.gameObject.AddComponent <Disguise>(); disguise.identity = crumblyBlock.GetComponent <SpriteRenderer>().sprite; disguise.camouflage = defaultBlock.GetComponent <SpriteRenderer>().sprite; disguise.HideIdentity(); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.DISGUISED_AUTO_LEAP_BOOST_BLOCK)) { AutoLeapBoostBlock block = Instantiate(autoLeapBoostBlock); Disguise disguise = block.gameObject.AddComponent <Disguise>(); disguise.identity = autoLeapBoostBlock.GetComponent <SpriteRenderer>().sprite; disguise.camouflage = defaultBlock.GetComponent <SpriteRenderer>().sprite; disguise.HideIdentity(); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.DISGUISED_DULL_BLOCK)) { DullBlock block = Instantiate(defaultBlock); Disguise disguise = block.gameObject.AddComponent <Disguise>(); disguise.identity = defaultBlock.GetComponent <SpriteRenderer>().sprite; disguise.camouflage = null; disguise.HideIdentity(); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.GHOST_BLOCK)) { DullBlock block = Instantiate(defaultBlock); Disguise disguise = block.gameObject.AddComponent <Disguise>(); disguise.identity = null; disguise.camouflage = null; disguise.HideIdentity(); block.block = Block.init(x, y, level, block.gameObject); } else if (ColorMap.MatchesColor(color, ColorMap.ENEMY_SUKAMON)) { // spawn sukamon EnemyControl ec = Instantiate(sukamon); ec.transform.position = new Vector3(x * 2.65f, y * 2.65f + 0.5f); } else if (ColorMap.MatchesColor(color, ColorMap.DIGIVICE)) { } else if (ColorMap.MatchesColor(color, ColorMap.ENEMY_KINGETEMON)) { EnemyControl ec = Instantiate(kingetemon); ec.transform.position = new Vector3(x * 2.65f, y * 2.65f + 0.5f); } else if (ColorMap.MatchesColor(color, ColorMap.ENEMY_SUKAMON_STATIC)) { EnemyControl ec = Instantiate(sukamon); ec.blockRadius = 0; ec.transform.position = new Vector3(x * 2.65f, y * 2.65f + 0.5f); } else if (ColorMap.MatchesColor(color, ColorMap.ENEMY_GIGANTIC_SUKAMON)) { EnemyControl ec = Instantiate(giganticSukamon); ec.blockRadius = 20; ec.moveSpeed = 8; //ec.health *= 5; ec.transform.position = new Vector3(x * 2.65f, y * 2.65f + 0.5f); } else if (ColorMap.MatchesColor(color, ColorMap.WOODEN_SIGN)) { SignDialogue sd = Instantiate(signDialogue); sd.transform.position = new Vector3(x * 2.65f, y * 2.65f + 0.5f); } } } currentLevel = level; foreach (var observer in OBSERVERS) { observer.OnLevelLoaded(level); } if (spawnPlayer) { int score = 1; if (currentPlayerInstance != null) { score = currentPlayerInstance.score; } Vector3 pos = CheckpointManager.ActiveCheckpoint.transform.position; Player p = Instantiate(player); p.transform.position = new Vector3(pos.x, pos.y + 5, pos.z); currentPlayerInstance = p; p.score = score; Debug.Log(p.score); Camera.main.GetComponent <CamCapture>().player = p; Camera.main.GetComponent <CamCapture>().boundryBlocks = BOUNDRY_BLOCKS; } }