private ReflectedEntityCache CreateReflectedEntity(EntityState entityState) { string entityType = entityState.entityType.entityKind + ":" + entityState.entityType.domain + ":" + entityState.entityType.country + ":" + entityState.entityType.category + ":" + entityState.entityType.subCategory + ":" + entityState.entityType.specific + ":" + entityState.entityType.extra; GameObject reflectedPrefab = null; foreach (var reflectedModelPair in ReflectedModels) { if (reflectedModelPair.EntityType == entityType) { reflectedPrefab = reflectedModelPair.ReflectedPrefab; break; } } if (reflectedPrefab == null) { return(null); } var reflectedGameObj = Instantiate(reflectedPrefab); var reflectedEntity = reflectedGameObj.GetComponent <ReflectedEntity>(); if (reflectedEntity == null) { reflectedEntity = reflectedGameObj.AddComponent <ReflectedEntity>(); } reflectedEntity.EntityId = entityState.entityId; reflectedEntity.MarkingText = NetSimAgent.Instance.GetReflectedEntityMarkingText(entityState.reflectedEntityPtr); reflectedEntity.EntityType = entityState.entityType; reflectedGameObj.name = reflectedEntity.MarkingText; var reflectedEntityCache = new ReflectedEntityCache(); reflectedEntityCache.GameObject = reflectedGameObj; reflectedEntityCache.ReflectedEntity = reflectedEntity; reflectedEntityCache.Rigidbody = reflectedEntity.GetComponent <Rigidbody>(); reflectedEntityCache.Transform = reflectedEntity.transform; reflectedEntityCache.Animator = reflectedEntity.GetComponent <Animator>(); reflectedEntityCache.SelectedDevice = reflectedEntity.GetComponent <Infantry.ReflectedInfantryModelOptions>(); if (reflectedEntityCache.Animator) { reflectedEntityCache.AnimatorParameters = reflectedEntityCache.Animator.parameters; foreach (var anim in reflectedEntityCache.AnimatorParameters) { if (anim.name == "Speed") { reflectedEntityCache.AnimatorSpeedParameterHash = anim.nameHash; } } } reflectedEntityCache.ArtParts = new Dictionary <uint, ReflectedEntityArtPart>(); foreach (var artPart in reflectedGameObj.GetComponentsInChildren <ReflectedEntityArtPart>()) { reflectedEntityCache.ArtParts[artPart.PartID] = artPart; } reflectedEntityCache.ReflectedEntity.LifeformState = entityState.lifeformState; reflectedEntityCache.ReflectedEntity.DamageState = entityState.DamageState; reflectedEntitiesCache[entityState.entityId] = reflectedEntityCache; return(reflectedEntityCache); }
private void SetAnimatorParams <T>(string paramName, T currentState, ref T prevState, ReflectedEntityCache reflectedEntityCache) where T : struct, IComparable { if (!prevState.Equals(currentState)) { for (int i = 0; i < reflectedEntityCache.AnimatorParameters.Length; i++) { if (reflectedEntityCache.AnimatorParameters[i].name.StartsWith(paramName)) { bool isActive = reflectedEntityCache.AnimatorParameters[i].name == paramName + currentState.ToString(); reflectedEntityCache.Animator.SetBool(reflectedEntityCache.AnimatorParameters[i].nameHash, isActive); } } prevState = currentState; } }