public Vector3 GetCubeAreaGravity(WorldSetter.ECubeArea eCubeArea)
    {
        Vector3 areaGravity = Vector3.zero;

        areaGravity = this.m_cubeAreaGravity[(uint)eCubeArea];

        return(areaGravity);
    }
    public void LaunchCGObject(CGThrowableObject obj, Vector3 direction, float power)
    {
        CGPhysicsObject physicsObj = new CGPhysicsObject(obj, direction, power, this.m_worldSetter);

        WorldSetter.ECubeArea eCubeArea = this.m_worldSetter.GetCubeAreaEnum(physicsObj.throwableObject.transform.position);
        Vector3 startGravity            = this.m_cubeAreaGravity[(uint)eCubeArea];

        physicsObj.throwableObject.SetCubeAreaGravity(startGravity);
        this.m_objects.Add(physicsObj);
    }
        public CGPhysicsObject(CGThrowableObject o, Vector3 d, float p, WorldSetter ws)
        {
            WorldSetter.ECubeArea ae = ws.GetCubeAreaEnum(o.transform.position);

            this.ePreviousArea = ae;
            this.eCurrentArea  = ae;
            this.eTargetArea   = WorldSetter.ECubeArea.NONE;
            this.eObjectState  = EObjectState.OBJECT_LAUNCH_TRIGGER;

            this.throwableObject = o;
            this.objectRigidBody = this.throwableObject.GetComponent <Rigidbody>();

            this.launchDirection = d;
            this.launchPower     = p;
            this.isAreaChanged   = false;
        }
    private void DoObjectMoving(int objectIndex)
    {
        WorldSetter.ECubeArea eCubeArea = this.m_worldSetter.GetCubeAreaEnum(this.m_objects[objectIndex].throwableObject.transform.position);
        Bounds areaWorldBound           = this.m_worldSetter.GetCubeAreaBound(eCubeArea);
        Bounds objWorldBound            = this.m_objects[objectIndex].throwableObject.GetComponent <Renderer>().bounds;
        bool   isInside = WorldSetter.IsAInsideB(objWorldBound.min, objWorldBound.max, areaWorldBound.min, areaWorldBound.max);

        // Area가 한 번 바뀌었으므로, Target으로 가는 중이다.
        // Target Area에 있다면, TARGET_AREA state로 바꾸고, Update() 함수에서 없애준다.
        if (this.m_objects[objectIndex].isAreaChanged == true)
        {
            // 해당 target area에 넘어왔고, bound box가 완전히 들어왔다면
            // Layer 설정을 바꾸어서 plane과 충돌처리 되게 한다.
            if (this.m_objects[objectIndex].eTargetArea == eCubeArea && isInside)
            {
                this.m_objects[objectIndex].eObjectState = CGPhysicsObject.EObjectState.OBJECT_TARGET_AREA;
                this.m_objects[objectIndex].throwableObject.SetLayerAsInArea();  // In order to make CGThrowableObject collide with world barrier planes

                // 해당 지역의 gravity로 설정해준다.
                Vector3 targetGravity = this.m_cubeAreaGravity[(uint)eCubeArea];
                this.m_objects[objectIndex].throwableObject.SetCubeAreaGravity(targetGravity);
            }
        }
        else if (this.m_objects[objectIndex].eCurrentArea != eCubeArea)
        {
            // 해당 넘어가는 지역으로 완전히 들어 갔으면, Area Changed를 true로 해주고,
            // 해당 지역의 Force를 넘겨준다.
            if (isInside == true)
            {
                this.m_objects[objectIndex].isAreaChanged = true;
                this.m_objects[objectIndex].ePreviousArea = m_objects[objectIndex].eCurrentArea;
                this.m_objects[objectIndex].eCurrentArea  = eCubeArea;
                this.m_objects[objectIndex].eTargetArea   = m_targetArea[(uint)m_objects[objectIndex].ePreviousArea, (uint)m_objects[objectIndex].eCurrentArea];

                if (true == this.m_isValidAreaChange[(uint)m_objects[objectIndex].ePreviousArea, (uint)m_objects[objectIndex].eCurrentArea])
                {
                    // 다른 지역으로 넘어갔다.
                }
                else
                {
                    // PutBack the Throwable Object
                    this.m_objects[objectIndex].throwableObject.ResetObject();
                    this.m_objects.RemoveAt(objectIndex);
                }
            }
        }
    }
Beispiel #5
0
    private void SetPlayerDirectionVectors()
    {
        this.m_eCubeArea = this.m_worldSetter.GetCubeAreaEnum(this.transform.position);

        switch (this.m_eCubeArea)
        {
        case WorldSetter.ECubeArea.YP:
            this.m_moveForwardVector = Vector3.forward;
            this.m_moveRightVector   = Vector3.right;
            break;

        case WorldSetter.ECubeArea.ZM:
            this.m_moveForwardVector = Vector3.up;
            this.m_moveRightVector   = Vector3.right;
            break;

        default:
            break;
        }
    }
 private void SetAreaInfo(WorldSetter.ECubeArea from, WorldSetter.ECubeArea to, Vector3 force, WorldSetter.ECubeArea target)
 {
     this.m_isValidAreaChange[(uint)from, (uint)to] = true;
     this.m_forceSpace[(uint)from, (uint)to]        = force;
     this.m_targetArea[(uint)from, (uint)to]        = target;
 }