Example #1
0
    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);
    }
Example #2
0
        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);
        }
Example #3
0
 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);
 }
Example #4
0
    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);
    }
Example #5
0
    void Draw(AICondition condition)
    {
        if (condition == null)
        {
            return;
        }

        var obj = new SerializedObject(condition);

        obj.Update();
        DrawPropertiesExcluding(obj, "m_Script");
        obj.ApplyModifiedProperties();
    }
Example #6
0
    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);
    }
Example #7
0
    void SwitchState(AICondition aic)
    {
        state = (int)aic;

        switch (state)
        {
        case 0:         // Idle
        {
            break;
        }

        case 1:         // Kick
        {
            Attack();
            break;
        }

        case 2:         // Dead
        {
            break;
        }
        }
    }
Example #8
0
 public List <AICondition> ConvertToAIConditionsFromAttributes(List <Attribute> attributes)
 {
     return(attributes.Select(attr => AICondition.FromAttribute(attr)).ToList <AICondition>());
 }
Example #9
0
    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
        }
    }
Example #10
0
    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);
    }
Example #11
0
 // Use this for initialization
 void Start()
 {
     aiCondition = AICondition.Idle;
 }
Example #12
0
 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[];
 }
Example #13
0
 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[];
 }
Example #14
0
    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
    }