public void Move(Vector3 velocity)
    {
        if (!hasMoved)
        {
            hasMoved = true;

            rigdBody.AddForce(velocity, ForceMode.VelocityChange);

            foreach (FaceType face in faceTypes)
            {
                if (face != null)
                {
                    if (face is FaceTypeConnector)
                    {
                        FaceTypeConnector ftc = (FaceTypeConnector)face;
                        if (ftc.GetConnectedFace() != null)
                        {
                            BodyComponent bc = ftc.GetConnectedFace().GetBodyComponent();
                            if (!bc.HasMoved())
                            {
                                bc.Move(velocity);
                            }
                        }
                    }
                }
            }
        }
    }
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "PlayerBullet")
        {
            PlayerBullet pb = collision.gameObject.GetComponent <PlayerBullet>();

            if (isCore)
            {
                //check to see if no other connected bodies
                foreach (FaceType face in faceTypes)
                {
                    if (face != null)
                    {
                        if (face is FaceTypeConnector)
                        {
                            FaceTypeConnector ftc = (FaceTypeConnector)face;
                            if (ftc.GetConnectedFace() != null)
                            {
                                if (!ftc.GetConnectedFace().GetBodyComponent().isCore)
                                {
                                    pb.OnBounce();
                                    return;
                                }
                            }
                        }
                    }
                }
            }

            OnHit(pb.GetDamage());
            pb.OnHit();
        }
    }
Exemplo n.º 3
0
    public void ConnectToFace(FaceTypeConnector connectedFace)
    {
        this.connectedFace = connectedFace;
        connectedFace.SetConnectedFace(this);
        int     connectedSide    = connectedFace.GetSide();
        Vector3 connectedFacePos = connectedFace.transform.position;

        //bodyComponent.transform.parent = connectedFace.GetBodyComponent ().transform;

        //fixedJoint = (FixedJoint)gameObject.AddComponent (typeof(FixedJoint));
        //fixedJoint.connectedBody = connectedFace.gameObject.GetComponent<Rigidbody> ();

        this.bodyComponent.transform.position = connectedFacePos;

        switch (connectedSide)
        {
        case 0:
            PositionSelf(Vector3.up, new Vector3(0.0f, 0.0f, 0.0f));
            break;

        case 5:
            PositionSelf(Vector3.down, new Vector3(0.0f, 0.0f, 180.0f));
            break;

        case 1:
            PositionSelf(Vector3.right, new Vector3(0.0f, 90.0f, 0.0f));
            break;

        case 4:
            PositionSelf(Vector3.left, new Vector3(0.0f, -90.0f, 0.0f));
            break;

        case 2:
            PositionSelf(Vector3.forward, new Vector3(0.0f, 0.0f, 90.0f));
            break;

        case 3:
            PositionSelf(Vector3.back, new Vector3(0.0f, 0.0f, -90.0f));
            break;
        }

        this.bodyComponent.transform.parent = this.transform;

        fixedJoint = (FixedJoint)bodyComponent.gameObject.AddComponent(typeof(FixedJoint));
        fixedJoint.connectedBody = connectedFace.GetBodyComponent().gameObject.GetComponent <Rigidbody> ();
    }
Exemplo n.º 4
0
    public void Disconnect()
    {
        if (connectedFace != null)
        {
            /*
             * if (bodyComponent.transform.parent == connectedFace.GetBodyComponent ().transform) {
             *      bodyComponent.transform.parent = bodyComponent.transform;
             * }
             */

            if (fixedJoint != null)
            {
                Destroy(fixedJoint);
            }

            FaceTypeConnector ftc = connectedFace;
            connectedFace = null;
            ftc.Disconnect();
        }
    }
Exemplo n.º 5
0
    void Generate(BodyComponent bodyComponent, float size, Vector3 location)
    {
        for (int i = 0; i < 6; i++)
        {
            if (bodyComponent.GetFaceTypes()[i] == null)
            {
                if (Random.Range(0.0f, size) > 0.5f)
                {
                    Vector3 newLocation = location;

                    switch (i)
                    {
                    case 0:
                        newLocation.y -= 1;
                        break;

                    case 5:
                        newLocation.y += 1;
                        break;

                    case 1:
                        newLocation.x -= 1;
                        break;

                    case 4:
                        newLocation.x += 1;
                        break;

                    case 2:
                        newLocation.z -= 1;
                        break;

                    case 3:
                        newLocation.z += 1;
                        break;
                    }


                    //if there's space
                    if (!bodyComponents.ContainsKey(newLocation) && !weapons.ContainsKey(newLocation))
                    {
                        if (Random.Range(0.0f, size) < 1.0f)
                        {
                            //weapon
                            FaceType weapon = null;

                            if (Random.Range(0.0f, 1.0f) < FaceTypeChargeLaser.generateChance)
                            {
                                weapon = (FaceType)bodyComponent.AddFace(i, faceTypeChargeLaser);
                            }
                            else if (Random.Range(0.0f, 1.0f) < FaceTypeShot.generateChance)
                            {
                                weapon = (FaceType)bodyComponent.AddFace(i, faceTypeShot);
                            }

                            if (weapon != null)
                            {
                                weapons.Add(newLocation, weapon);
                                weapon.OnReadyActivation();
                            }
                        }
                        else
                        {
                            //connector

                            FaceTypeConnector ftc = (FaceTypeConnector)bodyComponent.AddFace(i, faceTypeConnector);

                            BodyComponent newBc;
                            if (Random.Range(0.0f, 1.0f) < size / 30.0f)
                            {
                                //core
                                newBc = NewBodyComponent(newLocation, true);
                            }
                            else
                            {
                                newBc = NewBodyComponent(newLocation);
                            }
                            int side = 5 - i;
                            FaceTypeConnector ftc2 = (FaceTypeConnector)newBc.AddFace(side, faceTypeConnector);
                            ftc2.ConnectToFace(ftc);

                            //make connections to existing blocks

                            /*
                             * for (int j = 0; j < 6; j++) {
                             *      Vector3 loc = newLocation;
                             *      switch(j) {
                             *      case 0:
                             *              loc.y -= 1;
                             *              break;
                             *      case 5:
                             *              loc.y += 1;
                             *              break;
                             *      case 1:
                             *              loc.x -= 1;
                             *              break;
                             *      case 4:
                             *              loc.x += 1;
                             *              break;
                             *      case 2:
                             *              loc.z -= 1;
                             *              break;
                             *      case 3:
                             *              loc.z -= 1;
                             *              break;
                             *      }
                             *
                             *      BodyComponent aroundBc;
                             *      if (bodyComponents.TryGetValue(loc, out aroundBc)) {
                             *              side = 5 - j;
                             *              if (aroundBc.GetFaceTypes()[side] == null) {
                             *                      FaceTypeConnector aroundFtc = (FaceTypeConnector)aroundBc.AddFace (side, faceTypeConnector);
                             *                      FaceTypeConnector thisFtc = (FaceTypeConnector)newBc.AddFace (j, faceTypeConnector);
                             *                      thisFtc.ConnectToFace (aroundFtc);
                             *              }
                             *      }
                             * }
                             */

                            //go deeper, size halves
                            Generate(newBc, size / 2.0f, newLocation);
                        }
                    }
                }
            }
        }
    }
Exemplo n.º 6
0
 public void SetConnectedFace(FaceTypeConnector ftc)
 {
     this.connectedFace = ftc;
 }