예제 #1
0
    public void TurnIntoPlayerMadeObject(GameObject go, Color color, float liveTime)
    {
        if (liveTime > 0)
        {
            FadeAndDestroy fad = go.AddComponent <FadeAndDestroy>();
            fad.delayTime = liveTime;
//			fad.explosion = playerObjectExplosion;
        }

        NVRInteractableItem interactableItem = go.GetComponent <NVRInteractableItem>();

        if (!interactableItem)
        {
            interactableItem = go.GetComponentInChildren <NVRInteractableItem>();
        }
        if (!interactableItem)
        {
            go.AddComponent <NVRInteractableItem>();
        }

        MeshRenderer renderer = go.GetComponent <MeshRenderer>();

        if (!renderer)
        {
            renderer = go.GetComponentInChildren <MeshRenderer>();
        }
        if (renderer)
        {
            renderer.material.color = color;
        }

        Rigidbody rb = go.GetComponent <Rigidbody> ();

        if (!rb)
        {
            Rigidbody r = go.GetComponentInChildren <Rigidbody> ();
            if (r.gameObject.GetComponent <NVRInteractable> ())
            {
                r.isKinematic = true;
            }
        }
        else
        {
            rb.isKinematic = true;
        }

        go.transform.position = getPlayerSpawnObjectPosition();
        go.tag = "PlayerCreated";
    }
    IEnumerator StunRoutine(Interactor interactor)
    {
        ElephantMovement movement = interactor.GetComponent <ElephantMovement>();

        if (movement)
        {
            movement.Punch();
        }

        if (OnStun != null)
        {
            OnStun(new StunEventData(interactor.gameObject, gameObject));
        }

        var stateEnemy   = GetComponent <StatePatternEnemy>();
        var navMeshAgent = GetComponent <NavMeshAgent>();

        stateEnemy.StopMovement();
        stateEnemy.enabled   = false;
        navMeshAgent.enabled = false;
        interactor.GetComponent <AudioSource>().PlayOneShot(stunEnemyHitSound);

        if (stunIndicatorDestroyComp == null)
        {
            // Spawn stun indicator
            GameObject go = Instantiate <GameObject>(stunIndicatorPrefab);
            go.transform.parent        = transform;
            go.transform.localPosition = stunIndicatorOffset;
            stunIndicatorDestroyComp   = go.GetComponent <FadeAndDestroy>();
            stunIndicatorDestroyComp.FadeInOutAndDestroy(0.15f, m_stunDuration.timeInSeconds - 0.5f, 0.35f);
        }
        else
        {
            stunIndicatorDestroyComp.ResetDuration();
        }

        while (!m_stunDuration.IsOver())
        {
            m_stunDuration.Update(Time.deltaTime);
            yield return(null);
        }

        m_stunDuration.Start();
        stateEnemy.enabled       = true;
        navMeshAgent.enabled     = true;
        m_stunRoutine            = null;
        stunIndicatorDestroyComp = null;
    }
예제 #3
0
    void OnJointBreak(float breakForce)
    {
        ParticleSystem ps = GetComponent <ParticleSystem> ();

        if (ps)
        {
            ps.enableEmission = true;
        }
        GameObject     pin     = fixedJoint.connectedBody.gameObject;
        FadeAndDestroy pinFade = pin.AddComponent <FadeAndDestroy> ();

        pinFade.delayTime = 1f;
        pinFade.rate      = 0.25f + Random.value * 0.1f;
        DestroyByTime explode = gameObject.AddComponent <DestroyByTime> ();

        explode.lifetime  = fuseTime;
        explode.explosion = explosion;
        explode.toDestroy = transform.parent.gameObject;
    }
예제 #4
0
    private static GameObject generateVoronoiPiece(GameObject source, List <Vector2> region, Vector2 origVelocity, Vector3 origScale, Quaternion origRotation, Material mat, Transform parentTransform)
    {
        //Create Game Object and set transform settings properly
        GameObject piece = new GameObject(source.name + " piece");

        piece.transform.position   = source.transform.position;
        piece.transform.rotation   = source.transform.rotation;
        piece.transform.localScale = source.transform.localScale;

        //Create and Add Mesh Components
        MeshFilter meshFilter = (MeshFilter)piece.AddComponent(typeof(MeshFilter));

        piece.AddComponent(typeof(MeshRenderer));

        Mesh uMesh = piece.GetComponent <MeshFilter>().sharedMesh;

        if (uMesh == null)
        {
            meshFilter.mesh = new Mesh();
            uMesh           = meshFilter.sharedMesh;
        }

        Voronoi voronoi = new Voronoi(region, null, getRect(region));

        Vector3[] vertices  = calcVerts(voronoi);
        int[]     triangles = calcTriangles(voronoi);

        uMesh.vertices  = vertices;
        uMesh.triangles = triangles;
        if (source.GetComponent <SpriteRenderer>() != null)
        {
            uMesh.uv = calcUV(vertices, source.GetComponent <SpriteRenderer>(), source.transform);
        }
        else
        {
            uMesh.uv = calcUV(vertices, source.GetComponent <MeshRenderer>(), source.transform);
        }

        //set transform properties before fixing the pivot for easier rotation
        piece.transform.localScale    = origScale;
        piece.transform.localRotation = origRotation;

        Vector3 diff = calcPivotCenterDiff(piece);

        centerMeshPivot(piece, diff);
        uMesh.RecalculateBounds();
        uMesh.RecalculateNormals();

        //setFragmentMaterial(piece, source);
        piece.GetComponent <MeshRenderer>().material = mat;

        //assign mesh
        meshFilter.mesh = uMesh;

        //Create and Add Polygon Collider
        PolygonCollider2D collider = piece.AddComponent <PolygonCollider2D>();

        collider.SetPath(0, calcPolyColliderPoints(region, diff));

        //Create and Add Rigidbody
        Rigidbody2D rigidbody = piece.AddComponent <Rigidbody2D>();

        /*
         * This part has been modified from the original code.
         * It would be a good idea to look into how to copy a component at runtime.
         * Maybe this? https://answers.unity.com/questions/458207/copy-a-component-at-runtime.html
         */
        rigidbody.sharedMaterial = physicsMaterial;
        rigidbody.velocity       = origVelocity;
        rigidbody.simulated      = true;
        rigidbody.bodyType       = RigidbodyType2D.Dynamic;
        rigidbody.angularDrag    = 0;
        rigidbody.gravityScale   = 0;
        rigidbody.sleepMode      = RigidbodySleepMode2D.StartAwake;

        FadeAndDestroy fadeAndDestroy = piece.AddComponent <FadeAndDestroy>();

        piece.transform.parent = parentTransform;

        return(piece);
    }