void Awake() { StopWait = false; EmotionCount = 0; animator = GetComponent <Animator>(); FurnitureEffect = GameObject.Find("FurnitureManager").GetComponent <FurnitureManager>(); AddInFlu = GameObject.Find("InfluenceManager").GetComponent <InfluenceManager>(); Orderd = GameObject.Find("SellingManager").GetComponent <SellingManager>(); customerManager = GameObject.Find("CustomerManager").GetComponent <CustomerManager>(); State = GameObject.Find("StatusManager").GetComponent <StatusManager>(); }
public void init(InfluenceManager inf) { influM = inf; child = gameObject.GetComponent <Renderer>(); child.transform.localRotation = Quaternion.Euler(new Vector3(90.0f, 0.0f, 0.0f)); child.transform.localPosition = new Vector3(0.0f, 0.0f, 0.1f); child.transform.localScale = new Vector3(0.1f, 0.001f, 0.01f); child.transform.localScale = new Vector3(0.115f, 1.0f, 0.015f); child.material = Resources.Load("UI/Purple") as Material; scale = child.transform.localScale.x; gameObject.layer = 5; }
private void Awake() { currentInfluence = maxInfluence / 2f; if (_instance != null && _instance != this) { Destroy(this.gameObject); } else { _instance = this; } currentInfluence = startInfluence; }
private static PrimitiveManager DecodePrimitivesWeighted( Matrix bindMatrix, GeometryEntry geo, SkinEntry skin, SceneEntry scene, InfluenceManager infManager, Type boneType) { PrimitiveManager manager = DecodePrimitives(geo); IBoneNode[] boneList; IBoneNode bone = null; int boneCount; string[] jointStringArray = null; string jointString = null; byte * pCmd = stackalloc byte[4]; int cmdCount = skin._weightInputs.Count; float weight = 0; float * pWeights = null; Vector3 * pVert = null, pNorms = null; ushort * pVInd = (ushort *)manager._indices.Address; List <Vertex3> vertList = new List <Vertex3>(skin._weightCount); Matrix * pMatrix = null; UnsafeBuffer remap = new UnsafeBuffer(skin._weightCount * 2); ushort * pRemap = (ushort *)remap.Address; if (manager._faceData[1] != null) { pNorms = (Vector3 *)manager._faceData[1].Address; } manager._vertices = vertList; //Find vertex source foreach (SourceEntry s in geo._sources) { if (s._id == geo._verticesInput._source) { pVert = (Vector3 *)((UnsafeBuffer)s._arrayData).Address; break; } } //Find joint source foreach (InputEntry inp in skin._jointInputs) { if (inp._semantic == SemanticType.JOINT) { foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { jointStringArray = src._arrayData as string[]; jointString = src._arrayDataString; break; } } } else if (inp._semantic == SemanticType.INV_BIND_MATRIX) { foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { pMatrix = (Matrix *)((UnsafeBuffer)src._arrayData).Address; break; } } } } Error = "There was a problem creating the list of bones for geometry entry " + geo._name; //Populate bone list boneCount = jointStringArray.Length; boneList = new IBoneNode[boneCount]; for (int i = 0; i < boneCount; i++) { NodeEntry entry = scene.FindNode(jointStringArray[i]); if (entry != null && entry._node != null) { boneList[i] = entry._node as IBoneNode; } else { //Search in reverse! foreach (NodeEntry node in scene._nodes) { if ((entry = RecursiveTestNode(jointString, node)) != null) { if (entry._node != null) { boneList[i] = entry._node as IBoneNode; } break; } } //Couldn't find the bone if (boneList[i] == null) { boneList[i] = Activator.CreateInstance(boneType) as IBoneNode; } } } //Build command list foreach (InputEntry inp in skin._weightInputs) { switch (inp._semantic) { case SemanticType.JOINT: pCmd[inp._offset] = 1; break; case SemanticType.WEIGHT: pCmd[inp._offset] = 2; //Get weight source foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { pWeights = (float *)((UnsafeBuffer)src._arrayData).Address; break; } } break; default: pCmd[inp._offset] = 0; break; } } Error = "There was a problem creating vertex influences for geometry entry " + geo._name; //Build vertex list and remap table for (int i = 0; i < skin._weightCount; i++) { //Create influence int iCount = skin._weights[i].Length / cmdCount; Influence inf = new Influence(); fixed(int *p = skin._weights[i]) { int *iPtr = p; for (int x = 0; x < iCount; x++) { for (int z = 0; z < cmdCount; z++, iPtr++) { if (pCmd[z] == 1) { bone = boneList[*iPtr]; } else if (pCmd[z] == 2) { weight = pWeights[*iPtr]; } } inf.AddWeight(new BoneWeight(bone, weight)); } } inf.CalcMatrix(); Error = "There was a problem creating a vertex from the geometry entry " + geo._name + ".\nMake sure that all the vertices are weighted properly."; Vector3 worldPos = bindMatrix * skin._bindMatrix * pVert[i]; Vertex3 v; if (inf.Weights.Count > 1) { //Match with manager inf = infManager.FindOrCreate(inf); v = new Vertex3(worldPos, inf); //World position } else { bone = inf.Weights[0].Bone; v = new Vertex3(bone.InverseBindMatrix * worldPos, bone); //Local position } ushort index = 0; while (index < vertList.Count) { if (v.Equals(vertList[index])) { break; } index++; } if (index == vertList.Count) { vertList.Add(v); } pRemap[i] = index; } Error = "There was a problem fixing normal rotations for geometry entry " + geo._name; //Remap vertex indices and fix normals for (int i = 0; i < manager._pointCount; i++, pVInd++) { *pVInd = pRemap[*pVInd]; if (pNorms != null) { Vertex3 v = null; if (*pVInd < vertList.Count) { v = vertList[*pVInd]; } if (v != null && v.MatrixNode != null) { if (v.MatrixNode.Weights.Count > 1) { pNorms[i] = (bindMatrix * skin._bindMatrix).GetRotationMatrix() * pNorms[i]; } else { pNorms[i] = (v.MatrixNode.Weights[0].Bone.InverseBindMatrix * bindMatrix * skin._bindMatrix).GetRotationMatrix() * pNorms[i]; } } } } remap.Dispose(); return(manager); }
static void Weight(PrimitiveManager manager, SkinEntry skin, DecoderShell shell, GeometryEntry geo, InfluenceManager iMan) { MDL0BoneNode[] boneList; MDL0BoneNode bone = null; int boneCount; string[] jointStrings = null; byte * pCmd = stackalloc byte[4]; int cmdCount = skin._weightInputs.Count; float weight = 0; float * pWeights = null; Vector3 * pVert = null; ushort * pVInd = (ushort *)manager._indices.Address; List <Vertex3> vertList = new List <Vertex3>(skin._weightCount); manager._vertices = vertList; //Find vertex source foreach (SourceEntry s in geo._sources) { if (s._id == geo._verticesInput._source) { pVert = (Vector3 *)((UnsafeBuffer)s._arrayData).Address; break; } } //Find joint source foreach (InputEntry inp in skin._jointInputs) { if (inp._semantic == SemanticType.JOINT) { foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { jointStrings = src._arrayData as string[]; break; } } break; } } //Populate bone list boneCount = jointStrings.Length; boneList = new MDL0BoneNode[boneCount]; for (int i = 0; i < boneCount; i++) { boneList[i] = shell.FindNode(jointStrings[i])._node as MDL0BoneNode; } //Build command list foreach (InputEntry inp in skin._weightInputs) { switch (inp._semantic) { case SemanticType.JOINT: pCmd[inp._offset] = 1; break; case SemanticType.WEIGHT: pCmd[inp._offset] = 2; //Get weight source foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { pWeights = (float *)((UnsafeBuffer)src._arrayData).Address; break; } } break; default: pCmd[inp._offset] = 0; break; } } //Construct Vertex from new weight for (int i = 0; i < skin._weightCount; i++) { //Create influence int iCount = skin._weights.Length / cmdCount; Influence inf = new Influence(iCount); fixed(int *p = skin._weights[i]) { int *iPtr = p; for (int x = 0; x < iCount; x++) { for (int z = 0; z < cmdCount; z++, iPtr++) { if (pCmd[z] == 1) { bone = boneList[*iPtr]; } else if (pCmd[z] == 2) { weight = pWeights[*iPtr]; } } inf._weights[x] = new BoneWeight(bone, weight); } } //Match with manager inf = iMan.AddOrCreateInf(inf); //Create Vertex and look for match Vertex3 v = new Vertex3(pVert[*pVInd], inf); int index = 0; while (index < vertList.Count) { if (v.Equals(vertList[i])) { break; } index++; } if (index == vertList.Count) { vertList.Add(v); } //Assign new index *pVInd++ = (ushort)index; } }
static PrimitiveManager DecodePrimitivesWeighted(GeometryEntry geo, SkinEntry skin, SceneEntry scene, InfluenceManager infManager, ref string Error) { PrimitiveManager manager = DecodePrimitives(geo); MDL0BoneNode[] boneList; MDL0BoneNode bone = null; int boneCount; string[] jointStrings = null; byte * pCmd = stackalloc byte[4]; int cmdCount = skin._weightInputs.Count; float weight = 0; float * pWeights = null; Vector3 * pVert = null, pNorms = null; ushort * pVInd = (ushort *)manager._indices.Address; List <Vertex3> vertList = new List <Vertex3>(skin._weightCount); Matrix * pMatrix = null; UnsafeBuffer remap = new UnsafeBuffer(skin._weightCount * 2); ushort * pRemap = (ushort *)remap.Address; pNorms = (Vector3 *)manager._faceData[1].Address; //List<int> FixedIndices = new List<int>(); manager._vertices = vertList; //Find vertex source foreach (SourceEntry s in geo._sources) { if (s._id == geo._verticesInput._source) { pVert = (Vector3 *)((UnsafeBuffer)s._arrayData).Address; break; } } //Find joint source foreach (InputEntry inp in skin._jointInputs) { if (inp._semantic == SemanticType.JOINT) { foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { jointStrings = src._arrayData as string[]; break; } } } else if (inp._semantic == SemanticType.INV_BIND_MATRIX) { foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { pMatrix = (Matrix *)((UnsafeBuffer)src._arrayData).Address; break; } } } } Error = "There was a problem creating the list of bones for geometry entry " + geo._name; //Populate bone list boneCount = jointStrings.Length; boneList = new MDL0BoneNode[boneCount]; for (int i = 0; i < boneCount; i++) { boneList[i] = scene.FindNode(jointStrings[i])._node as MDL0BoneNode; } //Build command list foreach (InputEntry inp in skin._weightInputs) { switch (inp._semantic) { case SemanticType.JOINT: pCmd[inp._offset] = 1; break; case SemanticType.WEIGHT: pCmd[inp._offset] = 2; //Get weight source foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { pWeights = (float *)((UnsafeBuffer)src._arrayData).Address; break; } } break; default: pCmd[inp._offset] = 0; break; } } Error = "There was a problem creating vertex influences for geometry entry " + geo._name; //Build vertex list and remap table for (int i = 0; i < skin._weightCount; i++) { //Create influence int iCount = skin._weights[i].Length / cmdCount; Influence inf = new Influence(iCount); fixed(int *p = skin._weights[i]) { int *iPtr = p; for (int x = 0; x < iCount; x++) { for (int z = 0; z < cmdCount; z++, iPtr++) { if (pCmd[z] == 1) { bone = boneList[*iPtr]; } else if (pCmd[z] == 2) { weight = pWeights[*iPtr]; } } //if (bone != null) // if (bone.Name == "TopN" || bone.Name == "XRotN" || bone.Name == "YRotN" || bone.Name == "TransN" || bone.Name == "ThrowN" || bone.Name == "FacePattern") // Console.WriteLine(bone.Name); // else if (bone.Parent != null) // if (bone.Parent.Name == "FacePattern") // Console.WriteLine(bone.Name); inf._weights[x] = new BoneWeight(bone, weight); } } inf.CalcMatrix(); Error = "There was a problem creating a vertex from the geometry entry " + geo._name + ".\nMake sure that all the vertices are weighted properly."; Vertex3 v; if (inf._weights.Length > 1) { //Match with manager inf = infManager.AddOrCreate(inf); v = new Vertex3(skin._bindMatrix * pVert[i], inf); //World position } else { bone = inf._weights[0].Bone; v = new Vertex3(bone._inverseBindMatrix * skin._bindMatrix * pVert[i], bone); //Local position } ////Create Vertex, set to world position. //v = new Vertex3(skin._bindMatrix * pVert[i], inf); ////Fix single-bind vertices //v.Position = inf._weights[0].Bone._inverseBindMatrix * v.Position; ushort index = 0; while (index < vertList.Count) { if (v.Equals(vertList[index])) { break; } index++; } if (index == vertList.Count) { vertList.Add(v); } pRemap[i] = index; } Error = "There was a problem fixing normal rotations for geometry entry " + geo._name; //Remap vertex indices and fix normals for (int i = 0; i < manager._pointCount; i++, pVInd++) { * pVInd = pRemap[*pVInd]; Vertex3 v = null; if (*pVInd < vertList.Count) { v = vertList[*pVInd]; } if (v != null && v._influence != null) { if (v._influence.Weights.Length > 1) { pNorms[i] = skin._bindMatrix.GetRotationMatrix() * pNorms[i]; } else { pNorms[i] = skin._bindMatrix.GetRotationMatrix() * v._influence.Weights[0].Bone._inverseBindMatrix.GetRotationMatrix() * pNorms[i]; } } } remap.Dispose(); //manager.MergeTempData(); return(manager); }
static PrimitiveManager DecodePrimitivesWeighted(GeometryEntry geo, SkinEntry skin, SceneEntry scene, InfluenceManager infManager) { PrimitiveManager manager = DecodePrimitives(geo); MDL0BoneNode[] boneList; MDL0BoneNode bone = null; int boneCount; string[] jointStrings = null; byte * pCmd = stackalloc byte[4]; int cmdCount = skin._weightInputs.Count; float weight = 0; float * pWeights = null; Vector3 * pVert = null; ushort * pVInd = (ushort *)manager._faceData[0].Address; List <Vertex3> vertList = new List <Vertex3>(skin._weightCount); Matrix * pMatrix = null; UnsafeBuffer remap = new UnsafeBuffer(skin._weightCount * 2); ushort * pRemap = (ushort *)remap.Address; manager._vertices = vertList; //Find vertex source foreach (SourceEntry s in geo._sources) { if (s._id == geo._verticesInput._source) { pVert = (Vector3 *)((UnsafeBuffer)s._arrayData).Address; break; } } //Find joint source foreach (InputEntry inp in skin._jointInputs) { if (inp._semantic == SemanticType.JOINT) { foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { jointStrings = src._arrayData as string[]; break; } } } else if (inp._semantic == SemanticType.INV_BIND_MATRIX) { foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { pMatrix = (Matrix *)((UnsafeBuffer)src._arrayData).Address; break; } } } } //Populate bone list boneCount = jointStrings.Length; boneList = new MDL0BoneNode[boneCount]; for (int i = 0; i < boneCount; i++) { boneList[i] = scene.FindNode(jointStrings[i])._node as MDL0BoneNode; } //Build command list foreach (InputEntry inp in skin._weightInputs) { switch (inp._semantic) { case SemanticType.JOINT: pCmd[inp._offset] = 1; break; case SemanticType.WEIGHT: pCmd[inp._offset] = 2; //Get weight source foreach (SourceEntry src in skin._sources) { if (src._id == inp._source) { pWeights = (float *)((UnsafeBuffer)src._arrayData).Address; break; } } break; default: pCmd[inp._offset] = 0; break; } } //Build vertex list and remap table for (int i = 0; i < skin._weightCount; i++) { //Create influence int iCount = skin._weights[i].Length / cmdCount; Influence inf = new Influence(iCount); fixed(int *p = skin._weights[i]) { int *iPtr = p; for (int x = 0; x < iCount; x++) { for (int z = 0; z < cmdCount; z++, iPtr++) { if (pCmd[z] == 1) { bone = boneList[*iPtr]; } else if (pCmd[z] == 2) { weight = pWeights[*iPtr]; } } inf._weights[x] = new BoneWeight(bone, weight); } } Vertex3 v; if (inf._weights.Length > 1) { //Match with manager inf = infManager.AddOrCreate(inf); v = new Vertex3(skin._bindMatrix * pVert[i], inf); //World position } else { bone = inf._weights[0].Bone; v = new Vertex3(bone._inverseBindMatrix * skin._bindMatrix * pVert[i], bone); //Local position } //Create Vertex, set to world position. //Vertex3 v = new Vertex3(skin._bindMatrix * pVert[i], inf); //Fix single-bind vertices //if (inf._weights.Length == 1) // v.Position = inf._weights[0].Bone._inverseBindMatrix * v.Position; ushort index = 0; while (index < vertList.Count) { if (v.Equals(vertList[index])) { break; } index++; } if (index == vertList.Count) { vertList.Add(v); } pRemap[i] = index; } //Remap vertex indices for (int i = 0; i < manager._pointCount; i++, pVInd++) { *pVInd = pRemap[*pVInd]; } remap.Dispose(); return(manager); }
// Use this for initialization void Start() { att = GetComponent <Attributes>(); carac = GetComponent <Spec>(); //On applique les stats att.life = carac.Maxlife; att.maxLife = carac.Maxlife; att.life = carac.Maxlife; att.hungerMax = carac.MaxHunger; att.hunger = carac.MaxHunger; att.rayVision = carac.rayVision; //Debug.Log("Entity/" + att.name.ToString() + "/" + att.name.ToString() + "Sprite"); //Ajout du Sprite manager agent = GetComponent <UnityEngine.AI.NavMeshAgent>(); spriteManager = Instantiate(sprite, Vector3.zero, Quaternion.Euler(new Vector3(0, 0, 0))) as GameObject; spriteManager.transform.parent = gameObject.transform; spriteManager.transform.localRotation = Quaternion.Euler(new Vector3(90, 0, 0)); spriteManager.transform.localPosition = new Vector3(0, 0, 0);//Vector3.zero; spriteManager.transform.localScale = new Vector3(1, 1, 1); //Ajout de la barre de vie GameObject lifebar = Instantiate(Resources.Load("UI/HealthBar"), Vector3.zero, Quaternion.Euler(new Vector3(-90f, 0, 0))) as GameObject; lifebar.transform.parent = transform; lifebar.transform.localPosition = new Vector3(0, 0, 0.22f); lifebar.transform.localRotation = Quaternion.Euler(new Vector3(-90.0f, 0.0f, 0.0f)); lifebar.transform.localScale = new Vector3(0.3f, 0.1f, 0.5f); lifebar.GetComponentInChildren <LifeBarScript>().init(); lifebar.GetComponentInChildren <LifeBarScript>().att = att; att.lifebar = lifebar; lifebar.SetActive(false); //Ajout des scrits de gestion IA movement = gameObject.AddComponent <MovementManager>(); work = gameObject.AddComponent <WorkManager>(); influM = gameObject.AddComponent <InfluenceManager>(); //Ajout du type de comportement att.behavior = carac.behavior; //Special Behavior algo String str = att.name + "Behavior"; //Debug.Log(" behavior name = " + str); Type t = getType(str); //Debug.Log("type name = " + t); if (t != null) { gameObject.AddComponent(t); Debug.Log("add Behavior"); } //Ici on va différencier les spécificités de chaque créature grace a un script qui contiendra toute les données de spécificité (Spec). foodManager = gameObject.AddComponent <FoodManager> (); //Attribut de faim a définir pour chaque créature foodManager.dontEat = carac.dontEat; foodManager.vegetarian = carac.vegan; foodManager.carnivorous = carac.carniv; foodManager.foodTypes = carac.foodTypes; //foodManager.typeOfFood = carac.TypeOfFood; combatManager = gameObject.AddComponent <CombatManager> (); //Ajout de l'attaque de base selon spec combatManager.basicatk = new BasicAttack(carac.minimumDamage, carac.maximumDamage, carac.ranged, carac.cooldown); player = GameObject.Find("Player").GetComponent <Player>(); //Instanciation liste abilities att.setListAbilities(); //Ajout des capacités for (int i = 0; i < carac.abilitiesType.Length; i++) { if (carac.levelAbilities [i] != null && carac.levelAbilities [i] > 0) { if (carac.effectAbility.Length > i) { if (carac.effectAbility [i] != null) { att.abilities.Add(new ActiveAbility(carac.abilitiesType[i], carac.levelAbilities[i], carac.effectAbility[i])); } } else { if (carac.abilitiesType.Length > i) { if (carac.abilitiesType [i] != null) { PassiveAbility p = new PassiveAbility(carac.abilitiesType[i], carac.levelAbilities[i]); att.abilities.Add(new PassiveAbility(carac.abilitiesType [i], carac.levelAbilities [i])); } } else { Debug.Log("Probleme chargement ability"); } } } } }