public override void Act(StateController controller, ActionData actionData) { Slime slime = controller.GetComponent <Slime>(); // TODO Only split when grounded & not moving? Must then be in Act()... but only split once! if (slime != null && controller.inputManager.currentTarget != null && controller.inputManager.IsGrounded() && Mathf.Abs(controller.GetComponent <Rigidbody>().velocity.x) < 0.1 && Mathf.Abs(controller.GetComponent <Rigidbody>().velocity.z) < 0.1) { controller.transform.LookAt(controller.inputManager.currentTarget.transform); // TODO HACK: Better smoothly turn towards target! Vector3 requiredForce = slime.CalculateSplitForceNeeded(controller.inputManager.currentTarget.transform.position, 60); // HACK NIET WORKING WRONG DIRECTION if (!float.IsNaN(requiredForce.x) && !float.IsNaN(requiredForce.y) && !float.IsNaN(requiredForce.z)) { requiredForce.x *= -1; // HACK requiredForce.z *= -1; // HACK requiredForce *= slime.rb.mass * 3; slime.rb.AddForce(requiredForce); // HACK NIET WORKING } } }
public override void Act(StateController controller, ActionData actionData) { Slime slime = controller.GetComponent <Slime>(); // TODO Only split when grounded & not moving? Must then be in Act()... but only split once! if (slime != null && controller.inputManager.currentTarget != null && controller.inputManager.IsGrounded() && Mathf.Abs(controller.GetComponent <Rigidbody>().velocity.x) < 0.1 && Mathf.Abs(controller.GetComponent <Rigidbody>().velocity.z) < 0.1 && ((actionData.objectData.ContainsKey("SplitDone") && !Convert.ToBoolean(actionData.objectData["SplitDone"])) || !actionData.objectData.ContainsKey("SplitDone"))) { controller.transform.LookAt(controller.inputManager.currentTarget.transform); // TODO HACK: Better smoothly turn towards target! Vector3 requiredForce = slime.CalculateSplitForceNeeded(controller.inputManager.currentTarget.transform.position); slime.SplitSlime(requiredForce); if (actionData.objectData.ContainsKey("SplitDone")) { actionData.objectData["SplitDone"] = true; } else { actionData.objectData.Add("SplitDone", true); } } }