Exemplo n.º 1
0
    private void OnStorageLoadingDone(PartBehaviour[] parts, GroupBehaviour group)
    {
        UpdateMeshData();

        EventHandlers.OnPlacedPart    += OnPlacedPart;
        EventHandlers.OnDestroyedPart += OnDestroyedPart;
    }
Exemplo n.º 2
0
 /// <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);
     }
 }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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;
    }
Exemplo n.º 5
0
    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;
                }
            }
        }
    }
Exemplo n.º 6
0
        private void OnEnable()
        {
            Target = (GroupBehaviour)target;

            MainEditor.Addons = AddOnHelper.GetAddonsByTarget(AddOnTarget.GroupBehaviour);
        }
Exemplo n.º 7
0
 public void SetBehaviour(GroupBehaviour behaviour)
 {
     m_behaviour = behaviour;
 }
Exemplo n.º 8
0
        /// <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);
        }