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); } } } }
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; }