private void OnStorageLoadingDone(PartBehaviour[] parts, GroupBehaviour group) { UpdateMeshData(); EventHandlers.OnPlacedPart += OnPlacedPart; EventHandlers.OnDestroyedPart += OnDestroyedPart; }
/// <summary> /// This method is called when the loading process is done. /// </summary> public static void StorageLoadingDone(PartBehaviour[] parts, GroupBehaviour group) { if (OnStorageLoadingDone != null) { OnStorageLoadingDone.Invoke(parts, group); } }
void Awake() { m_children = new List <EnemyScript> [4]; for (int i = 0; i < m_children.Length; ++i) { m_children[i] = new List <EnemyScript>(); } m_behaviour = GroupBehaviour.StayWithSlowest; m_formation = (Formation)Random.Range(1, 5); }
public void Walk(Vector3 target) { Vector3 movementModifier = new Vector3(); float rotationModifier = 0; //movementModifier += (nextPos - transform.position).normalized * mainMovementPriority; //movementModifier += transform.forward * mainMovementPriority; //rotationModifier += Vector3.SignedAngle(transform.forward, (nextPos - transform.position).normalized, Vector3.up); int rotationModAmount = 0; for (int i = 0; i < behaviours.Length; i++) { try { SteeringBehaviour sb = (SteeringBehaviour)behaviours[i]; movementModifier += sb.CalculateMovement(new Vector3(target.x, transform.position.y, target.z)); float rotationAmount = sb.CalculateRotation(target, rotationSpeed); if (Mathf.Abs(rotationAmount) != 0) { rotationModifier += rotationAmount; rotationModAmount++; } } catch { GroupBehaviour gb = (GroupBehaviour)behaviours[i]; movementModifier += gb.CalculateMovement(group.Agents, this, new Vector3(target.x, transform.position.y, target.z)); float rotationAmount = gb.CalculateRotation(group.Agents, rotationSpeed); if (Mathf.Abs(rotationAmount) != 0) { rotationModifier += rotationAmount; rotationModAmount++; } } } //Saco promedio o no? mmm... //rotationModifier /= rotationModAmount; movementModifier.Normalize(); transform.RotateAround(transform.position, Vector3.up, Mathf.Sign(rotationModifier) * Mathf.Min(Mathf.Abs(rotationModifier), rotationSpeed) * rotationSpeed * Time.deltaTime); transform.position += movementModifier * movementSpeed * Time.deltaTime; }
void UpdateTarget() { var Groups = Controller.Groups; var minDist = float.MaxValue; _target = null; foreach (var g in Groups) { if (g != this) { if ((g.Kids.Count > 0) && (g.Kids.Count != Kids.Count) && (g.transform.position - transform.position).magnitude < minDist) { _target = g; } } } }
private void OnEnable() { Target = (GroupBehaviour)target; MainEditor.Addons = AddOnHelper.GetAddonsByTarget(AddOnTarget.GroupBehaviour); }
public void SetBehaviour(GroupBehaviour behaviour) { m_behaviour = behaviour; }
/// <summary> /// This method allows to place a part. /// </summary> public PartBehaviour PlacePrefab(PartBehaviour part, Vector3 position, Vector3 rotation, Vector3 scale, GroupBehaviour group = null, SocketBehaviour socket = null) { GameObject PlacedTemp = Instantiate(part.gameObject, position, Quaternion.Euler(rotation)); PlacedTemp.transform.localScale = scale; PartBehaviour PlacedPart = PlacedTemp.GetComponent <PartBehaviour>(); if (group == null) { if (socket != null) { if (socket.AttachedPart.HasGroup) { PlacedTemp.transform.SetParent(socket.AttachedPart.transform.parent, true); } } else { GameObject Group = new GameObject("Group (" + PlacedPart.GetInstanceID() + ")", typeof(GroupBehaviour)); PlacedTemp.transform.SetParent(Group.transform, true); } } else { PlacedTemp.transform.SetParent(group.transform, true); } PlacedPart.EntityInstanceId = PlacedPart.GetInstanceID(); EventHandlers.PlacedPart(PlacedPart, socket); PlacedPart.ChangeState(DefaultState); return(PlacedPart); }