From 6a96b94a2bab745763b5534e6b8972b01b6be7c1 Mon Sep 17 00:00:00 2001 From: teascade Date: Wed, 14 Aug 2019 20:05:16 +0300 Subject: [PATCH] Add vending machines --- Assets/Prefabs/Vending Machine.prefab | 228 ++++++++++++++++++ Assets/Prefabs/Vending Machine.prefab.meta | 7 + Assets/Scenes/MainScene.unity | 69 ++++++ Assets/Scripts/Environment.meta | 8 + Assets/Scripts/Environment/VendingMachine.cs | 43 ++++ .../Environment/VendingMachine.cs.meta | 11 + Assets/Scripts/Guns/RevolverBullet.cs | 4 + Assets/Scripts/Player/PunchingHand.cs | 4 + Assets/Scripts/Utils/Util.cs | 5 + 9 files changed, 379 insertions(+) create mode 100644 Assets/Prefabs/Vending Machine.prefab create mode 100644 Assets/Prefabs/Vending Machine.prefab.meta create mode 100644 Assets/Scripts/Environment.meta create mode 100644 Assets/Scripts/Environment/VendingMachine.cs create mode 100644 Assets/Scripts/Environment/VendingMachine.cs.meta diff --git a/Assets/Prefabs/Vending Machine.prefab b/Assets/Prefabs/Vending Machine.prefab new file mode 100644 index 0000000..74f6a37 --- /dev/null +++ b/Assets/Prefabs/Vending Machine.prefab @@ -0,0 +1,228 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &11699643643052994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 11699643643052995} + - component: {fileID: 11699643643052996} + m_Layer: 0 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &11699643643052995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643643052994} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2, y: 3, z: 1} + m_Children: [] + m_Father: {fileID: 11699643827672082} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &11699643643052996 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643643052994} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + 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: 106348079 + m_SortingLayer: 3 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 472874229c563e241bddc073ec2dbb90, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.5, y: 0.5} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &11699643827672081 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 11699643827672082} + - component: {fileID: 11699643827672085} + - component: {fileID: 11699643827672084} + - component: {fileID: 11699643827672083} + - component: {fileID: 11699643827672086} + m_Layer: 0 + m_Name: Vending Machine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &11699643827672082 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643827672081} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.08, y: 6.61, z: -11.644531} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 11699643643052995} + - {fileID: 11699643844798483} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &11699643827672085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643827672081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a80c0c53597a834e9decbeebcb08434, type: 3} + m_Name: + m_EditorClassIdentifier: + GunsLeft: 3 + PossibleGuns: + - {fileID: 4462327694118370270, guid: 7b3529c1a7d22d143a060281857bbca5, type: 3} + GunLaunchForceMultiplier: 3.5 + HoleTransform: {fileID: 11699643844798483} + DebugExpelGun: 0 +--- !u!50 &11699643827672084 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643827672081} + m_BodyType: 2 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + 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!61 &11699643827672083 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643827672081} + 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} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1.4901962} + m_EdgeRadius: 0 +--- !u!114 &11699643827672086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643827672081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a2110188365a59e4cb31d0e84789fbbd, type: 3} + m_Name: + m_EditorClassIdentifier: + BodypartPrefabs: [] + DebugExplode: 0 + KillOnZeroHealth: 1 +--- !u!1 &11699643844798482 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 11699643844798483} + m_Layer: 0 + m_Name: Hole + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &11699643844798483 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11699643844798482} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 11699643827672082} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Prefabs/Vending Machine.prefab.meta b/Assets/Prefabs/Vending Machine.prefab.meta new file mode 100644 index 0000000..3b0018b --- /dev/null +++ b/Assets/Prefabs/Vending Machine.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 254d8b252b63a6547810dd3729ddc91b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/MainScene.unity b/Assets/Scenes/MainScene.unity index ff41546..26d81de 100644 --- a/Assets/Scenes/MainScene.unity +++ b/Assets/Scenes/MainScene.unity @@ -109320,6 +109320,75 @@ Transform: type: 3} m_PrefabInstance: {fileID: 670706965} m_PrefabAsset: {fileID: 0} +--- !u!1001 &11699644215422960 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 11699643827672081, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_Name + value: Vending Machine + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalPosition.x + value: 4.08 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalPosition.y + value: 6.61 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalPosition.z + value: -11.644531 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 11699643827672082, guid: 254d8b252b63a6547810dd3729ddc91b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 254d8b252b63a6547810dd3729ddc91b, type: 3} --- !u!1001 &592487111117925280 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Environment.meta b/Assets/Scripts/Environment.meta new file mode 100644 index 0000000..bc4b4e0 --- /dev/null +++ b/Assets/Scripts/Environment.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52862cb8a131a22418cc1385dc18057f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Environment/VendingMachine.cs b/Assets/Scripts/Environment/VendingMachine.cs new file mode 100644 index 0000000..3792fa7 --- /dev/null +++ b/Assets/Scripts/Environment/VendingMachine.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Saltosion.OneWeapon.Guns; +using Saltosion.OneWeapon.Utils; + +namespace Saltosion.OneWeapon.Environment { + public class VendingMachine : MonoBehaviour { + + public int GunsLeft = 3; + public List PossibleGuns = new List(); + + public float GunLaunchForceMultiplier = 1; + + public Transform HoleTransform; + + public bool DebugExpelGun = false; + + void Update() { + if (DebugExpelGun) { + ExpelGun(); + DebugExpelGun = false; + } + } + + public void ExpelGun() { + GameObject Gun = PossibleGuns[Util.RandomValueBetween(0, PossibleGuns.Count - 1)]; + GameObject ShotGun = GameObject.Instantiate(Gun, HoleTransform.position, new Quaternion()); + Rigidbody2D Body = ShotGun.GetComponent(); + if (Body == null) { + Debug.LogError("Shotted Gun has no RigidBody2D!"); + } else { + Vector2 DownwardForce = new Vector2(0, -1) * (Random.value + 0.2f) * GunLaunchForceMultiplier; + Vector2 SidewaysForce = new Vector2(1, 0) * (Random.value * 0.4f - 0.2f) * GunLaunchForceMultiplier; + Body.AddForce(DownwardForce + SidewaysForce, ForceMode2D.Impulse); + } + GunsLeft -= 1; + if (GunsLeft == 0) { + Destroy(this); + } + } + } +} diff --git a/Assets/Scripts/Environment/VendingMachine.cs.meta b/Assets/Scripts/Environment/VendingMachine.cs.meta new file mode 100644 index 0000000..3ca4a57 --- /dev/null +++ b/Assets/Scripts/Environment/VendingMachine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a80c0c53597a834e9decbeebcb08434 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Guns/RevolverBullet.cs b/Assets/Scripts/Guns/RevolverBullet.cs index 4d1da50..00a372d 100644 --- a/Assets/Scripts/Guns/RevolverBullet.cs +++ b/Assets/Scripts/Guns/RevolverBullet.cs @@ -4,6 +4,7 @@ using UnityEngine; using Saltosion.OneWeapon.Player; using Saltosion.OneWeapon.Enemies; using Saltosion.OneWeapon.Effects; +using Saltosion.OneWeapon.Environment; namespace Saltosion.OneWeapon.Guns { [RequireComponent(typeof(Bullet))] @@ -49,9 +50,12 @@ namespace Saltosion.OneWeapon.Guns { // Do damage here, kill everyone Explodable Explodable = collider.GetComponent(); Health Health = collider.GetComponent(); + VendingMachine VendingMachine = collider.GetComponent(); Vector2 Direction = (collider.transform.position - transform.position).normalized; if (Health != null) { Health.Damage(12f, -Direction); + } else if (VendingMachine != null) { + VendingMachine.ExpelGun(); } else if (Explodable != null) { Explodable.Explode(true); } else if (collider.tag == "Environment") { diff --git a/Assets/Scripts/Player/PunchingHand.cs b/Assets/Scripts/Player/PunchingHand.cs index 94d071d..35847c7 100644 --- a/Assets/Scripts/Player/PunchingHand.cs +++ b/Assets/Scripts/Player/PunchingHand.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using UnityEngine; using Saltosion.OneWeapon.Enemies; using Saltosion.OneWeapon.Effects; +using Saltosion.OneWeapon.Environment; namespace Saltosion.OneWeapon.Player { public class PunchingHand : MonoBehaviour { @@ -19,9 +20,12 @@ namespace Saltosion.OneWeapon.Player { Explodable Explodable = collider.GetComponent(); Health Health = collider.GetComponent(); + VendingMachine VendingMachine = collider.GetComponent(); Vector2 Direction = (collider.transform.position - transform.position).normalized; if (Health != null) { Health.Damage(8f, -Direction); + } else if (VendingMachine != null) { + VendingMachine.ExpelGun(); } else if (Explodable != null) { Explodable.Explode(true); } diff --git a/Assets/Scripts/Utils/Util.cs b/Assets/Scripts/Utils/Util.cs index 7d43ba0..14e0fc9 100644 --- a/Assets/Scripts/Utils/Util.cs +++ b/Assets/Scripts/Utils/Util.cs @@ -38,5 +38,10 @@ namespace Saltosion.OneWeapon.Utils { } return FoundTarget; } + + public static int RandomValueBetween(int min, int max) { + int RollMax = max - min; + return (int)(min + Mathf.Min(Mathf.Floor(Random.value * (RollMax + 1)), RollMax)); + } } }