mirror of
https://github.com/Steffo99/gravity-fusion.git
synced 2024-11-25 09:44:19 +00:00
Add merge without conditions
This commit is contained in:
parent
d736aa97a2
commit
fe03b38480
7 changed files with 238 additions and 11 deletions
|
@ -7,11 +7,10 @@ public class Gravitation : MonoBehaviour
|
||||||
{
|
{
|
||||||
[Header("Forces")]
|
[Header("Forces")]
|
||||||
protected Vector3 appliedForce;
|
protected Vector3 appliedForce;
|
||||||
protected float forcesIntensity;
|
|
||||||
|
|
||||||
[Header("Internals")]
|
[Header("Internals")]
|
||||||
public static List<Gravitation> simulatedObjects;
|
|
||||||
public int positionInList;
|
public int positionInList;
|
||||||
|
public static List<Gravitation> simulatedObjects;
|
||||||
|
|
||||||
[Header("References")]
|
[Header("References")]
|
||||||
protected new Rigidbody2D rigidbody;
|
protected new Rigidbody2D rigidbody;
|
||||||
|
@ -28,7 +27,7 @@ public class Gravitation : MonoBehaviour
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Awake() {
|
private void OnEnable() {
|
||||||
if(simulatedObjects == null) {
|
if(simulatedObjects == null) {
|
||||||
simulatedObjects = new List<Gravitation>();
|
simulatedObjects = new List<Gravitation>();
|
||||||
}
|
}
|
||||||
|
@ -36,12 +35,15 @@ public class Gravitation : MonoBehaviour
|
||||||
simulatedObjects.Add(this);
|
simulatedObjects.Add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnDisable() {
|
||||||
|
simulatedObjects.Remove(this);
|
||||||
|
}
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
rigidbody = GetComponent<Rigidbody2D>();
|
rigidbody = GetComponent<Rigidbody2D>();
|
||||||
gameController = GameObject.Find("GameController").GetComponent<GameController>();
|
gameController = GameObject.Find("GameController").GetComponent<GameController>();
|
||||||
appliedForce = new Vector3(0f, 0f, 0f);
|
appliedForce = new Vector3(0f, 0f, 0f);
|
||||||
forcesIntensity = 0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// O(n²)
|
// O(n²)
|
||||||
|
@ -53,16 +55,9 @@ public class Gravitation : MonoBehaviour
|
||||||
float force = gameController.gravitationConstant * this.mass * other.mass / Mathf.Pow(distance, 2);
|
float force = gameController.gravitationConstant * this.mass * other.mass / Mathf.Pow(distance, 2);
|
||||||
Vector3 direction = (other.transform.position - this.transform.position).normalized;
|
Vector3 direction = (other.transform.position - this.transform.position).normalized;
|
||||||
this.appliedForce += direction * force;
|
this.appliedForce += direction * force;
|
||||||
this.forcesIntensity += force;
|
|
||||||
other.appliedForce -= direction * force;
|
other.appliedForce -= direction * force;
|
||||||
other.forcesIntensity += force;
|
|
||||||
}
|
}
|
||||||
rigidbody.AddForce(appliedForce);
|
rigidbody.AddForce(appliedForce);
|
||||||
if(forcesIntensity >= 5f) {
|
|
||||||
GetComponent<SpriteRenderer>().color = Color.yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
appliedForce = new Vector3(0, 0, 0);
|
appliedForce = new Vector3(0, 0, 0);
|
||||||
forcesIntensity = 0f;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
52
Assets/Components/Merge.cs
Normal file
52
Assets/Components/Merge.cs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[RequireComponent(typeof(CircleCollider2D))]
|
||||||
|
public class Merge : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Header("Config")]
|
||||||
|
public GameObject mergeIntoPrefab;
|
||||||
|
|
||||||
|
[Header("References")]
|
||||||
|
protected new CircleCollider2D collider;
|
||||||
|
|
||||||
|
[Header("Internals")]
|
||||||
|
protected List<Merge> mergeables;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
collider = GetComponent<CircleCollider2D>();
|
||||||
|
mergeables = new List<Merge>();
|
||||||
|
mergeables.Add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnTriggerEnter2D(Collider2D other) {
|
||||||
|
Merge otherMerge = other.GetComponent<Merge>();
|
||||||
|
mergeables.Add(otherMerge);
|
||||||
|
|
||||||
|
if(CanMerge()) DoMerge();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnTriggerExit2D(Collider2D other) {
|
||||||
|
Merge otherMerge = other.GetComponent<Merge>();
|
||||||
|
mergeables.Remove(otherMerge);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool CanMerge() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void DoMerge() {
|
||||||
|
GameObject mergeResult = Instantiate(mergeIntoPrefab, transform.position, Quaternion.identity);
|
||||||
|
MergedInfo mergedInfo = mergeResult.AddComponent<MergedInfo>();
|
||||||
|
mergedInfo.mergedCount = mergeables.Count;
|
||||||
|
foreach(Merge merged in mergeables) {
|
||||||
|
Rigidbody2D mergedBody = merged.GetComponentInParent<Rigidbody2D>();
|
||||||
|
if(mergedBody != null) {
|
||||||
|
mergedInfo.mergedMass += mergedBody.mass;
|
||||||
|
}
|
||||||
|
Destroy(merged.transform.parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Components/Merge.cs.meta
Normal file
11
Assets/Components/Merge.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1010c8363cc1ebd4e9c1808f9a2737e2
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
9
Assets/Components/MergedInfo.cs
Normal file
9
Assets/Components/MergedInfo.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class MergedInfo : MonoBehaviour
|
||||||
|
{
|
||||||
|
public int mergedCount;
|
||||||
|
public float mergedMass;
|
||||||
|
}
|
11
Assets/Components/MergedInfo.cs.meta
Normal file
11
Assets/Components/MergedInfo.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c9b169f8058046d4fb7374586f318ae6
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -13,6 +13,7 @@ GameObject:
|
||||||
- component: {fileID: 5473375028011702753}
|
- component: {fileID: 5473375028011702753}
|
||||||
- component: {fileID: 5473375028011702752}
|
- component: {fileID: 5473375028011702752}
|
||||||
- component: {fileID: 5473375028011702755}
|
- component: {fileID: 5473375028011702755}
|
||||||
|
- component: {fileID: 720206987848026506}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Gravitation Object
|
m_Name: Gravitation Object
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
|
@ -134,3 +135,17 @@ MonoBehaviour:
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
positionInList: 0
|
positionInList: 0
|
||||||
|
--- !u!114 &720206987848026506
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5473375028011702754}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 1010c8363cc1ebd4e9c1808f9a2737e2, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
requiredForce: 5
|
||||||
|
transformIntoPrefab: {fileID: 0}
|
||||||
|
|
|
@ -121,6 +121,140 @@ NavMeshSettings:
|
||||||
debug:
|
debug:
|
||||||
m_Flags: 0
|
m_Flags: 0
|
||||||
m_NavMeshData: {fileID: 0}
|
m_NavMeshData: {fileID: 0}
|
||||||
|
--- !u!1 &467926748
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 467926753}
|
||||||
|
- component: {fileID: 467926752}
|
||||||
|
- component: {fileID: 467926751}
|
||||||
|
- component: {fileID: 467926750}
|
||||||
|
- component: {fileID: 467926749}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Sun
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!114 &467926749
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 467926748}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d16f17bda197c324f8b088f106c66c5c, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
positionInList: 0
|
||||||
|
--- !u!58 &467926750
|
||||||
|
CircleCollider2D:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 467926748}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_Density: 1
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IsTrigger: 0
|
||||||
|
m_UsedByEffector: 0
|
||||||
|
m_UsedByComposite: 0
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Radius: 0.5
|
||||||
|
--- !u!50 &467926751
|
||||||
|
Rigidbody2D:
|
||||||
|
serializedVersion: 4
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 467926748}
|
||||||
|
m_BodyType: 0
|
||||||
|
m_Simulated: 1
|
||||||
|
m_UseFullKinematicContacts: 0
|
||||||
|
m_UseAutoMass: 0
|
||||||
|
m_Mass: 10
|
||||||
|
m_LinearDrag: 0
|
||||||
|
m_AngularDrag: 0.05
|
||||||
|
m_GravityScale: 0
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Interpolate: 0
|
||||||
|
m_SleepingMode: 1
|
||||||
|
m_CollisionDetection: 0
|
||||||
|
m_Constraints: 0
|
||||||
|
--- !u!212 &467926752
|
||||||
|
SpriteRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 467926748}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 0
|
||||||
|
m_ReceiveShadows: 0
|
||||||
|
m_DynamicOccludee: 1
|
||||||
|
m_MotionVectors: 1
|
||||||
|
m_LightProbeUsage: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_RayTracingMode: 0
|
||||||
|
m_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_StaticBatchInfo:
|
||||||
|
firstSubMesh: 0
|
||||||
|
subMeshCount: 0
|
||||||
|
m_StaticBatchRoot: {fileID: 0}
|
||||||
|
m_ProbeAnchor: {fileID: 0}
|
||||||
|
m_LightProbeVolumeOverride: {fileID: 0}
|
||||||
|
m_ScaleInLightmap: 1
|
||||||
|
m_ReceiveGI: 1
|
||||||
|
m_PreserveUVs: 0
|
||||||
|
m_IgnoreNormalsForChartDetection: 0
|
||||||
|
m_ImportantGI: 0
|
||||||
|
m_StitchLightmapSeams: 1
|
||||||
|
m_SelectedEditorRenderState: 0
|
||||||
|
m_MinimumChartSize: 4
|
||||||
|
m_AutoUVMaxDistance: 0.5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingLayer: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_Sprite: {fileID: 21300000, guid: d8cf31929ca287542bdc219ec19f002e, type: 3}
|
||||||
|
m_Color: {r: 1, g: 1, b: 0, a: 1}
|
||||||
|
m_FlipX: 0
|
||||||
|
m_FlipY: 0
|
||||||
|
m_DrawMode: 0
|
||||||
|
m_Size: {x: 1, y: 1}
|
||||||
|
m_AdaptiveModeThreshold: 0.5
|
||||||
|
m_SpriteTileMode: 0
|
||||||
|
m_WasSpriteAssigned: 1
|
||||||
|
m_MaskInteraction: 0
|
||||||
|
m_SpriteSortPoint: 0
|
||||||
|
--- !u!4 &467926753
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 467926748}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 2, y: 2, z: 2}
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 2
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1001 &1803533283597936005
|
--- !u!1001 &1803533283597936005
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
Loading…
Reference in a new issue