Build TravelRun intro and tutorial flow
This commit is contained in:
@@ -0,0 +1,200 @@
|
||||
using UnityEngine;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
// 코스 데이터가 발판 위에 따로 얹는 장애물 프리팹을 제어한다.
|
||||
public class CourseObstacle : MonoBehaviour {
|
||||
public enum ObstacleKind {
|
||||
Jump,
|
||||
Slide
|
||||
}
|
||||
|
||||
public ObstacleKind obstacleKind = ObstacleKind.Jump;
|
||||
public Transform lowObstacle;
|
||||
public SlideObstaclePattern slidePattern;
|
||||
public Transform ceilingPlatform;
|
||||
|
||||
private Platform.PlatformSkin reservedSkin = Platform.PlatformSkin.Airport;
|
||||
private Platform.PlatformPattern reservedPlatformPattern = Platform.PlatformPattern.LowMid;
|
||||
private SlideObstaclePattern.SlideLayout reservedSlideLayout = SlideObstaclePattern.SlideLayout.CenterPair;
|
||||
|
||||
public void Configure(
|
||||
Platform.PlatformSkin platformSkin,
|
||||
Platform.PlatformPattern platformPattern,
|
||||
SlideObstaclePattern.SlideLayout slideLayout) {
|
||||
reservedSkin = platformSkin;
|
||||
reservedPlatformPattern = platformPattern;
|
||||
reservedSlideLayout = slideLayout;
|
||||
ApplyConfiguration();
|
||||
}
|
||||
|
||||
private void Awake() {
|
||||
CacheReferences();
|
||||
}
|
||||
|
||||
private void OnEnable() {
|
||||
ApplyConfiguration();
|
||||
}
|
||||
|
||||
private void CacheReferences() {
|
||||
if(lowObstacle == null)
|
||||
{
|
||||
Transform foundObstacle = transform.Find("Jump Obstacle");
|
||||
if(foundObstacle != null)
|
||||
{
|
||||
lowObstacle = foundObstacle;
|
||||
}
|
||||
}
|
||||
|
||||
if(slidePattern == null)
|
||||
{
|
||||
slidePattern = GetComponent<SlideObstaclePattern>();
|
||||
}
|
||||
|
||||
if(ceilingPlatform == null)
|
||||
{
|
||||
Transform foundCeiling = transform.Find("Ceiling Platform");
|
||||
if(foundCeiling != null)
|
||||
{
|
||||
ceilingPlatform = foundCeiling;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyConfiguration() {
|
||||
CacheReferences();
|
||||
|
||||
if(obstacleKind == ObstacleKind.Jump)
|
||||
{
|
||||
ApplyJumpPosition();
|
||||
}
|
||||
else if(slidePattern != null)
|
||||
{
|
||||
slidePattern.ConfigureLayout(reservedSlideLayout);
|
||||
}
|
||||
|
||||
ApplyVisualSkin();
|
||||
}
|
||||
|
||||
private void ApplyJumpPosition() {
|
||||
if(lowObstacle == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 localPosition = lowObstacle.localPosition;
|
||||
localPosition.x = GetJumpObstacleX(reservedPlatformPattern);
|
||||
lowObstacle.localPosition = localPosition;
|
||||
}
|
||||
|
||||
private float GetJumpObstacleX(Platform.PlatformPattern platformPattern) {
|
||||
switch(platformPattern)
|
||||
{
|
||||
case Platform.PlatformPattern.LowLeft:
|
||||
return -0.44f;
|
||||
case Platform.PlatformPattern.LowRight:
|
||||
return 0.44f;
|
||||
case Platform.PlatformPattern.LowMid:
|
||||
default:
|
||||
return 0f;
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyVisualSkin() {
|
||||
#if UNITY_EDITOR
|
||||
if(obstacleKind == ObstacleKind.Jump)
|
||||
{
|
||||
ApplySprite(lowObstacle, LoadSpriteAtPath(GetLowObstacleSkinPath(reservedSkin)));
|
||||
return;
|
||||
}
|
||||
|
||||
Sprite hangingSprite = LoadSpriteAtPath(GetHangingObstacleSkinPath(reservedSkin));
|
||||
Sprite ceilingSprite = LoadSpriteAtPath(GetCeilingSkinPath(reservedSkin));
|
||||
|
||||
if(slidePattern != null && slidePattern.obstacles != null)
|
||||
{
|
||||
for(int i = 0; i < slidePattern.obstacles.Length; i++)
|
||||
{
|
||||
ApplySprite(slidePattern.obstacles[i], hangingSprite);
|
||||
}
|
||||
}
|
||||
|
||||
ApplySprite(ceilingPlatform, ceilingSprite);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
private void ApplySprite(Transform target, Sprite sprite) {
|
||||
if(target == null || sprite == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SpriteRenderer spriteRenderer = target.GetComponent<SpriteRenderer>();
|
||||
if(spriteRenderer != null)
|
||||
{
|
||||
spriteRenderer.sprite = sprite;
|
||||
}
|
||||
}
|
||||
|
||||
private Sprite LoadSpriteAtPath(string assetPath) {
|
||||
if(string.IsNullOrEmpty(assetPath))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return AssetDatabase.LoadAssetAtPath<Sprite>(assetPath);
|
||||
}
|
||||
|
||||
private string GetLowObstacleSkinPath(Platform.PlatformSkin platformSkin) {
|
||||
switch(platformSkin)
|
||||
{
|
||||
case Platform.PlatformSkin.Japan:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Obstacle_StoneLantern.png";
|
||||
case Platform.PlatformSkin.China:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Obstacle_MarketCrate.png";
|
||||
case Platform.PlatformSkin.USA:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Obstacle_Cone.png";
|
||||
case Platform.PlatformSkin.Airport:
|
||||
default:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Obstacle_Suitcases.png";
|
||||
}
|
||||
}
|
||||
|
||||
private string GetHangingObstacleSkinPath(Platform.PlatformSkin platformSkin) {
|
||||
switch(platformSkin)
|
||||
{
|
||||
case Platform.PlatformSkin.Japan:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Hanging_RoadSign.png";
|
||||
case Platform.PlatformSkin.China:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Hanging_RedLanterns.png";
|
||||
case Platform.PlatformSkin.USA:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Hanging_Banner.png";
|
||||
case Platform.PlatformSkin.Airport:
|
||||
default:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Hanging_AirportSign.png";
|
||||
}
|
||||
}
|
||||
|
||||
private string GetCeilingSkinPath(Platform.PlatformSkin platformSkin) {
|
||||
if(platformSkin == Platform.PlatformSkin.Airport)
|
||||
{
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Platform_AirportCeiling.png";
|
||||
}
|
||||
|
||||
switch(platformSkin)
|
||||
{
|
||||
case Platform.PlatformSkin.Japan:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Platform_Japan.png";
|
||||
case Platform.PlatformSkin.China:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Platform_China.png";
|
||||
case Platform.PlatformSkin.USA:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Platform_USA.png";
|
||||
case Platform.PlatformSkin.Airport:
|
||||
default:
|
||||
return "Assets/Sprites/ObstacleSkins/Skin_Platform_AirportFloorTile.png";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user