private void PopulatePhysicsWorld(PhysicWorldModel physicsModel, PhysicWorldController physicsController) { // TODO: read from somewhere.. right now it's ardcoded // TODO: do it in assets packer, then load from file GameObject[] quadObjects = GameObject.FindGameObjectsWithTag("quad"); foreach (GameObject quadObj in quadObjects) { ProducePlaneFromQuad(physicsModel, physicsController, quadObj); } }
private void UpdateShadow(GameEntityModel model, GameObject entityObject) { GameObject shadowObj = CharacterLoader.GetCharacterShadow(model, entityObject); PhysicPointModel pointModel = GameEntityController.GetPointModel(model); if (shadowObj == null || pointModel == null) { return; } Vector3 newShadowPosition; if (pointModel.collisionInpact.Y < 0) { newShadowPosition = pointModel.position.AsVector3(); } else { // Raycast on physics WorldModel world = StateManager.state.MainModel as WorldModel; if (world == null) { return; } PhysicWorldModel physicsModel = StateManager.state.GetModel(world.physicsModelId) as PhysicWorldModel; if (physicsModel == null) { return; } PhysicWorldController physicsController = physicsModel.Controller() as PhysicWorldController; if (physicsController == null) { return; } PhysicPointModel entityPoint = GameEntityController.GetPointModel(model); FixedVector3 intersection = physicsController.Raycast(physicsModel, entityPoint.position, FixedVector3.Down); newShadowPosition = intersection.AsVector3(); } // TODO: coordinates conversion from a setup file shadowObj.transform.position = PhysicPoint2DView.ConvertGameToViewCoordinates(newShadowPosition); shadowObj.transform.localPosition = new Vector3(0, shadowObj.transform.localPosition.y, 0.02f); }
private void ProducePlaneFromQuad(PhysicWorldModel physicsModel, PhysicWorldController physicsController, GameObject quadObj) { MeshFilter meshFilter = quadObj.GetComponent <MeshFilter>(); if (meshFilter == null) { return; } Vector3[] vertices = meshFilter.mesh.vertices; if (vertices.Length < 4) { return; } PhysicPlaneModel plane = new PhysicPlaneModel( // null, "debug_planes", quadObj.transform.TransformPoint(vertices[0]).AsFixedVetor3(), quadObj.transform.TransformPoint(vertices[3]).AsFixedVetor3(), quadObj.transform.TransformPoint(vertices[1]).AsFixedVetor3(), quadObj.transform.TransformPoint(vertices[2]).AsFixedVetor3() ); physicsController.AddPlane(physicsModel, plane); }