//===================================================== private static string GetModelPath(eObstacleType type, int index) { var path = new StringBuilder(); switch (type) { case eObstacleType.SWINGING_ARM: path.Append("Prefabs/Obstacles/Swinging/Arm/"); index = Mathf.Clamp(index, 0, _obstaclesSwingingArm.Count - 1); path.Append(_obstaclesSwingingArm[index]); break; case eObstacleType.SWINGING_BODY: path.Append("Prefabs/Obstacles/Swinging/Body/"); index = Mathf.Clamp(index, 0, _obstaclesSwingingBody.Count - 1); path.Append(_obstaclesSwingingBody[index]); break; case eObstacleType.PUSHABLE_BOX: path.Append("Prefabs/Obstacles/Pushable/Box/"); index = Mathf.Clamp(index, 0, _pushableBoxes.Count - 1); path.Append(_pushableBoxes[index]); break; } return(string.IsNullOrEmpty(path.ToString()) == false ? path.ToString() : string.Empty); }
//===================================================== public static Object GetPrefab(eObstacleType type) { Init(); Object prefab = null; switch (type) { case eObstacleType.SWINGING: prefab = Resources.Load("Prefabs/Obstacles/Swinging/pfbSwingingObstacle"); break; case eObstacleType.PUSHABLE_BOX: prefab = Resources.Load("Prefabs/Obstacles/Pushable/pfbPushable"); break; case eObstacleType.MAGICAL_TRAP_ICE: prefab = Resources.Load("Prefabs/Obstacles/MagicalTraps/pfbMagicalTrapIce"); break; case eObstacleType.MAGICAL_TRAP_WIND: prefab = Resources.Load("Prefabs/Obstacles/MagicalTraps/pfbMagicalTrapWind"); break; } if (prefab != null) { return(prefab); } Debug.Log("Obstacle prefab not found in resources"); return(null); }
//===================================================== private static Transform CreateObstacleContainers(eObstacleType type) { // Create containers for obstacles if they don't already exist var container = GameObject.Find("Obstacles"); var swinging = GameObject.Find("Swinging"); var pushable = GameObject.Find("Pushable"); var magicalTrap = GameObject.Find("MagicalTraps"); if (container == null) { container = CreateContainer("Obstacles"); if (swinging == null) { swinging = CreateContainer("Swinging", container); } if (pushable == null) { pushable = CreateContainer("Pushable", container); } if (magicalTrap == null) { magicalTrap = CreateContainer("MagicalTraps", container); } } else { Debug.Log("Instance of obstacle container found."); } // Return appropriate container switch (type) { case eObstacleType.SWINGING: return(swinging.transform); case eObstacleType.PUSHABLE_BOX: return(pushable.transform); case eObstacleType.MAGICAL_TRAP_ICE: case eObstacleType.MAGICAL_TRAP_WIND: return(magicalTrap.transform); } return(container.transform); }
//===================================================== private static void AddPushableObject() { const eObstacleType type = eObstacleType.PUSHABLE_BOX; var pfb = ResourcesObstacles.GetPrefab(type); var mdl = ResourcesObstacles.GetModel(type, 0); if (pfb == null) { return; } // Create containers for obstacles if they don't already exist var container = CreateObstacleContainers(type); var prefab = PrefabUtility.InstantiatePrefab(pfb) as GameObject; if (prefab == null) { return; } switch (type) { case eObstacleType.PUSHABLE_BOX: prefab.name = "PushableBox"; break; } // Add to traps gameObject in hierarchy prefab.transform.parent = container; var script = prefab.GetComponent <Obstacle>(); if (script != null) { script.Type = type; if (mdl != null) { var model = PrefabUtility.InstantiatePrefab(mdl) as GameObject; script.Init(model); } } PositionObjectAndSelect(prefab); }
//===================================================== public void Init(MagicalTrap parent, eObstacleType type) { _parent = parent; _type = type; // ToDo: select / activate particle emmisions switch (_type) { case eObstacleType.MAGICAL_TRAP_ICE: _psIceFx.enableEmission = true; break; case eObstacleType.MAGICAL_TRAP_WIND: _psWindFx.enableEmission = true; break; } }
//===================================================== private static void AddObstacleOfType(eObstacleType type) { switch (type) { case eObstacleType.SWINGING: AddObstacleSwinging(); break; case eObstacleType.PUSHABLE_BOX: AddPushableObject(); break; case eObstacleType.MAGICAL_TRAP_ICE: case eObstacleType.MAGICAL_TRAP_WIND: AddMagicalTrap(type); break; } }
//===================================================== private static void AddObstacleSwinging() { const eObstacleType type = eObstacleType.SWINGING; var pfb = ResourcesObstacles.GetPrefab(type); var mdl01 = ResourcesObstacles.GetModel(eObstacleType.SWINGING_ARM, 0); var mdl02 = ResourcesObstacles.GetModel(eObstacleType.SWINGING_BODY, 0); if (pfb == null) { return; } // Create containers for obstacles if they don't already exist var container = CreateObstacleContainers(type); var prefab = PrefabUtility.InstantiatePrefab(pfb) as GameObject; if (prefab == null) { return; } prefab.name = "SwingingObstacle"; // Add to traps gameObject in hierarchy prefab.transform.parent = container; var script = prefab.GetComponent <SwingingObstacle>(); if (script != null) { script.Type = type; if (mdl01 != null && mdl02 != null) { var model01 = PrefabUtility.InstantiatePrefab(mdl01) as GameObject; var model02 = PrefabUtility.InstantiatePrefab(mdl02) as GameObject; script.Init(model01, model02); } } PositionObjectAndSelect(prefab); }
//===================================================== public static Object GetModel(eObstacleType type, int index) { Init(); var path = GetModelPath(type, index); if (string.IsNullOrEmpty(path) == false) { var model = Resources.Load(path); if (model != null) { return(model); } } Debug.Log("Obstacle not found in resources: " + type + " [" + index + "]"); return(null); }
//===================================================== private static void AddMagicalTrap(eObstacleType type) { var pfb = ResourcesObstacles.GetPrefab(type); if (pfb == null) { return; } // Create containers for obstacles if they don't already exist var container = CreateObstacleContainers(type); var prefab = PrefabUtility.InstantiatePrefab(pfb) as GameObject; if (prefab == null) { return; } switch (type) { case eObstacleType.MAGICAL_TRAP_ICE: prefab.name = "MagicalTrapIce"; break; case eObstacleType.MAGICAL_TRAP_WIND: prefab.name = "MagicalTrapWind"; break; } // Add to traps gameObject in hierarchy prefab.transform.parent = container; var script = prefab.GetComponent <MagicalTrap>(); if (script != null) { script.Type = type; } PositionObjectAndSelect(prefab); }