private void UpdateNearbySourceIntersections(GravitySource gravitySource) { if (gravitySource != currentGravitySource) { // Gravity source changed. Re-initialize source intersections currentGravitySource = gravitySource; InitializeSourceIntersections(); return; } // Update source intersection entries for (int i = 0; i < sourceIntersections.Count; i++) { SourceIntersections thisSourceIntersectionEntry = sourceIntersections[i]; // Hide all intersection sprites thisSourceIntersectionEntry.HideIntersectionObjects(); // Stop coroutines running for each existing segment intersection for (int j = 0; j < thisSourceIntersectionEntry.IntersectionCount; j++) { IEnumerator thisRoutine = thisSourceIntersectionEntry.intersectionCoroutines[j]; if (thisRoutine == null) { continue; } StopCoroutine(thisRoutine); } // Update this entry with now valid intersection objects SegmentIntersection[] validIntersections = GetValidSegmentIntersections(thisSourceIntersectionEntry.Source); thisSourceIntersectionEntry.UpdateSegmentIntersections(validIntersections); } }
public override void OnInspectorGUI() { GravitySource source = (GravitySource)target; source.type = (GravitySource.Type)EditorGUILayout.EnumPopup("Type", source.type); source.gravityStrength = EditorGUILayout.FloatField("Gravity strength", source.gravityStrength); }
public void ResetGravity() { //gravitySource = GalaxyManager.Galaxy; gravitySource = null; isFloating = true; Float(); }
void Start() { SceneData data = GameObject.FindObjectOfType <SceneData>(); planet = data.planet; srcGravity = planet.gravity; }
public void ResetGravity() { //gravitySource = GalaxyManager.Galaxy; transform.parent = transform.parent.parent; gravitySource = null; isFloating = true; //Float(); }
public static Vector2 GravitationalForceAtPosition(this GravitySource gravitySource, Vector2 position, float mass) { Vector2 distance = gravitySource.Position - position; float forceMagnitude = Globals.GRAVITATIONALCONSTANT * gravitySource.Mass * mass / Vector2.SqrMagnitude(distance); Vector2 force = forceMagnitude * distance.normalized; return(force); }
public static void Unregister(GravitySource source) { if (!sources.Contains(source)) { return; } sources.Remove(source); }
public static void Register(GravitySource source) { if (sources.Contains(source)) { return; } sources.Add(source); }
public static void Register(GravitySource source) { Debug.Assert( !sources.Contains(source), "Duplicate registration of gravity source!", source ); sources.Add(source); }
public static void Unregister(GravitySource source) { Debug.Assert( sources.Contains(source), "Unregistration of unknown gravity source!", source ); sources.Remove(source); }
// Update is called once per frame void Update() { GravitySource source = gravityObject.GetGravitySource(); Vector3 target = source != null ? new Vector3(source.transform.position.x, source.transform.position.y, transform.position.z) : new Vector3(player.transform.position.x, player.transform.position.y, transform.position.z); transform.position = Vector3.Lerp(transform.position, target, 0.3f); }
/// <summary> /// 注册重力源 /// </summary> /// <param name="source">重力源</param> public static void Register(GravitySource source) { // 1. 检查是否已存在 Debug.Assert(!m_sources.Contains(source), "Duplicate registration of gravity source!", source ); // 2. 添加 m_sources.Add(source); }
/// <summary> /// 删除重力源 /// </summary> /// <param name="source">重力源</param> public static void Unregister(GravitySource source) { // 1. 检查重力源是否不存在,是则报错 Debug.Assert(m_sources.Contains(source), "Unrestration of unkonwn gravity source", source ); // 2. 移除 m_sources.Remove(source); }
public static void RegisterGravitySource(GravitySource source) { Debug.Assert( !sources.Contains(source), "Trying to add a gravity source already registered.", source ); sources.Add(source); }
public static void UnregisterGravitySource(GravitySource source) { Debug.Assert( sources.Contains(source), "Trying to remove a gravity source that was not registered.", source ); sources.Remove(source); }
private void InitializeSourceIntersections() { ResetNearestSourceIntersections(); for (int i = 0; i < currentGravitySource.OrbitalBodies.Count; i++) { GravitySource source = currentGravitySource.OrbitalBodies[i]; SegmentIntersection[] validIntersections = GetValidSegmentIntersections(source); sourceIntersections.Add(new SourceIntersections(validIntersections, source, intersectionObjectPrefab)); } }
private void Start() { Cursor.visible = false; loadingScreen = LoadingScreen.instance; gravitySource = GravitySource.instance; terrainPlacer = TerrainPlacer.instance; player = Player.instance; StartCoroutine(GenerateNewPlanet()); }
//public void GetCurrentOffset(){ // currentAngle = gravitySource != null ? (transform.position.x - gravitySource.transform.position.x) / (transform.position.y - gravitySource.transform.position.y) : 0f; //} //public void SetCurrentOffset(){ // if (gravitySource != null){ // float z = transform.position.z; // Vector2 pos = new Vector2(currentAngle, 1f).normalized * (gravitySource.Radius); // transform.position = new Vector3(gravitySource.transform.position.x + pos.x, gravitySource.transform.position.y + pos.y, transform.position.z); // } //} //public void SyncPos(){ // currentAngle = (transform.position.x - gravitySource.transform.position.x) / (transform.position.y - gravitySource.transform.position.y); //} public void UseGravity(GravitySource source) { if (source != null) { gravitySource = source; transform.parent = source.transform.parent; //Float(); isFloating = false; } }
public static void Draw(SpriteBatch sb) { if (dispGui) { GravitySource src = ModContent.GetInstance <GravitySource>(); if (Main.player[Main.myPlayer].GetModPlayer <PlayerFixer>().custGravity) { src.DrawGUIComps(sb); Main.player[Main.myPlayer].GetModPlayer <PlayerFixer>().DrawGravGui(sb); } } }
void OnTriggerExit2D(Collider2D coll) { GravitySource source = coll.gameObject.GetComponent <GravitySource>(); if (source != null) { if (source != null) { source.OnGravityPulse -= OnGravitationalPulseForceApplied; } } }
private void Awake() { if (instance != null) { Debug.LogWarning("Multiple instances of " + this + " found"); } instance = this; gravityBodies = new List <GravityBody>(); Orbision.AddOrigin(transform.position); }
public void UpdateSystem() { UpdateDeterministically(); for (int i = 0; i < OrbitalBodies.Count; i++) { GravitySource gravitySource = OrbitalBodies[i]; if (gravitySource == null || !gravitySource.isActiveAndEnabled) { continue; } gravitySource.UpdateSystem(); } }
protected void InitializeNewOrbit(GravitySource newSource) { Vector2 relVel = Velocity - newSource.Velocity; // world vel - newSource.vel Vector2 relPos = Position - newSource.Position; // world pos - newSource.pos CurrentGravitySource = newSource; CalculateOrbitalParametersFromStateVectors(relPos, relVel); recentlyChangedSource = true; GravitySourceChangedEvent(); // invoke event IEnumerator recentSourceChangeCoroutine = ChangeSourceTimer(); StartCoroutine(recentSourceChangeCoroutine); }
public SourceIntersections(SegmentIntersection[] segmentIntersections, GravitySource source, GameObject intersectionObjectPrefab) { SegmentIntersections = segmentIntersections; IntersectionCount = segmentIntersections.Length; intersectionCoroutines = new IEnumerator[IntersectionCount]; Source = source; baseIntersectionSprites = new GameObject[2]; targetIntersectionSprites = new GameObject[2]; for (int i = 0; i < baseIntersectionSprites.Length; i++) { AddIntersectionObject(i, baseIntersectionSprites, intersectionObjectPrefab); AddIntersectionObject(i, targetIntersectionSprites, intersectionObjectPrefab); } }
public void InitializeSystem(GravitySource parent) { CurrentGravitySource = parent; if (parent == null) { SourceRank = 0; } else { SourceRank = CurrentGravitySource.SourceRank + 1; } for (int i = 0; i < OrbitalBodies.Count; i++) { OrbitalBodies[i].InitializeSystem(this); } }
/// <summary> /// 指定したTransform対して指定した相対的な方角へ重力を働かせる /// </summary> /// <param name="target"></param> /// <param name="direction"></param> public void ChangeGravitySource(Transform target, GravitySource direction) { PreviousGravity = Physics.gravity; Vector3 targetSource; switch (direction) { case GravitySource.Forward: targetSource = target.forward * m_gravitationalAcceleration; CurrentGravitySource = GravitySource.Forward; break; case GravitySource.Back: targetSource = -target.forward * m_gravitationalAcceleration; CurrentGravitySource = GravitySource.Back; break; case GravitySource.Right: targetSource = target.right * m_gravitationalAcceleration; CurrentGravitySource = GravitySource.Right; break; case GravitySource.Left: targetSource = -target.right * m_gravitationalAcceleration; CurrentGravitySource = GravitySource.Left; break; case GravitySource.Up: targetSource = target.up * m_gravitationalAcceleration; CurrentGravitySource = GravitySource.Up; break; case GravitySource.Down: targetSource = -target.up * m_gravitationalAcceleration; CurrentGravitySource = GravitySource.Down; break; default: throw new System.ArgumentException("Invalid argument"); } Physics.gravity = targetSource; // ========= // Issue an event // ========= OnChangeGravity(); }
void OnTriggerEnter2D(Collider2D coll) { GravitySource source = coll.gameObject.GetComponent <GravitySource>(); Planet planet = coll.gameObject.GetComponent <Planet>(); if (source != null) { if (source != null) { source.OnGravityPulse -= OnGravitationalPulseForceApplied; source.OnGravityPulse += OnGravitationalPulseForceApplied; } } else if (planet != null) { AttachPlanets(planet); } }
public GravityBody(Rigidbody rb, SpinType spinType = SpinType.axis) { gravitySource = GravitySource.instance; transform = rb.transform; this.rb = rb; rb.useGravity = false; rb.freezeRotation = true; this.spinType = spinType; mass = 1; isWeightless = true; groundHitBuffer = gravitySource.groundHitBuffer; attractingPoint = gravitySource.transform; gravitySource.AddGravityObject(this); orbision = Orbision.Vector3ToOrbision(rb.position); }
void Start() { GameManager.SendToMainMenu(); if (isLocalPlayer) { MultiplayerManager.localPlayer = this; if (MultiplayerManager.onLocalPlayerSpawned != null) { MultiplayerManager.onLocalPlayerSpawned.Invoke(this); } motor.enabled = true; CameraManager.main.SetTargetInstantly(motor.camera); CameraManager.main.OnTransitionFinished += ((Transform lastTarget, Transform target) => { if (target == motor.camera) { playerView.SetActive(true); } }); gameObject.tag = GameManager.gravityTag; GravitySource.AddAttractedObject(this); rigidbody.useGravity = false; foreach (MeshRenderer mr in renderer) { mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly; } CmdSetData(GameManager.GetOrCreatePlayer(AccountManager.Username)); GameManager.main.dustSpawner.SpawnField(); } else { motor.camera.gameObject.SetActive(false); motor.enabled = false; SetName(playerName); rigidbody.isKinematic = true;; } }
private SegmentIntersection[] GetValidSegmentIntersections(GravitySource source) { TrajectoryHandler trajectoryHandler = source.TrajectoryHandler; if (trajectoryHandler == null) { return(new SegmentIntersection[0]); } List <SegmentIntersection> intersections = MathUtilities.GetClosestPointsBetweenPolygons(trajectoryPlotter.GetVertices(true), trajectoryHandler.GetVertices(true)); List <SegmentIntersection> validIntersections = new List <SegmentIntersection>(); for (int j = 0; j < intersections.Count; j++) { if (intersections[j].MinDistSq < source.RadiusOfInfluenceSq) { validIntersections.Add(intersections[j]); } } return(validIntersections.ToArray()); }