List <GameObject> InstantiateStaticObjects(Parser.Tr2Room tr2room, int roomidx, Transform owner) { List <GameObject> objects = new List <GameObject>(); for (int staticMeshCount = 0; staticMeshCount < tr2room.NumStaticMeshes; staticMeshCount++) { for (int k = 0; k < m_StaticPrefabs.Count; k++) { //room static meshes are instantce of Level mesh asset //choose only the meshe from whole level that belongs to this room if (tr2room.StaticMeshes[staticMeshCount].ObjectID == m_leveldata.StaticMeshes[k].ObjectID) { Vector3 meshPos; meshPos.x = tr2room.StaticMeshes[staticMeshCount].x; meshPos.y = -tr2room.StaticMeshes[staticMeshCount].y; meshPos.z = tr2room.StaticMeshes[staticMeshCount].z; Vector3 rot; rot.x = 0; rot.y = ((tr2room.StaticMeshes[staticMeshCount].Rotation >> 14) & 0x03) * 90; rot.z = 0; int itemIdx = (int)m_leveldata.StaticMeshes[k].StartingMesh; GameObject go = (GameObject)GameObject.Instantiate(m_StaticPrefabs[k].UnityObject, meshPos * Settings.SceneScaling, Quaternion.Euler(rot)); go.name = "room" + roomidx + "__staticBase" + k + "__meshBase" + itemIdx; go.transform.parent = owner; AICondition.SetActive(go, true); objects.Add(go); } } } return(objects); }
public static bool IsCondition(AICondition condition, Prop prop, Power p = null) { bool isTrue = true; Character ch = prop as Character; switch (condition.type) { case AIConditionType.Held: isTrue = ch == null || ch.isHeld(); break; case AIConditionType.Rooted: isTrue = ch == null || ch.isRooted(); break; case AIConditionType.Health: isTrue = prop.GetHealthPct() < condition.threshold; break; case AIConditionType.Energy: isTrue = ch == null || ch.GetEnergyPct() < condition.threshold; break; case AIConditionType.Random: isTrue = Random.Range(0, 100) < condition.threshold; break; case AIConditionType.Shielded: isTrue = p && prop.stats[RPGSettings.GetResistanceStat(p.type)].currentValue > condition.threshold; break; case AIConditionType.Boosted: isTrue = p && ch && ch.stats[RPGSettings.GetDamageStat(p.type)].currentValue > condition.threshold; break; case AIConditionType.Status: isTrue = prop.GetStacks(condition.status) > 0; break; } if (condition.reverse) { isTrue = !isTrue; } return(isTrue); }
private void Awake() { cat = GetComponent <Cat>(); if (cat == null) { isAIEnabled = false; Debug.LogError("Cat is null, Cat AI disabled"); } idleCondition = new AICondition(AttributeType.NONE, 100); }
AICondition CheckDistance() { disTanceM = Vector3.Distance(target[0].transform.position, this.transform.position); disTanceB = Vector3.Distance(target[1].transform.position, this.transform.position); if (disTanceM <= 5.0f || disTanceB <= 5.0f) { return(aiCondition = AICondition.Kick); // AICondition.Kick; } return(aiCondition = AICondition.Idle); }
void Draw(AICondition condition) { if (condition == null) { return; } var obj = new SerializedObject(condition); obj.Update(); DrawPropertiesExcluding(obj, "m_Script"); obj.ApplyModifiedProperties(); }
List <Parser.Tr2StaticMesh> BuildStaticPrefabObjects(Transform owner) { List <Parser.Tr2StaticMesh> objects = new List <Parser.Tr2StaticMesh>(); for (int k = 0; k < (int)m_leveldata.NumStaticMeshes; k++) { Parser.Tr2StaticMesh tr2staticmesh = m_leveldata.StaticMeshes[k]; int itemIdx = (int)tr2staticmesh.StartingMesh; //m_leveldata.StaticMeshes[k] GameObject go = CreateObjectWithID(itemIdx, Vector3.zero, Quaternion.identity, "__staticBase" + k); go.transform.parent = owner; go.AddComponent <MeshCollider>(); AICondition.SetActive(go, false); tr2staticmesh.UnityObject = go; objects.Add(tr2staticmesh); } return(objects); }
void SwitchState(AICondition aic) { state = (int)aic; switch (state) { case 0: // Idle { break; } case 1: // Kick { Attack(); break; } case 2: // Dead { break; } } }
public List <AICondition> ConvertToAIConditionsFromAttributes(List <Attribute> attributes) { return(attributes.Select(attr => AICondition.FromAttribute(attr)).ToList <AICondition>()); }
int m_bPlayerInstanceCount = 0; //flag to disable multiple player instances void InitialiseInstance(Parser.Tr2Item tr2item) { GameObject go = tr2item.UnityObject; go.name += " " + tr2item.ObjectID; if (tr2item.ObjectID == 0) { if (m_bPlayerInstanceCount == 1) { GameObject.Destroy(tr2item.UnityObject); return; } //playable character found! m_Player = go; m_Player.layer = UnityLayer.Player; m_PrevPlayPos = m_Player.transform.position; m_Player.transform.parent = m_LevelRoot; if (m_leveldata.Camera != null) { m_leveldata.Camera.target = m_Player.transform; } LaraStatePlayer stateplayer = m_Player.AddComponent <LaraStatePlayer>(); stateplayer.tranimations = m_DynamicPrefabs[0].AnimClips; m_Player.name = "Lara"; GameObject FlashLight = new GameObject("Fire Torch"); FlashLight.AddComponent <FlashLightStatePlayer>(); Light lt = FlashLight.AddComponent <Light>(); lt.type = LightType.Spot; lt.range = 5; lt.spotAngle = 70; lt.intensity = 5; FlashLight.transform.parent = m_Player.transform.Find("objPart:0");//.Find("objPart:7").Find("objPart:14"); FlashLight.transform.position = FlashLight.transform.parent.position; FlashLight.transform.forward = FlashLight.transform.parent.forward; lt.enabled = false; Player player = go.AddComponent <Player>(); player.m_Tr2Item = tr2item; HealthMonitor healthmon = go.AddComponent <HealthMonitor>(); PlayerCollisionHandler playercollider = go.AddComponent <PlayerCollisionHandler>(); //Initialise Current Active Room for player player.m_AnimStatePlayer = stateplayer; player.m_Room = SetRoomForPlayer(); if (player.m_Room != null) { Debug.Log("Player Rooms: " + player.m_Room.name); player.SetSwimState(player.m_Room); } AICondition.SetActive(m_Player, true); //set every game object under player as player Transform[] objs = m_Player.GetComponentsInChildren <Transform>(); foreach (Transform t in objs) { t.gameObject.layer = UnityLayer.Player; } //Add Charecter light GameObject LaraLight = new GameObject("Lara Light"); Light light = LaraLight.AddComponent <Light>(); light.transform.position = m_Player.transform.position; light.type = LightType.Directional; light.transform.forward = Vector3.Reflect(Vector3.one, -Vector3.up); light.transform.parent = m_Player.transform; light.cullingMask = MaskedLayer.Player; light.intensity = 0.3f; light.gameObject.AddComponent <LaraLightStatePlayer>(); m_bPlayerInstanceCount = 1; } //check if we have any custom behabiour script for object else if (m_OnAttachBehabiourScript != null && !m_OnAttachBehabiourScript(tr2item.UnityObject, tr2item.ObjectID, m_Player, tr2item)) { go.AddComponent <DefaultStatePlayer>(); // user did not attached any custom behabiour. so use default one AICondition.SetActive(go, true); //Added default activation state active } }
List <Tr2Moveable> BuildDynamicPrefabObjects(Transform container) { List <Tr2Moveable> objects = new List <Tr2Moveable>(); for (int MovableObjectIdx = 0; MovableObjectIdx < m_leveldata.Moveables.Length; MovableObjectIdx++) { Tr2Moveable tr2movable = m_leveldata.Moveables[MovableObjectIdx]; int startclipid = tr2movable.Animation; if (startclipid > m_leveldata.Animations.Length) { continue; } GameObject[] parts = CreateMultiPartObject(tr2movable); Transform[] transformtree = new Transform[parts.Length]; for (int i = 0; i < parts.Length; i++) { transformtree[i] = parts[i].transform; if (tr2movable.ObjectID != 0) { MeshCollider mf = parts[i].AddComponent <MeshCollider>(); } } //creat a place holder gameObject and make it root transform ; tr2movable.UnityObject = new GameObject("prefab type:" + MovableObjectIdx); GameObject objRoot = tr2movable.UnityObject; objRoot.transform.parent = container; objRoot.transform.Translate(Vector3.zero); objRoot.transform.Rotate(Vector3.zero); //add unity animation components tr2movable.UnityAnimation = objRoot.AddComponent <Animation>(); tr2movable.UnityAnimation.wrapMode = WrapMode.Loop; tr2movable.TransformsTree = transformtree; tr2movable.AnimationStartOffset = startclipid; tr2movable.AnimClips = new List <TRAnimationClip>(); objects.Add(tr2movable); //build mesh tree with stack ComputionModel.StackInit(); //setup parent transform Transform Parent = transformtree[0]; Parent.Translate(Vector3.zero); Parent.Rotate(Vector3.zero); Parent.parent = objRoot.transform; int animRootId = 0; for (int i = 0; i < tr2movable.NumMeshes; i++) { if (i != 0) // first mesh - position to world coordinates, set rotation { Vector3 meshPos = Vector3.zero; // tr2movable.MeshTree is a byte offset into MeshTrees[], // so we have to do a little converting here... int offsetMeshTree = (int)tr2movable.MeshTree; int Idx = (i - 1) * 4 + offsetMeshTree; meshPos.x = (float)m_leveldata.MeshTrees[Idx + 1]; meshPos.y = -(float)m_leveldata.MeshTrees[Idx + 2]; meshPos.z = (float)m_leveldata.MeshTrees[Idx + 3]; int flagVal1 = (int)((m_leveldata.MeshTrees[Idx + 0]) & 0x01); int flagVal2 = (int)((m_leveldata.MeshTrees[Idx + 0]) & 0x02); if (flagVal1 > 0 && flagVal2 > 0) { //print("poping - pushing "); animRootId = ComputionModel.Pop(); Parent = transformtree[animRootId]; animRootId = ComputionModel.Push(animRootId); } else { if (flagVal1 > 0) // pop last saved anchor { //print("poping "+i); animRootId = ComputionModel.Pop(); Parent = transformtree[animRootId]; } else { Parent = transformtree[i - 1]; } if (flagVal2 > 0) // push new anchor save { //print("pushing "+i); animRootId = ComputionModel.Push(i - 1); //prevParent = transformtree[animRootId]; } } transformtree[i].parent = Parent; transformtree[i].localPosition = meshPos * Settings.SceneScaling; //transformtree[i].localRotation = relRot; } } AICondition.SetActive(objRoot, false); } return(objects); }
// Use this for initialization void Start() { aiCondition = AICondition.Idle; }
public static AICondition[] Remove(int index, AICondition[] list) { ArrayList tmp = new ArrayList(); foreach(AICondition str in list) tmp.Add(str); tmp.RemoveAt(index); return tmp.ToArray(typeof(AICondition)) as AICondition[]; }
public static AICondition[] Add(AICondition n, AICondition[] list) { ArrayList tmp = new ArrayList(); foreach(AICondition str in list) tmp.Add(str); tmp.Add(n); return tmp.ToArray(typeof(AICondition)) as AICondition[]; }
public static bool OnAttachingBehaviourToObject(GameObject AI, int ObjectID, GameObject Player, Parser.Tr2Item tr2item) { bool retval = false; //TEST: if(ObjectID == 32 || ObjectID == 15 ) return false; if (ObjectID == 15) { DogStatePlayer dog = AI.AddComponent <DogStatePlayer>(); dog.m_FollowTransform = Player.transform; dog.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 16) { GoonWithMaskStatePlayer goon = AI.AddComponent <GoonWithMaskStatePlayer>(); goon.m_FollowTransform = Player.transform; goon.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 20) { BartoliStatePlayer goon = AI.AddComponent <BartoliStatePlayer>(); goon.m_FollowTransform = Player.transform; goon.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 31 || ObjectID == 32) { GoonWithRoolerStatePlayer goon = AI.AddComponent <GoonWithRoolerStatePlayer>(); goon.m_FollowTransform = Player.transform; goon.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 34 || ObjectID == 48 || ObjectID == 49 || ObjectID == 52) { GoonWithArmsStatePlayer goon = AI.AddComponent <GoonWithArmsStatePlayer>(); goon.m_FollowTransform = Player.transform; goon.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 38 || ObjectID == 37) { CrowStatePlayer crow = AI.AddComponent <CrowStatePlayer>(); crow.m_FollowTransform = Player.transform; crow.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 39) { TigerStatePlayer tiger = AI.AddComponent <TigerStatePlayer>(); tiger.m_FollowTransform = Player.transform; tiger.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 47) { EgleStatePlayer egle = AI.AddComponent <EgleStatePlayer>(); egle.m_FollowTransform = Player.transform; egle.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 67) { BoulderStatePlayer boulder = AI.AddComponent <BoulderStatePlayer>(); boulder.m_FollowTransform = Player.transform; boulder.m_Tr2Item = tr2item; AICondition.SetActive(AI, !Settings.ForceDisableAllBoulder); retval = true; } else if (ObjectID == 103 || ObjectID == 104 || ObjectID == 93) { SwitchStatePlayer _switch = AI.AddComponent <SwitchStatePlayer>(); _switch.m_FollowTransform = Player.transform; _switch.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 106 || ObjectID == 110) { DoorStatePlayer door = AI.AddComponent <DoorStatePlayer>(); door.m_FollowTransform = Player.transform; door.m_Tr2Item = tr2item; AICondition.SetActive(AI, !Settings.ForceOpenAllDoors); retval = true; } else if (ObjectID == 107 || ObjectID == 109 || ObjectID == 112 || ObjectID == 114) { DoorStatePlayer door = AI.AddComponent <DoorStatePlayer>(); door.m_FollowTransform = Player.transform; door.m_Tr2Item = tr2item; AICondition.SetActive(AI, !Settings.ForceOpenAllDoors); retval = true; } else if (ObjectID == 108) { DoorStatePlayer door = AI.AddComponent <DoorStatePlayer>(); door.m_FollowTransform = Player.transform; door.m_Tr2Item = tr2item; AICondition.SetActive(AI, !Settings.ForceOpenAllDoors); retval = true; } else if (ObjectID == 214) { TRexStatePlayer trex = AI.AddComponent <TRexStatePlayer>(); trex.m_FollowTransform = Player.transform; trex.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 260) { //ButtlerStatePlayer ButtlerStatePlayer buttler = AI.AddComponent <ButtlerStatePlayer>(); buttler.m_FollowTransform = Player.transform; buttler.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 28 || ObjectID == 25) { SharkGoldenStatePlayer shark_golden = AI.AddComponent <SharkGoldenStatePlayer>(); shark_golden.m_FollowTransform = Player.transform; shark_golden.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } else if (ObjectID == 21 || ObjectID == 36) { RatStatePlayer rat = AI.AddComponent <RatStatePlayer>(); rat.m_FollowTransform = Player.transform; rat.m_Tr2Item = tr2item; AICondition.SetActive(AI, true); retval = true; } return(retval); // if false default behabiour will be used }