From 766cdff5ffa72b65d7f106658d1603f47739b2ba Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Fri, 27 Oct 2023 11:05:14 +0800 Subject: + init --- "Doc/ROUNDS\345\210\206\346\236\220.xlsx" | Bin 0 -> 2693775 bytes GameCode/AbyssalCountdown.cs | 189 ++ GameCode/Accelerate.cs | 24 + GameCode/ActivateSciptWhenCanSeeOtherPlayer.cs | 42 + GameCode/AddShake.cs | 25 + GameCode/Aim.cs | 39 + GameCode/AimForPlayer.cs | 31 + GameCode/AmplifyColorBase.cs | 879 ++++++++ GameCode/AmplifyColorEffect.cs | 9 + GameCode/AmplifyColorRenderMask.cs | 9 + GameCode/AmplifyColorRenderMaskBase.cs | 174 ++ GameCode/AmplifyColorTriggerProxy.cs | 27 + GameCode/AmplifyColorTriggerProxy2D.cs | 27 + GameCode/AmplifyColorTriggerProxyBase.cs | 9 + GameCode/AmplifyColorVolume.cs | 24 + GameCode/AmplifyColorVolume2D.cs | 24 + GameCode/AmplifyColorVolumeBase.cs | 74 + GameCode/ApplyCardStats.cs | 305 +++ GameCode/ApplyRootScale.cs | 11 + GameCode/ArmRotator.cs | 11 + GameCode/ArtHandler.cs | 84 + GameCode/ArtInstance.cs | 23 + GameCode/AttackLevel.cs | 53 + GameCode/AttackTrigger.cs | 43 + GameCode/AudioModifyer.cs | 9 + GameCode/Background.cs | 33 + GameCode/BackgroundHandler.cs | 39 + GameCode/BeamAttack.cs | 145 ++ GameCode/BezierCurve.cs | 19 + GameCode/BlinkStep.cs | 28 + GameCode/Block.cs | 353 ++++ GameCode/BlockEffect.cs | 6 + GameCode/BlockEffectCounter.cs | 21 + GameCode/BlockRechargeUI.cs | 20 + GameCode/BlockTrigger.cs | 140 ++ GameCode/BlurPost.cs | 16 + GameCode/BounceEffect.cs | 6 + GameCode/BounceEffectRetarget.cs | 103 + GameCode/BounceTrigger.cs | 22 + GameCode/BrodalAIController.cs | 164 ++ GameCode/BuildOnly.cs | 12 + GameCode/BulletBase.cs | 12 + GameCode/BulletDamageEvents.cs | 18 + GameCode/BulletPoint.cs | 56 + GameCode/BulletSurf.cs | 12 + GameCode/BulletWrapper.cs | 12 + GameCode/CameraZoomHandler.cs | 24 + GameCode/CanSeeInfo.cs | 10 + GameCode/CapScale.cs | 20 + GameCode/CappedDeltaTime.cs | 11 + GameCode/CardAnimation.cs | 5 + GameCode/CardAudioModifier.cs | 14 + GameCode/CardBar.cs | 95 + GameCode/CardBarButton.cs | 19 + GameCode/CardBarHandler.cs | 27 + GameCode/CardCategories.cs | 5 + GameCode/CardCategory.cs | 6 + GameCode/CardChoice.cs | 460 ++++ GameCode/CardChoiceVisuals.cs | 162 ++ GameCode/CardInfo.cs | 68 + GameCode/CardInfoDisplayer.cs | 61 + GameCode/CardInfoStat.cs | 69 + GameCode/CardRarityColor.cs | 33 + GameCode/CardThemeColor.cs | 25 + GameCode/CardVisuals.cs | 138 ++ GameCode/ChangeColor.cs | 12 + ...ChangeDamageMultiplierAfterDistanceTravelled.cs | 39 + GameCode/ChannelMessage.cs | 3 + GameCode/CharacterCreator.cs | 101 + GameCode/CharacterCreatorButtonSpawner.cs | 146 ++ GameCode/CharacterCreatorDragging.cs | 116 ++ GameCode/CharacterCreatorHandler.cs | 135 ++ GameCode/CharacterCreatorItemEquipper.cs | 130 ++ GameCode/CharacterCreatorItemLoader.cs | 77 + GameCode/CharacterCreatorNavigation.cs | 162 ++ GameCode/CharacterCreatorPortrait.cs | 121 ++ GameCode/CharacterData.cs | 291 +++ GameCode/CharacterItem.cs | 42 + GameCode/CharacterItemButton.cs | 16 + GameCode/CharacterItemMirror.cs | 42 + GameCode/CharacterItemType.cs | 6 + GameCode/CharacterSelectionInstance.cs | 157 ++ GameCode/CharacterSelectionMenu.cs | 21 + GameCode/CharacterStatModifiers.cs | 281 +++ GameCode/ChargeFeedback.cs | 44 + GameCode/Chase.cs | 62 + GameCode/ChatFilter.cs | 75 + GameCode/ChatFilterInstance.cs | 14 + GameCode/ChildRPC.cs | 110 + GameCode/ChillingTouch.cs | 20 + GameCode/ChomaticAberrationFeeler.cs | 63 + GameCode/Cluster.cs | 46 + GameCode/CodeAnimation.cs | 205 ++ GameCode/CodeAnimationInstance.cs | 62 + GameCode/CollisionChecker.cs | 41 + GameCode/ColorBlink.cs | 42 + GameCode/ColorHandler.cs | 25 + GameCode/Comment.cs | 7 + GameCode/Connected.cs | 1 + GameCode/ControllerImageToggler.cs | 71 + GameCode/CooldownCondition.cs | 20 + GameCode/CooldownWindUp.cs | 39 + GameCode/CopyChildren.cs | 24 + GameCode/CopyObject.cs | 9 + GameCode/CopyOwnerGunStats.cs | 9 + GameCode/CopyPlayerAim.cs | 32 + GameCode/Cos.cs | 11 + GameCode/CounterUI.cs | 59 + GameCode/CrownPos.cs | 16 + GameCode/CurveAnimation.cs | 249 +++ GameCode/CurveAnimationInstance.cs | 73 + GameCode/CurveAnimationType.cs | 7 + GameCode/CurveAnimationUse.cs | 6 + GameCode/Damagable.cs | 10 + GameCode/DamagableEvent.cs | 134 ++ GameCode/DamageBox.cs | 96 + GameCode/DamageEffect.cs | 6 + GameCode/DamageOverTime.cs | 38 + GameCode/DealDamageToPlayer.cs | 47 + GameCode/DealtDamageEffect.cs | 6 + GameCode/DealtDamageTrigger.cs | 19 + GameCode/DeathEffect.cs | 101 + GameCode/Debug.cs | 53 + GameCode/DelayEvent.cs | 61 + GameCode/DelayedEvent.cs | 14 + GameCode/DestroyEvent.cs | 22 + GameCode/DestroyObjects.cs | 19 + GameCode/DestroyOnAwake.cs | 9 + GameCode/Destructible.cs | 45 + GameCode/DestructibleBoxDestruction.cs | 40 + GameCode/DevConsole.cs | 128 ++ GameCode/DisableChildren.cs | 13 + GameCode/DisableEvent.cs | 12 + GameCode/DisableIfSimple.cs | 17 + GameCode/DisableObjects.cs | 24 + GameCode/DisplayMatchPlayerNames.cs | 32 + GameCode/DmgEvent.cs | 10 + GameCode/DoPlayerReload.cs | 16 + GameCode/DodgeGround.cs | 141 ++ GameCode/DontChangeMe.cs | 12 + GameCode/DuringReloadTrigger.cs | 38 + GameCode/DynamicParticleSet.cs | 9 + GameCode/DynamicParticles.cs | 50 + GameCode/Emoji.cs | 7 + GameCode/EmojiButton.cs | 8 + GameCode/EmojiCombiner.cs | 49 + GameCode/Empower.cs | 110 + GameCode/EmpowerStopBlockObjectFollow.cs | 25 + GameCode/EmptySprite.cs | 24 + GameCode/EnableEvent.cs | 12 + GameCode/EnableObjectPerLevel.cs | 12 + GameCode/EnsnareEffect.cs | 98 + GameCode/ErrorHandler.cs | 30 + GameCode/EscapeMenuHandler.cs | 62 + GameCode/EventSequence.cs | 52 + GameCode/ExceptionThrown.cs | 3 + GameCode/Explosion.cs | 216 ++ GameCode/Explosion_Overpower.cs | 23 + GameCode/Extensions.cs | 19 + GameCode/ExtraBlock.cs | 16 + GameCode/FRILerp.cs | 48 + GameCode/FakeParticleDB.cs | 33 + GameCode/FlickerEvent.cs | 48 + GameCode/FollowInactiveHand.cs | 29 + GameCode/FollowLocalPos.cs | 57 + GameCode/FollowPlayer.cs | 40 + GameCode/FollowRandomPlayer.cs | 40 + GameCode/FollowScale.cs | 14 + GameCode/FollowTransform.cs | 23 + GameCode/ForceMultiplier.cs | 6 + GameCode/FreeModifier.cs | 35 + GameCode/GM_ArmsRace.cs | 465 +++++ GameCode/GM_Test.cs | 71 + GameCode/GameAnalytics.cs | 17 + GameCode/GameCrownHandler.cs | 116 ++ GameCode/GameFeeler.cs | 18 + GameCode/GameManager.cs | 38 + GameCode/GamefeelManager.cs | 60 + GameCode/GeneralInput.cs | 274 +++ GameCode/GeneralParticleSystem.cs | 304 +++ GameCode/GeneralShooter.cs | 43 + GameCode/GetColor.cs | 21 + GameCode/GetControllerButton.cs | 3 + GameCode/GifCam.cs | 25 + GameCode/GoBack.cs | 31 + GameCode/Grass.cs | 63 + GameCode/Gravity.cs | 35 + GameCode/GridBounceCircle.cs | 57 + GameCode/GridLightBulb.cs | 57 + GameCode/GridObject.cs | 26 + GameCode/GridVisualizer.cs | 56 + GameCode/Gun.cs | 698 +++++++ GameCode/GunAmmo.cs | 212 ++ GameCode/GunLevel.cs | 21 + GameCode/HandPos.cs | 5 + GameCode/HasToReturn.cs | 6 + GameCode/HealthBar.cs | 58 + GameCode/HealthHandler.cs | 362 ++++ GameCode/HitInfo.cs | 26 + GameCode/Holdable.cs | 22 + GameCode/Holding.cs | 75 + GameCode/HoldingObject.cs | 22 + GameCode/Homing.cs | 104 + GameCode/HoverEvent.cs | 38 + GameCode/HoverEventColor.cs | 32 + GameCode/HoverEvent_WobbleButton.cs | 45 + GameCode/HoveredTooltip.cs | 47 + GameCode/IKArmMove.cs | 56 + GameCode/IKLegMove.cs | 142 ++ GameCode/IkLeg.cs | 290 +++ GameCode/Immunities.cs | 15 + GameCode/Implosion.cs | 39 + GameCode/InitPackage.cs | 4 + GameCode/IsMineEvent.cs | 12 + GameCode/JustEvent.cs | 12 + GameCode/KillBox.cs | 40 + GameCode/LeftRight.cs | 5 + GameCode/LegRaycasters.cs | 77 + GameCode/LegRenderer.cs | 77 + GameCode/LegRotator.cs | 26 + GameCode/LerpBackToStartPos.cs | 12 + GameCode/LevelMapper.cs | 132 ++ GameCode/LevelScale.cs | 45 + GameCode/LifeSteal.cs | 20 + GameCode/LineEffect.cs | 454 ++++ GameCode/LineEffectExplosionModifier.cs | 44 + GameCode/LineEffectInstance.cs | 40 + GameCode/LineOfSightTrigger.cs | 59 + GameCode/LineRangeEffect.cs | 44 + GameCode/ListMenu.cs | 136 ++ GameCode/ListMenuButton.cs | 102 + GameCode/ListMenuPage.cs | 36 + GameCode/LoadingScreen.cs | 81 + GameCode/LobbyHandler.cs | 8 + GameCode/Looper.cs | 66 + GameCode/LowFrameRate.cs | 30 + GameCode/LowerScreenshakePerPlayer.cs | 15 + GameCode/MainCam.cs | 14 + GameCode/MainMenuHandler.cs | 25 + GameCode/Map.cs | 137 ++ GameCode/MapManager.cs | 200 ++ GameCode/MapObjet_Rope.cs | 274 +++ GameCode/MapTransition.cs | 145 ++ GameCode/MapWrapper.cs | 14 + GameCode/MenuControllerEvent.cs | 12 + GameCode/MenuControllerHandler.cs | 75 + GameCode/MenuControllerToggler.cs | 75 + GameCode/MenuEffects.cs | 51 + GameCode/MoveForward.cs | 11 + GameCode/MoveSequence.cs | 99 + GameCode/MoveTransform.cs | 78 + GameCode/MoveTransformGravity.cs | 23 + GameCode/Movement.cs | 137 ++ GameCode/MultiOptions.cs | 168 ++ GameCode/MultiOptionsButton.cs | 13 + GameCode/MusicGridVisualizer.cs | 13 + GameCode/MusicVisualizerData.cs | 18 + GameCode/NetworkConnectionHandler.cs | 450 ++++ GameCode/NetworkData.cs | 58 + GameCode/NetworkPhysicsObject.cs | 248 +++ GameCode/NetworkPlayer.cs | 4 + GameCode/NetworkSettings.cs | 11 + GameCode/NewScript.cs | 12 + GameCode/NextArt.cs | 9 + GameCode/ObjectParticle.cs | 34 + GameCode/ObjectPool.cs | 70 + GameCode/ObjectScaleToBulletStats.cs | 24 + GameCode/ObjectShake.cs | 29 + GameCode/ObjectSyncPackage.cs | 14 + GameCode/ObjectsToSpawn.cs | 123 ++ GameCode/OnlineNameSelect.cs | 21 + GameCode/OnlyOneEdgeModifier.cs | 57 + GameCode/OptionsButton.cs | 204 ++ GameCode/Optionshandler.cs | 187 ++ GameCode/Orbit.cs | 24 + GameCode/OutOfBoundsHandler.cs | 149 ++ GameCode/ParticleExplosionModifier.cs | 50 + GameCode/ParticlePlayer.cs | 53 + GameCode/ParticleTime.cs | 19 + GameCode/PerlinWordScale.cs | 16 + GameCode/PhotonMapObject.cs | 98 + GameCode/PhysicsFunctions.cs | 16 + GameCode/PickerType.cs | 5 + GameCode/Platform.cs | 203 ++ GameCode/PlayLineAnimation.cs | 29 + GameCode/Player.cs | 153 ++ GameCode/PlayerAI.cs | 119 ++ GameCode/PlayerAIDavid.cs | 86 + GameCode/PlayerAIMinion.cs | 63 + GameCode/PlayerAIPetter.cs | 66 + GameCode/PlayerAIPhilip.cs | 280 +++ GameCode/PlayerAIWilhelm.cs | 20 + GameCode/PlayerAIZorro.cs | 208 ++ GameCode/PlayerAPI.cs | 172 ++ GameCode/PlayerActions.cs | 131 ++ GameCode/PlayerAssigner.cs | 220 ++ GameCode/PlayerAudioModifyers.cs | 50 + GameCode/PlayerChat.cs | 87 + GameCode/PlayerCollision.cs | 152 ++ GameCode/PlayerDoBlock.cs | 23 + GameCode/PlayerDoJump.cs | 18 + GameCode/PlayerEffects.cs | 10 + GameCode/PlayerFace.cs | 84 + GameCode/PlayerFlyParticle.cs | 29 + GameCode/PlayerFollowGround.cs | 30 + GameCode/PlayerImmunity.cs | 43 + GameCode/PlayerInRangeSlow.cs | 26 + GameCode/PlayerInRangeTrigger.cs | 79 + GameCode/PlayerJump.cs | 85 + GameCode/PlayerManager.cs | 415 ++++ GameCode/PlayerMovement.cs | 71 + GameCode/PlayerName.cs | 11 + GameCode/PlayerSkin.cs | 12 + GameCode/PlayerSkinBank.cs | 38 + GameCode/PlayerSkinHandler.cs | 63 + GameCode/PlayerSkinParticle.cs | 54 + GameCode/PlayerSounds.cs | 126 ++ GameCode/PlayerSpawnVisualEffect.cs | 12 + GameCode/PlayerVelocity.cs | 82 + GameCode/PlayerWobblePosition.cs | 38 + GameCode/Point.cs | 12 + GameCode/PointVisualizer.cs | 292 +++ GameCode/PopUpHandler.cs | 97 + GameCode/Populate.cs | 71 + GameCode/PositionNoise.cs | 24 + GameCode/PowerUps.cs | 66 + GameCode/ProjectileCollision.cs | 86 + GameCode/ProjectileHit.cs | 393 ++++ GameCode/ProjectileHitEmpower.cs | 17 + GameCode/ProjectileHitSurface.cs | 12 + GameCode/ProjectileHitSurfaceShield.cs | 13 + GameCode/ProjectileInit.cs | 49 + GameCode/ProjectilesToSpawn.cs | 10 + GameCode/PublicInt.cs | 6 + GameCode/QuitButton.cs | 9 + GameCode/RadarShot.cs | 61 + GameCode/Rage.cs | 29 + GameCode/RayCastTrail.cs | 106 + GameCode/RayHit.cs | 6 + GameCode/RayHitBash.cs | 80 + GameCode/RayHitBulletSound.cs | 60 + GameCode/RayHitDrill.cs | 124 ++ GameCode/RayHitEffect.cs | 8 + GameCode/RayHitPoison.cs | 36 + GameCode/RayHitReflect.cs | 61 + GameCode/RaycastForward.cs | 15 + GameCode/RaycastSetScale.cs | 23 + GameCode/ReflectEvent.cs | 12 + GameCode/RegenerateAfterStandStill.cs | 24 + GameCode/RegionSelector.cs | 23 + GameCode/ReloadTigger.cs | 40 + GameCode/RemoteControl.cs | 128 ++ GameCode/RemoveAfterSeconds.cs | 54 + GameCode/RemoveAfterSecondsScale.cs | 9 + GameCode/RescaleFromDamage.cs | 25 + GameCode/RescaleFromDamagePart.cs | 28 + GameCode/ResetBlock.cs | 16 + GameCode/RespawnEvent.cs | 19 + GameCode/RigLookUp.cs | 18 + GameCode/RightLeftMirrorSpring.cs | 46 + GameCode/RingHandler.cs | 52 + GameCode/RotSpring.cs | 43 + GameCode/Rotate.cs | 11 + GameCode/RotatingShooter.cs | 69 + GameCode/RotationHandler.cs | 21 + GameCode/RoundCounter.cs | 124 ++ GameCode/RoundModifier.cs | 12 + GameCode/RunSmoke.cs | 62 + GameCode/SFLight.cs | 350 ++++ GameCode/SFPolygon.cs | 338 +++ GameCode/SFRenderer.cs | 621 ++++++ GameCode/SFSample.cs | 73 + GameCode/Saw.cs | 83 + GameCode/ScaleEvent.cs | 21 + GameCode/ScaleEventInstace.cs | 10 + GameCode/ScaleShake.cs | 76 + GameCode/ScaleTrailFromDamage.cs | 61 + GameCode/ScaleWithHp.cs | 18 + GameCode/ScreenEdgeBounce.cs | 132 ++ GameCode/Screenshaker.cs | 53 + GameCode/ServerMessage.cs | 1 + GameCode/SetActive.cs | 9 + GameCode/SetColorByBlockCD.cs | 36 + GameCode/SetEmissionOverTimeByVelocity.cs | 22 + GameCode/SetLocalScale.cs | 11 + GameCode/SetOfflineMode.cs | 30 + GameCode/SetParticleTimeAfterSecondsToRemove.cs | 13 + GameCode/SetPlayerSpriteLayer.cs | 44 + GameCode/SetRotation.cs | 38 + GameCode/SetScaleFromSizeAndExtraSize.cs | 12 + GameCode/SetScaleToZero.cs | 9 + GameCode/SetSpawnedParticleColor.cs | 30 + GameCode/SetSpecificArt.cs | 38 + GameCode/SetSpriteColor.cs | 18 + GameCode/SetTeamColor.cs | 84 + GameCode/SetTeamColorFromParentPlayer.cs | 14 + GameCode/SetTeamColorFromSpawnedAttack.cs | 9 + GameCode/SetTeamColorSpecific.cs | 27 + GameCode/SetTextColor.cs | 12 + GameCode/ShieldCharge.cs | 168 ++ GameCode/ShootPos.cs | 12 + GameCode/SilenceHandler.cs | 70 + GameCode/SimulatedSelection.cs | 33 + GameCode/SkipIntro.cs | 38 + GameCode/SliceEffect.cs | 5 + GameCode/SoundAudioListenerPosition.cs | 38 + GameCode/SpawnBulletHit.cs | 12 + GameCode/SpawnMinion.cs | 36 + GameCode/SpawnObjectEffect.cs | 101 + GameCode/SpawnObjectOnDealDamage.cs | 50 + GameCode/SpawnObjectOnDealtDamage.cs | 35 + GameCode/SpawnObjects.cs | 83 + GameCode/SpawnPoint.cs | 15 + GameCode/SpawnStaticRemnant.cs | 52 + GameCode/SpawnedAttack.cs | 63 + GameCode/SpawnedAttack_ParentPlayer.cs | 9 + GameCode/Spring.cs | 24 + GameCode/StandStillTrigger.cs | 25 + GameCode/StartEvent.cs | 12 + GameCode/StatsAfterDealingDamage.cs | 68 + GameCode/StatsWhenFullHP.cs | 58 + GameCode/SteamManager.cs | 99 + GameCode/StopRecursion.cs | 5 + GameCode/StunHandler.cs | 102 + GameCode/StunPlayer.cs | 29 + GameCode/SuperBasicController.cs | 327 +++ GameCode/SwordArtMove.cs | 61 + GameCode/TasteOfBlood.cs | 66 + GameCode/Teleport.cs | 76 + GameCode/TeleportToOpponent.cs | 27 + GameCode/TextFlicker.cs | 35 + GameCode/ThereCanOnlyBeOne.cs | 30 + GameCode/Thruster.cs | 84 + GameCode/TickMover.cs | 41 + GameCode/TimeHandler.cs | 96 + GameCode/ToggleStats.cs | 31 + GameCode/ToggleUnparented.cs | 29 + GameCode/TracerRound.cs | 48 + GameCode/TracerTarget.cs | 65 + GameCode/TrickShot.cs | 87 + GameCode/TwitchAudienceVisualizer.cs | 147 ++ GameCode/TwitchChatMessage.cs | 11 + GameCode/TwitchIrc.cs | 217 ++ GameCode/TwitchIrcExample.cs | 88 + GameCode/TwitchUIHandler.cs | 154 ++ GameCode/UIHandler.cs | 177 ++ GameCode/UniformModifier.cs | 28 + GameCode/Unparent.cs | 44 + GameCode/UnparentObject.cs | 9 + GameCode/UnparentOnHit.cs | 38 + GameCode/UserJoined.cs | 3 + GameCode/UserLeft.cs | 3 + GameCode/VelocityStretch.cs | 18 + GameCode/WallRayCaster.cs | 34 + GameCode/WasDealtDamageEffect.cs | 6 + GameCode/WasDealtDamageTrigger.cs | 35 + GameCode/Weapon.cs | 20 + GameCode/WeaponHandler.cs | 173 ++ GameCode/ZapEffect.cs | 20 + GameCode/Zip.cs | 27 + GameCode/Zop.cs | 52 + ROUNDS/.vs/ProjectEvaluation/rounds.metadata.v5.2 | Bin 0 -> 231680 bytes ROUNDS/.vs/ProjectEvaluation/rounds.projects.v5.2 | Bin 0 -> 338457 bytes ROUNDS/.vs/ROUNDS/DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 111939 bytes .../0ab1bff2-041a-4d95-ac3d-bb1664d9e3dd.vsidx | Bin 0 -> 1282310 bytes .../137f2f53-0b71-4a63-9ade-cfe5b28588f0.vsidx | Bin 0 -> 88765 bytes .../5fe23c0d-3068-40a6-b6bf-0cac71fd5f2a.vsidx | Bin 0 -> 39507 bytes .../d1c173dd-2134-446a-a456-1fd2c7db044c.vsidx | Bin 0 -> 32201 bytes ROUNDS/.vs/ROUNDS/FileContentIndex/read.lock | 0 ROUNDS/.vs/ROUNDS/v17/.futdcache.v2 | Bin 0 -> 121 bytes ROUNDS/.vs/ROUNDS/v17/.suo | Bin 0 -> 56832 bytes ROUNDS/.vs/ROUNDS/v17/fileList.bin | Bin 0 -> 78724 bytes ROUNDS/AbyssalCountdown.cs | 189 ++ ROUNDS/Accelerate.cs | 24 + ROUNDS/ActivateSciptWhenCanSeeOtherPlayer.cs | 42 + ROUNDS/AddShake.cs | 25 + ROUNDS/Aim.cs | 39 + ROUNDS/AimForPlayer.cs | 31 + ROUNDS/AmplifyColor/Quality.cs | 7 + ROUNDS/AmplifyColor/RenderLayer.cs | 18 + ROUNDS/AmplifyColor/Tonemapping.cs | 9 + ROUNDS/AmplifyColor/VersionInfo.cs | 67 + ROUNDS/AmplifyColor/VolumeEffect.cs | 256 +++ ROUNDS/AmplifyColor/VolumeEffectComponent.cs | 109 + ROUNDS/AmplifyColor/VolumeEffectComponentFlags.cs | 79 + ROUNDS/AmplifyColor/VolumeEffectContainer.cs | 65 + ROUNDS/AmplifyColor/VolumeEffectField.cs | 79 + ROUNDS/AmplifyColor/VolumeEffectFieldFlags.cs | 27 + ROUNDS/AmplifyColor/VolumeEffectFlags.cs | 98 + ROUNDS/AmplifyColorBase.cs | 879 ++++++++ ROUNDS/AmplifyColorEffect.cs | 9 + ROUNDS/AmplifyColorRenderMask.cs | 9 + ROUNDS/AmplifyColorRenderMaskBase.cs | 174 ++ ROUNDS/AmplifyColorTriggerProxy.cs | 27 + ROUNDS/AmplifyColorTriggerProxy2D.cs | 27 + ROUNDS/AmplifyColorTriggerProxyBase.cs | 9 + ROUNDS/AmplifyColorVolume.cs | 24 + ROUNDS/AmplifyColorVolume2D.cs | 24 + ROUNDS/AmplifyColorVolumeBase.cs | 74 + ROUNDS/ApplyCardStats.cs | 305 +++ ROUNDS/ApplyRootScale.cs | 11 + ROUNDS/ArmRotator.cs | 11 + ROUNDS/ArtHandler.cs | 84 + ROUNDS/ArtInstance.cs | 23 + ROUNDS/AttackLevel.cs | 53 + ROUNDS/AttackTrigger.cs | 43 + ROUNDS/AudioModifyer.cs | 9 + ROUNDS/Background.cs | 33 + ROUNDS/BackgroundHandler.cs | 39 + ROUNDS/BeamAttack.cs | 145 ++ ROUNDS/BezierCurve.cs | 19 + ROUNDS/BlinkStep.cs | 28 + ROUNDS/Block.cs | 353 ++++ ROUNDS/BlockEffect.cs | 6 + ROUNDS/BlockEffectCounter.cs | 21 + ROUNDS/BlockRechargeUI.cs | 20 + ROUNDS/BlockTrigger.cs | 140 ++ ROUNDS/BlurPost.cs | 16 + ROUNDS/BounceEffect.cs | 6 + ROUNDS/BounceEffectRetarget.cs | 103 + ROUNDS/BounceTrigger.cs | 22 + ROUNDS/BrodalAIController.cs | 164 ++ ROUNDS/BuildOnly.cs | 12 + ROUNDS/BulletBase.cs | 12 + ROUNDS/BulletDamageEvents.cs | 18 + ROUNDS/BulletPoint.cs | 56 + ROUNDS/BulletSurf.cs | 12 + ROUNDS/BulletWrapper.cs | 12 + ROUNDS/CameraZoomHandler.cs | 24 + ROUNDS/CanSeeInfo.cs | 10 + ROUNDS/CapScale.cs | 20 + ROUNDS/CappedDeltaTime.cs | 11 + ROUNDS/CardAnimation.cs | 5 + ROUNDS/CardAudioModifier.cs | 14 + ROUNDS/CardBar.cs | 95 + ROUNDS/CardBarButton.cs | 19 + ROUNDS/CardBarHandler.cs | 27 + ROUNDS/CardCategories.cs | 5 + ROUNDS/CardCategory.cs | 6 + ROUNDS/CardChoice.cs | 460 ++++ ROUNDS/CardChoiceVisuals.cs | 162 ++ ROUNDS/CardInfo.cs | 68 + ROUNDS/CardInfoDisplayer.cs | 61 + ROUNDS/CardInfoStat.cs | 69 + ROUNDS/CardRarityColor.cs | 33 + ROUNDS/CardThemeColor.cs | 25 + ROUNDS/CardVisuals.cs | 138 ++ ROUNDS/ChangeColor.cs | 12 + ...ChangeDamageMultiplierAfterDistanceTravelled.cs | 39 + ROUNDS/ChannelMessage.cs | 3 + ROUNDS/CharacterCreator.cs | 101 + ROUNDS/CharacterCreatorButtonSpawner.cs | 146 ++ ROUNDS/CharacterCreatorDragging.cs | 116 ++ ROUNDS/CharacterCreatorHandler.cs | 135 ++ ROUNDS/CharacterCreatorItemEquipper.cs | 130 ++ ROUNDS/CharacterCreatorItemLoader.cs | 77 + ROUNDS/CharacterCreatorNavigation.cs | 162 ++ ROUNDS/CharacterCreatorPortrait.cs | 121 ++ ROUNDS/CharacterItem.cs | 42 + ROUNDS/CharacterItemButton.cs | 16 + ROUNDS/CharacterItemMirror.cs | 42 + ROUNDS/CharacterItemType.cs | 6 + ROUNDS/CharacterSelectionInstance.cs | 157 ++ ROUNDS/CharacterSelectionMenu.cs | 21 + ROUNDS/CharacterStatModifiers.cs | 281 +++ ROUNDS/ChargeFeedback.cs | 44 + ROUNDS/Chase.cs | 62 + ROUNDS/ChatFilter.cs | 75 + ROUNDS/ChatFilterInstance.cs | 14 + ROUNDS/ChildRPC.cs | 110 + ROUNDS/ChillingTouch.cs | 20 + ROUNDS/ChomaticAberrationFeeler.cs | 63 + ROUNDS/Cluster.cs | 46 + ROUNDS/CodeAnimation.cs | 205 ++ ROUNDS/CodeAnimationInstance.cs | 62 + ROUNDS/CollisionChecker.cs | 41 + ROUNDS/ColorBlink.cs | 42 + ROUNDS/ColorHandler.cs | 25 + ROUNDS/Comment.cs | 7 + ROUNDS/Connected.cs | 1 + ROUNDS/ControllerImageToggler.cs | 71 + ROUNDS/CooldownCondition.cs | 20 + ROUNDS/CooldownWindUp.cs | 39 + ROUNDS/CopyChildren.cs | 24 + ROUNDS/CopyObject.cs | 9 + ROUNDS/CopyOwnerGunStats.cs | 9 + ROUNDS/CopyPlayerAim.cs | 32 + ROUNDS/Cos.cs | 11 + ROUNDS/CounterUI.cs | 59 + ROUNDS/CrownPos.cs | 16 + ROUNDS/CurveAnimation.cs | 249 +++ ROUNDS/CurveAnimationInstance.cs | 73 + ROUNDS/CurveAnimationType.cs | 7 + ROUNDS/CurveAnimationUse.cs | 6 + ROUNDS/Damagable.cs | 10 + ROUNDS/DamagableEvent.cs | 134 ++ ROUNDS/DamageBox.cs | 96 + ROUNDS/DamageEffect.cs | 6 + ROUNDS/DamageOverTime.cs | 38 + ROUNDS/DealDamageToPlayer.cs | 47 + ROUNDS/DealtDamageEffect.cs | 6 + ROUNDS/DealtDamageTrigger.cs | 19 + ROUNDS/DeathEffect.cs | 101 + ROUNDS/Debug.cs | 53 + ROUNDS/DelayEvent.cs | 61 + ROUNDS/DelayedEvent.cs | 14 + ROUNDS/DestroyEvent.cs | 22 + ROUNDS/DestroyObjects.cs | 19 + ROUNDS/DestroyOnAwake.cs | 9 + ROUNDS/Destructible.cs | 45 + ROUNDS/DestructibleBoxDestruction.cs | 40 + ROUNDS/DevConsole.cs | 128 ++ ROUNDS/DisableChildren.cs | 13 + ROUNDS/DisableEvent.cs | 12 + ROUNDS/DisableIfSimple.cs | 17 + ROUNDS/DisableObjects.cs | 24 + ROUNDS/DisplayMatchPlayerNames.cs | 32 + ROUNDS/DmgEvent.cs | 10 + ROUNDS/DoPlayerReload.cs | 16 + ROUNDS/DodgeGround.cs | 141 ++ ROUNDS/DontChangeMe.cs | 12 + ROUNDS/DuringReloadTrigger.cs | 38 + ROUNDS/DynamicParticleSet.cs | 9 + ROUNDS/DynamicParticles.cs | 50 + ROUNDS/Emoji.cs | 7 + ROUNDS/EmojiButton.cs | 8 + ROUNDS/EmojiCombiner.cs | 49 + ROUNDS/Empower.cs | 110 + ROUNDS/EmpowerStopBlockObjectFollow.cs | 25 + ROUNDS/EmptySprite.cs | 24 + ROUNDS/EnableEvent.cs | 12 + ROUNDS/EnableObjectPerLevel.cs | 12 + ROUNDS/EnsnareEffect.cs | 98 + ROUNDS/ErrorHandler.cs | 30 + ROUNDS/EscapeMenuHandler.cs | 62 + ROUNDS/EventSequence.cs | 52 + ROUNDS/ExceptionThrown.cs | 3 + ROUNDS/Explosion.cs | 216 ++ ROUNDS/Explosion_Overpower.cs | 23 + ROUNDS/Extensions.cs | 19 + ROUNDS/ExtraBlock.cs | 16 + ROUNDS/FRILerp.cs | 48 + ROUNDS/FakeParticleDB.cs | 33 + ROUNDS/FlickerEvent.cs | 48 + ROUNDS/FollowInactiveHand.cs | 29 + ROUNDS/FollowLocalPos.cs | 57 + ROUNDS/FollowPlayer.cs | 40 + ROUNDS/FollowRandomPlayer.cs | 40 + ROUNDS/FollowScale.cs | 14 + ROUNDS/FollowTransform.cs | 23 + ROUNDS/ForceMultiplier.cs | 6 + ROUNDS/FreeModifier.cs | 35 + ROUNDS/GM_ArmsRace.cs | 465 +++++ ROUNDS/GM_Test.cs | 71 + ROUNDS/GameAnalytics.cs | 17 + ROUNDS/GameCrownHandler.cs | 116 ++ ROUNDS/GameFeeler.cs | 18 + ROUNDS/GameManager.cs | 38 + ROUNDS/GamefeelManager.cs | 60 + ROUNDS/GeneralInput.cs | 274 +++ ROUNDS/GeneralParticleSystem.cs | 304 +++ ROUNDS/GeneralShooter.cs | 43 + ROUNDS/GetColor.cs | 21 + ROUNDS/GetControllerButton.cs | 3 + ROUNDS/GifCam.cs | 25 + ROUNDS/GoBack.cs | 31 + ROUNDS/Grass.cs | 63 + ROUNDS/Gravity.cs | 35 + ROUNDS/GridBounceCircle.cs | 57 + ROUNDS/GridLightBulb.cs | 57 + ROUNDS/GridObject.cs | 26 + ROUNDS/GridVisualizer.cs | 56 + ROUNDS/Gun.cs | 698 +++++++ ROUNDS/GunAmmo.cs | 212 ++ ROUNDS/GunLevel.cs | 21 + ROUNDS/HandPos.cs | 5 + ROUNDS/HasToReturn.cs | 6 + ROUNDS/HealthBar.cs | 58 + ROUNDS/HealthHandler.cs | 362 ++++ ROUNDS/HitInfo.cs | 26 + ROUNDS/Holdable.cs | 22 + ROUNDS/Holding.cs | 75 + ROUNDS/HoldingObject.cs | 22 + ROUNDS/Homing.cs | 104 + ROUNDS/HoverEvent.cs | 38 + ROUNDS/HoverEventColor.cs | 32 + ROUNDS/HoverEvent_WobbleButton.cs | 45 + ROUNDS/HoveredTooltip.cs | 47 + ROUNDS/IKArmMove.cs | 56 + ROUNDS/IKLegMove.cs | 142 ++ ROUNDS/IkLeg.cs | 290 +++ ROUNDS/Immunities.cs | 15 + ROUNDS/Implosion.cs | 39 + ROUNDS/InitPackage.cs | 4 + ROUNDS/Irc/ChannelMessageEventArgs.cs | 19 + ROUNDS/Irc/ExceptionEventArgs.cs | 18 + ROUNDS/Irc/StringEventArgs.cs | 18 + ROUNDS/Irc/UpdateUsersEventArgs.cs | 16 + ROUNDS/Irc/UserJoinedEventArgs.cs | 16 + ROUNDS/Irc/UserLeftEventArgs.cs | 16 + ROUNDS/IsMineEvent.cs | 12 + ROUNDS/JustEvent.cs | 12 + ROUNDS/KillBox.cs | 40 + ROUNDS/Landfall.AI/Evolver.cs | 91 + ROUNDS/Landfall.AI/Genome.cs | 86 + ROUNDS/Landfall.AI/NeuralNet.cs | 115 + ROUNDS/Landfall.AI/Neuron.cs | 120 ++ ROUNDS/Landfall.AI/Population.cs | 68 + ROUNDS/Landfall.AI/WeightDataAsset.cs | 21 + ROUNDS/Landfall.Network/ClientSteamLobby.cs | 461 +++++ ROUNDS/Landfall.Network/SteamLobbyMessageType.cs | 9 + ROUNDS/LeftRight.cs | 5 + ROUNDS/LegRaycasters.cs | 77 + ROUNDS/LegRenderer.cs | 77 + ROUNDS/LegRotator.cs | 26 + ROUNDS/LerpBackToStartPos.cs | 12 + ROUNDS/LevelMapper.cs | 132 ++ ROUNDS/LevelScale.cs | 45 + ROUNDS/LifeSteal.cs | 20 + ROUNDS/LineEffect.cs | 454 ++++ ROUNDS/LineEffectExplosionModifier.cs | 44 + ROUNDS/LineEffectInstance.cs | 40 + ROUNDS/LineOfSightTrigger.cs | 59 + ROUNDS/LineRangeEffect.cs | 44 + ROUNDS/ListMenu.cs | 136 ++ ROUNDS/ListMenuButton.cs | 102 + ROUNDS/ListMenuPage.cs | 36 + ROUNDS/LoadingScreen.cs | 81 + ROUNDS/LobbyHandler.cs | 8 + ROUNDS/Looper.cs | 66 + ROUNDS/LowFrameRate.cs | 30 + ROUNDS/LowerScreenshakePerPlayer.cs | 15 + ROUNDS/MainCam.cs | 14 + ROUNDS/MainMenuHandler.cs | 25 + ROUNDS/Map.cs | 137 ++ ROUNDS/MapManager.cs | 200 ++ ROUNDS/MapObjet_Rope.cs | 274 +++ ROUNDS/MapTransition.cs | 145 ++ ROUNDS/MapWrapper.cs | 14 + ROUNDS/MenuControllerEvent.cs | 12 + ROUNDS/MenuControllerHandler.cs | 75 + ROUNDS/MenuControllerToggler.cs | 75 + ROUNDS/MenuEffects.cs | 51 + ROUNDS/MoveForward.cs | 11 + ROUNDS/MoveSequence.cs | 99 + ROUNDS/MoveTransform.cs | 78 + ROUNDS/MoveTransformGravity.cs | 23 + ROUNDS/Movement.cs | 137 ++ ROUNDS/MultiOptions.cs | 168 ++ ROUNDS/MultiOptionsButton.cs | 13 + ROUNDS/MusicGridVisualizer.cs | 13 + ROUNDS/MusicVisualizerData.cs | 18 + ROUNDS/NetworkConnectionHandler.cs | 450 ++++ ROUNDS/NetworkData.cs | 58 + ROUNDS/NetworkPhysicsObject.cs | 248 +++ ROUNDS/NetworkPlayer.cs | 4 + ROUNDS/NetworkSettings.cs | 11 + ROUNDS/NewScript.cs | 12 + ROUNDS/NextArt.cs | 9 + ROUNDS/ObjectParticle.cs | 34 + ROUNDS/ObjectPool.cs | 70 + ROUNDS/ObjectScaleToBulletStats.cs | 24 + ROUNDS/ObjectShake.cs | 29 + ROUNDS/ObjectSyncPackage.cs | 14 + ROUNDS/ObjectsToSpawn.cs | 123 ++ ROUNDS/OnlineNameSelect.cs | 21 + ROUNDS/OnlyOneEdgeModifier.cs | 57 + ROUNDS/OptionsButton.cs | 204 ++ ROUNDS/Optionshandler.cs | 187 ++ ROUNDS/Orbit.cs | 24 + ROUNDS/OutOfBoundsHandler.cs | 149 ++ ROUNDS/ParticleExplosionModifier.cs | 50 + ROUNDS/ParticlePlayer.cs | 53 + ROUNDS/ParticleTime.cs | 19 + ROUNDS/PerlinWordScale.cs | 16 + ROUNDS/Photon.Compression.Internal/IPackBoolean.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackByte.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackChar.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackDouble.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackInt16.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackInt32.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackInt64.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackList.cs | 12 + ROUNDS/Photon.Compression.Internal/IPackSByte.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackSingle.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackString.cs | 9 + .../IPackStringBuilder.cs | 11 + ROUNDS/Photon.Compression.Internal/IPackUInt16.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackUInt32.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackUInt64.cs | 9 + ROUNDS/Photon.Compression.Internal/IPackVector2.cs | 11 + .../Photon.Compression.Internal/IPackVector2Int.cs | 11 + ROUNDS/Photon.Compression.Internal/IPackVector3.cs | 11 + .../Photon.Compression.Internal/IPackVector3Int.cs | 11 + ROUNDS/Photon.Compression.Internal/PackDelegate.cs | 3 + ROUNDS/Photon.Compression.Internal/PackFrame.cs | 10 + .../PackFrame_TestPackObject.cs | 118 ++ .../PackListDelegate.cs | 5 + .../PackObjectDatabase.cs | 136 ++ .../PackSingleDelegate.cs | 3 + .../PackSupportedTypesAttribute.cs | 14 + .../Pack_TestPackObject.cs | 191 ++ .../SyncRangedAttribute.cs | 28 + .../SyncVarBaseAttribute.cs | 205 ++ .../Photon.Compression.Internal/UnpackDelegate.cs | 3 + .../UnpackListDelegate.cs | 6 + ROUNDS/Photon.Compression/CompressLevel.cs | 10 + ROUNDS/Photon.Compression/CompressedElement.cs | 547 +++++ ROUNDS/Photon.Compression/CompressedElementExt.cs | 113 + ROUNDS/Photon.Compression/CompressedMatrix.cs | 258 +++ ROUNDS/Photon.Compression/CompressedQuat.cs | 68 + ROUNDS/Photon.Compression/DefaultKeyRate.cs | 12 + ROUNDS/Photon.Compression/DefaultPackInclusion.cs | 7 + ROUNDS/Photon.Compression/Element.cs | 160 ++ ROUNDS/Photon.Compression/ElementCrusher.cs | 2188 ++++++++++++++++++++ ROUNDS/Photon.Compression/FactorBoundsOn.cs | 7 + .../Photon.Compression/FloatCrusherExtensions.cs | 171 ++ ROUNDS/Photon.Compression/IHasTransformCrusher.cs | 6 + .../Photon.Compression/IOnElementCrusherChange.cs | 6 + ROUNDS/Photon.Compression/IPackObj.cs | 5 + ROUNDS/Photon.Compression/IPackObjOnReadyChange.cs | 8 + ROUNDS/Photon.Compression/IncludeAxisExtensions.cs | 35 + ROUNDS/Photon.Compression/IncludedAxes.cs | 14 + ROUNDS/Photon.Compression/IndicatorBit.cs | 7 + ROUNDS/Photon.Compression/IndicatorBits.cs | 8 + ROUNDS/Photon.Compression/KeyRate.cs | 13 + ROUNDS/Photon.Compression/LiteCrusher.cs | 38 + ROUNDS/Photon.Compression/LiteFloatCompressType.cs | 18 + ROUNDS/Photon.Compression/LiteFloatCrusher.cs | 249 +++ ROUNDS/Photon.Compression/LiteIntCompressType.cs | 8 + ROUNDS/Photon.Compression/LiteIntCrusher.cs | 170 ++ .../Photon.Compression/LiteOutOfBoundsHandling.cs | 7 + ROUNDS/Photon.Compression/Matrix.cs | 300 +++ ROUNDS/Photon.Compression/MatrixExtensions.cs | 12 + ROUNDS/Photon.Compression/NormCompress.cs | 182 ++ .../NormalizedFloatCompression.cs | 18 + ROUNDS/Photon.Compression/PackObjectAttribute.cs | 22 + ROUNDS/Photon.Compression/PackObjectSettings.cs | 20 + ROUNDS/Photon.Compression/QuatCrusher.cs | 321 +++ ROUNDS/Photon.Compression/SerializationFlags.cs | 12 + ROUNDS/Photon.Compression/SetValueTiming.cs | 8 + ROUNDS/Photon.Compression/SyncAs.cs | 8 + .../Photon.Compression/SyncHalfFloatAttribute.cs | 67 + ROUNDS/Photon.Compression/SyncListAttribute.cs | 133 ++ .../Photon.Compression/SyncRangedIntAttribute.cs | 280 +++ ROUNDS/Photon.Compression/SyncVarAttribute.cs | 463 +++++ ROUNDS/Photon.Compression/TransformCrusher.cs | 1193 +++++++++++ ROUNDS/Photon.Compression/WorldBounds.cs | 148 ++ ROUNDS/Photon.Compression/WorldBoundsGroup.cs | 103 + .../WorldBoundsSelectAttributeAttribute.cs | 7 + ROUNDS/Photon.Compression/WorldBoundsSettings.cs | 74 + .../Photon.Compression/XYZSwitchMaskAttribute.cs | 7 + ROUNDS/Photon.Pun.Demo/OwnerGUI.cs | 24 + ROUNDS/Photon.Pun.Example/TakeOwnership.cs | 25 + .../ContactGroupAssign.cs | 16 + .../ContactGroupMaskSelector.cs | 38 + .../ContactGroupSelector.cs | 21 + .../ContactGroupSettings.cs | 65 + .../ContactGroupValues.cs | 12 + .../IContactGroupMask.cs | 6 + ROUNDS/Photon.Pun.Simple.Debugging/UIConsole.cs | 175 ++ .../Photon.Pun.Simple.GhostWorlds/IHasNetworkID.cs | 6 + .../CallbackUtilities.cs | 30 + .../Photon.Pun.Simple.Internal/NetMsgCallbacks.cs | 132 ++ ROUNDS/Photon.Pun.Simple.Internal/NetMsgSends.cs | 81 + .../NetObjColliderExt.cs | 152 ++ .../ParameterDefaults.cs | 36 + .../ParameterExtrapolation.cs | 8 + .../ParameterInterpolation.cs | 9 + .../ParameterMissingHold.cs | 7 + .../ParameterSettings.cs | 105 + ROUNDS/Photon.Pun.Simple.Internal/ReceiveGroup.cs | 8 + .../Photon.Pun.Simple.Internal/SimpleDocsURLS.cs | 22 + ROUNDS/Photon.Pun.Simple.Internal/TickManager.cs | 167 ++ ROUNDS/Photon.Pun.Simple.Pooling/Pool.cs | 133 ++ ROUNDS/Photon.Pun.Simple/AnimPassThru.cs | 29 + ROUNDS/Photon.Pun.Simple/ApplyOrderConstants.cs | 26 + ROUNDS/Photon.Pun.Simple/AutoDestroyUnspawned.cs | 26 + ROUNDS/Photon.Pun.Simple/AutoLayerByAuthority.cs | 53 + ROUNDS/Photon.Pun.Simple/AutoMountHitscan.cs | 74 + .../Photon.Pun.Simple/AutoOwnerComponentEnable.cs | 69 + ROUNDS/Photon.Pun.Simple/AutoOwnerGameObjEnable.cs | 34 + ROUNDS/Photon.Pun.Simple/AutoZoom.cs | 67 + ROUNDS/Photon.Pun.Simple/AxisMask.cs | 13 + ROUNDS/Photon.Pun.Simple/BasicInventory.cs | 40 + ROUNDS/Photon.Pun.Simple/ConnectionTickOffsets.cs | 172 ++ ROUNDS/Photon.Pun.Simple/ConsumedDespawn.cs | 8 + ROUNDS/Photon.Pun.Simple/Consumption.cs | 8 + ROUNDS/Photon.Pun.Simple/ContactEvent.cs | 24 + ROUNDS/Photon.Pun.Simple/ContactManager.cs | 32 + ROUNDS/Photon.Pun.Simple/ContactProjectile.cs | 206 ++ ROUNDS/Photon.Pun.Simple/ContactReactorBase.cs | 51 + ROUNDS/Photon.Pun.Simple/ContactTrigger.cs | 423 ++++ ROUNDS/Photon.Pun.Simple/ContactType.cs | 10 + ROUNDS/Photon.Pun.Simple/DisplayToggle.cs | 8 + ROUNDS/Photon.Pun.Simple/DoubleTime.cs | 71 + ROUNDS/Photon.Pun.Simple/EnableOnNetObjReady.cs | 39 + ROUNDS/Photon.Pun.Simple/FrameArrival.cs | 9 + ROUNDS/Photon.Pun.Simple/FrameBase.cs | 47 + ROUNDS/Photon.Pun.Simple/FrameContents.cs | 10 + ROUNDS/Photon.Pun.Simple/GenericHitscanExt.cs | 328 +++ ROUNDS/Photon.Pun.Simple/GenericSpawnPoint.cs | 99 + ROUNDS/Photon.Pun.Simple/HitscanComponent.cs | 66 + ROUNDS/Photon.Pun.Simple/HitscanDefinition.cs | 33 + ROUNDS/Photon.Pun.Simple/HitscanType.cs | 12 + ROUNDS/Photon.Pun.Simple/HitscanTypeExt.cs | 41 + ROUNDS/Photon.Pun.Simple/IAdjustableApplyOrder.cs | 5 + ROUNDS/Photon.Pun.Simple/IApplyOrder.cs | 6 + ROUNDS/Photon.Pun.Simple/IAutoKinematic.cs | 6 + ROUNDS/Photon.Pun.Simple/IConsumable.cs | 10 + ROUNDS/Photon.Pun.Simple/IContactGroupsAssign.cs | 8 + ROUNDS/Photon.Pun.Simple/IContactReactor.cs | 5 + ROUNDS/Photon.Pun.Simple/IContactSystem.cs | 24 + ROUNDS/Photon.Pun.Simple/IContactTrigger.cs | 24 + ROUNDS/Photon.Pun.Simple/IContactable.cs | 5 + .../Photon.Pun.Simple/IDeltaFrameChangeDetect.cs | 6 + ROUNDS/Photon.Pun.Simple/IFlagTeleport.cs | 6 + ROUNDS/Photon.Pun.Simple/IInventorySystem.cs | 8 + ROUNDS/Photon.Pun.Simple/IInventoryable.cs | 6 + ROUNDS/Photon.Pun.Simple/IMountable.cs | 18 + ROUNDS/Photon.Pun.Simple/IOnAuthorityChanged.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnAwake.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnCaptureState.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnChangeOwnedVitals.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnContactEvent.cs | 8 + ROUNDS/Photon.Pun.Simple/IOnCriticallyLateFrame.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnDisable.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnEnable.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnIncrementFrame.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnInterpolate.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnJoinedRoom.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnNetObjReady.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnNetSerialize.cs | 12 + ROUNDS/Photon.Pun.Simple/IOnNetworkHit.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPostCallbackLoop.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPostLateUpdate.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPostSimulate.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPostUpdate.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPreLateUpdate.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPreNetDestroy.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPreQuit.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPreSimulate.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnPreUpdate.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnQuantize.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnRootVitalBecameZero.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnSnapshot.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnStart.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnStateChange.cs | 8 + ROUNDS/Photon.Pun.Simple/IOnTerminate.cs | 6 + .../Photon.Pun.Simple/IOnTickPreSerialization.cs | 8 + ROUNDS/Photon.Pun.Simple/IOnTickSnapshot.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnVitalChange.cs | 5 + ROUNDS/Photon.Pun.Simple/IOnVitalParamChange.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnVitalValueChange.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnVitalsChange.cs | 5 + ROUNDS/Photon.Pun.Simple/IOnVitalsParamChange.cs | 6 + ROUNDS/Photon.Pun.Simple/IOnVitalsValueChange.cs | 6 + ROUNDS/Photon.Pun.Simple/IProjectile.cs | 10 + ROUNDS/Photon.Pun.Simple/IProjectileCannon.cs | 12 + ROUNDS/Photon.Pun.Simple/IReadyable.cs | 6 + ROUNDS/Photon.Pun.Simple/ISerializationOptional.cs | 6 + ROUNDS/Photon.Pun.Simple/ISpawnController.cs | 6 + ROUNDS/Photon.Pun.Simple/ISyncAnimator.cs | 5 + ROUNDS/Photon.Pun.Simple/ISyncContact.cs | 6 + ROUNDS/Photon.Pun.Simple/ISyncTransform.cs | 5 + ROUNDS/Photon.Pun.Simple/ITransformController.cs | 8 + ROUNDS/Photon.Pun.Simple/IUseKeyframes.cs | 6 + ROUNDS/Photon.Pun.Simple/IVitalsConsumable.cs | 5 + ROUNDS/Photon.Pun.Simple/IVitalsContactReactor.cs | 12 + ROUNDS/Photon.Pun.Simple/IVitalsSystem.cs | 6 + ROUNDS/Photon.Pun.Simple/Interpolation.cs | 8 + ROUNDS/Photon.Pun.Simple/Inventory.cs | 77 + .../Photon.Pun.Simple/InventoryContactReactors.cs | 44 + ROUNDS/Photon.Pun.Simple/KinematicSetting.cs | 9 + ROUNDS/Photon.Pun.Simple/LocalApplyTiming.cs | 8 + ROUNDS/Photon.Pun.Simple/MaskLogic.cs | 73 + ROUNDS/Photon.Pun.Simple/Mount.cs | 68 + ROUNDS/Photon.Pun.Simple/MountMaskSelector.cs | 29 + ROUNDS/Photon.Pun.Simple/MountSelector.cs | 24 + ROUNDS/Photon.Pun.Simple/MountSettings.cs | 55 + ROUNDS/Photon.Pun.Simple/MountSwitcher.cs | 50 + ROUNDS/Photon.Pun.Simple/MountThrow.cs | 66 + ROUNDS/Photon.Pun.Simple/MountsManager.cs | 65 + ROUNDS/Photon.Pun.Simple/NetComponent.cs | 115 + ROUNDS/Photon.Pun.Simple/NetMaster.cs | 334 +++ ROUNDS/Photon.Pun.Simple/NetMasterCallbacks.cs | 233 +++ ROUNDS/Photon.Pun.Simple/NetMasterLate.cs | 44 + ROUNDS/Photon.Pun.Simple/NetObject.cs | 917 ++++++++ ROUNDS/Photon.Pun.Simple/NetworkHit.cs | 34 + ROUNDS/Photon.Pun.Simple/NetworkHits.cs | 104 + ROUNDS/Photon.Pun.Simple/ObjState.cs | 13 + ROUNDS/Photon.Pun.Simple/ObjStateEditor.cs | 12 + ROUNDS/Photon.Pun.Simple/ObjStateLogic.cs | 19 + ROUNDS/Photon.Pun.Simple/OnStateChangeKinematic.cs | 132 ++ ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs | 94 + ROUNDS/Photon.Pun.Simple/OwnedIVitals.cs | 46 + ROUNDS/Photon.Pun.Simple/PassThruType.cs | 11 + ROUNDS/Photon.Pun.Simple/ProjectileHelpers.cs | 31 + ROUNDS/Photon.Pun.Simple/ReadyStateEnum.cs | 8 + ROUNDS/Photon.Pun.Simple/Replicate.cs | 9 + ROUNDS/Photon.Pun.Simple/Replication.cs | 7 + ROUNDS/Photon.Pun.Simple/RespondTo.cs | 9 + ROUNDS/Photon.Pun.Simple/RigidbodyType.cs | 8 + ROUNDS/Photon.Pun.Simple/SimulateHealth.cs | 47 + ROUNDS/Photon.Pun.Simple/StateChangeInfo.cs | 58 + ROUNDS/Photon.Pun.Simple/SyncAdditiveMover.cs | 57 + ROUNDS/Photon.Pun.Simple/SyncAnimator.cs | 1403 +++++++++++++ ROUNDS/Photon.Pun.Simple/SyncCannon.cs | 61 + ROUNDS/Photon.Pun.Simple/SyncContact.cs | 249 +++ ROUNDS/Photon.Pun.Simple/SyncContactScan.cs | 50 + ROUNDS/Photon.Pun.Simple/SyncMoverBase.cs | 85 + ROUNDS/Photon.Pun.Simple/SyncNodeMover.cs | 369 ++++ ROUNDS/Photon.Pun.Simple/SyncObject.cs | 377 ++++ ROUNDS/Photon.Pun.Simple/SyncOwner.cs | 149 ++ ROUNDS/Photon.Pun.Simple/SyncShootBase.cs | 151 ++ ROUNDS/Photon.Pun.Simple/SyncSpawnTimer.cs | 307 +++ ROUNDS/Photon.Pun.Simple/SyncState.cs | 643 ++++++ ROUNDS/Photon.Pun.Simple/SyncTransform.cs | 518 +++++ ROUNDS/Photon.Pun.Simple/SyncVitals.cs | 339 +++ ROUNDS/Photon.Pun.Simple/TRS.cs | 8 + ROUNDS/Photon.Pun.Simple/TRSDefinitionBase.cs | 9 + ROUNDS/Photon.Pun.Simple/TeleportMarker.cs | 61 + ROUNDS/Photon.Pun.Simple/TickEngineSettings.cs | 153 ++ ROUNDS/Photon.Pun.Simple/Vital.cs | 256 +++ ROUNDS/Photon.Pun.Simple/VitalData.cs | 34 + ROUNDS/Photon.Pun.Simple/VitalDefinition.cs | 179 ++ ROUNDS/Photon.Pun.Simple/VitalNameType.cs | 41 + ROUNDS/Photon.Pun.Simple/VitalType.cs | 13 + ROUNDS/Photon.Pun.Simple/VitalUI.cs | 160 ++ ROUNDS/Photon.Pun.Simple/VitalUIBase.cs | 134 ++ ROUNDS/Photon.Pun.Simple/Vitals.cs | 270 +++ ROUNDS/Photon.Pun.Simple/VitalsContactReactor.cs | 201 ++ ROUNDS/Photon.Pun.Simple/VitalsData.cs | 24 + ROUNDS/Photon.Pun.Simple/VitalsUISrcBase.cs | 106 + ROUNDS/Photon.Pun.UtilityScripts/CopyComponent.cs | 66 + ROUNDS/Photon.Pun/PlayerSyncPackage.cs | 22 + ROUNDS/Photon.Pun/ProjectileSyncPackage.cs | 12 + ROUNDS/Photon.Pun/SyncPlayerMovement.cs | 178 ++ ROUNDS/Photon.Pun/SyncProjectile.cs | 73 + .../Photon.Realtime.Demo/ConnectAndJoinRandomLb.cs | 133 ++ ROUNDS/Photon.Utilities/BitUtilities.cs | 28 + ROUNDS/Photon.Utilities/BitsPerRangeAttribute.cs | 28 + ROUNDS/Photon.Utilities/BoundsTools.cs | 154 ++ ROUNDS/Photon.Utilities/CatmulRom.cs | 117 ++ ROUNDS/Photon.Utilities/DisableFieldAttribute.cs | 9 + ROUNDS/Photon.Utilities/EnumMaskAttribute.cs | 18 + ROUNDS/Photon.Utilities/FastBitMask128.cs | 443 ++++ ROUNDS/Photon.Utilities/FastBitMask64.cs | 232 +++ ROUNDS/Photon.Utilities/FastBitMask64Ext.cs | 5 + ROUNDS/Photon.Utilities/FastBitMaskExt.cs | 5 + ROUNDS/Photon.Utilities/MinMaxRangeAttribute.cs | 16 + ROUNDS/Photon.Utilities/ReadOnlyAttribute.cs | 7 + .../Photon.Utilities/SettingsScriptableObject.cs | 54 + .../SettingsScriptableObjectBase.cs | 8 + ROUNDS/Photon.Utilities/SingleUnityLayer.cs | 29 + ROUNDS/Photon.Utilities/SmartVar.cs | 271 +++ ROUNDS/Photon.Utilities/SmartVarTypeCode.cs | 14 + ROUNDS/Photon.Utilities/VersaMaskAttribute.cs | 17 + ROUNDS/PhotonMapObject.cs | 98 + ROUNDS/PhysicsFunctions.cs | 16 + ROUNDS/PickerType.cs | 5 + ROUNDS/Platform.cs | 203 ++ ROUNDS/PlayLineAnimation.cs | 29 + ROUNDS/Player.cs | 153 ++ ROUNDS/PlayerAI.cs | 119 ++ ROUNDS/PlayerAIDavid.cs | 86 + ROUNDS/PlayerAIMinion.cs | 63 + ROUNDS/PlayerAIPetter.cs | 66 + ROUNDS/PlayerAIPhilip.cs | 280 +++ ROUNDS/PlayerAIWilhelm.cs | 20 + ROUNDS/PlayerAIZorro.cs | 208 ++ ROUNDS/PlayerAPI.cs | 172 ++ ROUNDS/PlayerActions.cs | 131 ++ ROUNDS/PlayerAssigner.cs | 220 ++ ROUNDS/PlayerAudioModifyers.cs | 50 + ROUNDS/PlayerChat.cs | 87 + ROUNDS/PlayerDoBlock.cs | 23 + ROUNDS/PlayerEffects.cs | 10 + ROUNDS/PlayerFace.cs | 84 + ROUNDS/PlayerFlyParticle.cs | 29 + ROUNDS/PlayerImmunity.cs | 43 + ROUNDS/PlayerInRangeSlow.cs | 26 + ROUNDS/PlayerInRangeTrigger.cs | 79 + ROUNDS/PlayerManager.cs | 415 ++++ ROUNDS/PlayerName.cs | 11 + ROUNDS/PlayerSkin.cs | 12 + ROUNDS/PlayerSkinBank.cs | 38 + ROUNDS/PlayerSkinHandler.cs | 63 + ROUNDS/PlayerSkinParticle.cs | 54 + ROUNDS/PlayerSounds.cs | 126 ++ ROUNDS/PlayerSpawnVisualEffect.cs | 12 + ROUNDS/PlayerWobblePosition.cs | 38 + ROUNDS/Point.cs | 12 + ROUNDS/PointVisualizer.cs | 292 +++ ROUNDS/PopUpHandler.cs | 97 + ROUNDS/Populate.cs | 71 + ROUNDS/PositionNoise.cs | 24 + ROUNDS/PowerUps.cs | 66 + ROUNDS/ProjectileCollision.cs | 86 + ROUNDS/ProjectileHit.cs | 393 ++++ ROUNDS/ProjectileHitEmpower.cs | 17 + ROUNDS/ProjectileHitSurface.cs | 12 + ROUNDS/ProjectileHitSurfaceShield.cs | 13 + ROUNDS/ProjectileInit.cs | 49 + ROUNDS/ProjectilesToSpawn.cs | 10 + ROUNDS/Properties/AssemblyInfo.cs | 5 + ROUNDS/PublicInt.cs | 6 + ROUNDS/QuitButton.cs | 9 + ROUNDS/ROUNDS.csproj | 314 +++ ROUNDS/ROUNDS.sln | 25 + ROUNDS/RadarShot.cs | 61 + ROUNDS/Rage.cs | 29 + ROUNDS/RayCastTrail.cs | 106 + ROUNDS/RayHit.cs | 6 + ROUNDS/RayHitBash.cs | 80 + ROUNDS/RayHitBulletSound.cs | 60 + ROUNDS/RayHitDrill.cs | 124 ++ ROUNDS/RayHitEffect.cs | 8 + ROUNDS/RayHitPoison.cs | 36 + ROUNDS/RayHitReflect.cs | 61 + ROUNDS/RaycastForward.cs | 15 + ROUNDS/RaycastSetScale.cs | 23 + ROUNDS/ReflectEvent.cs | 12 + ROUNDS/RegenerateAfterStandStill.cs | 24 + ROUNDS/RegionSelector.cs | 23 + ROUNDS/ReloadTigger.cs | 40 + ROUNDS/RemoteControl.cs | 128 ++ ROUNDS/RemoveAfterSeconds.cs | 54 + ROUNDS/RemoveAfterSecondsScale.cs | 9 + ROUNDS/RescaleFromDamage.cs | 25 + ROUNDS/RescaleFromDamagePart.cs | 28 + ROUNDS/ResetBlock.cs | 16 + ROUNDS/RespawnEvent.cs | 19 + ROUNDS/RigLookUp.cs | 18 + ROUNDS/RightLeftMirrorSpring.cs | 46 + ROUNDS/RingHandler.cs | 52 + ROUNDS/RotSpring.cs | 43 + ROUNDS/Rotate.cs | 11 + ROUNDS/RotatingShooter.cs | 69 + ROUNDS/RotationHandler.cs | 21 + ROUNDS/RoundCounter.cs | 124 ++ ROUNDS/RoundModifier.cs | 12 + ROUNDS/Rounds/FakeParticle.cs | 63 + ROUNDS/RunSmoke.cs | 62 + ROUNDS/SFLight.cs | 350 ++++ ROUNDS/SFPolygon.cs | 338 +++ ROUNDS/SFRenderer.cs | 621 ++++++ ROUNDS/SFSample.cs | 73 + ROUNDS/Saw.cs | 83 + ROUNDS/ScaleEvent.cs | 21 + ROUNDS/ScaleEventInstace.cs | 10 + ROUNDS/ScaleShake.cs | 76 + ROUNDS/ScaleTrailFromDamage.cs | 61 + ROUNDS/ScaleWithHp.cs | 18 + ROUNDS/ScreenEdgeBounce.cs | 132 ++ ROUNDS/Screenshaker.cs | 53 + ROUNDS/ServerMessage.cs | 1 + ROUNDS/SetActive.cs | 9 + ROUNDS/SetColorByBlockCD.cs | 36 + ROUNDS/SetEmissionOverTimeByVelocity.cs | 22 + ROUNDS/SetLocalScale.cs | 11 + ROUNDS/SetOfflineMode.cs | 30 + ROUNDS/SetParticleTimeAfterSecondsToRemove.cs | 13 + ROUNDS/SetPlayerSpriteLayer.cs | 44 + ROUNDS/SetRotation.cs | 38 + ROUNDS/SetScaleFromSizeAndExtraSize.cs | 12 + ROUNDS/SetScaleToZero.cs | 9 + ROUNDS/SetSpawnedParticleColor.cs | 30 + ROUNDS/SetSpecificArt.cs | 38 + ROUNDS/SetSpriteColor.cs | 18 + ROUNDS/SetTeamColor.cs | 84 + ROUNDS/SetTeamColorFromParentPlayer.cs | 14 + ROUNDS/SetTeamColorFromSpawnedAttack.cs | 9 + ROUNDS/SetTeamColorSpecific.cs | 27 + ROUNDS/SetTextColor.cs | 12 + ROUNDS/ShieldCharge.cs | 168 ++ ROUNDS/ShootPos.cs | 12 + ROUNDS/SilenceHandler.cs | 70 + ROUNDS/SimulatedSelection.cs | 33 + ROUNDS/SkipIntro.cs | 38 + ROUNDS/SliceEffect.cs | 5 + ROUNDS/SoundAudioListenerPosition.cs | 38 + ROUNDS/SoundImplementation/SoundAnimationPlay.cs | 17 + .../SoundEnvironmentRigidbody.cs | 33 + ROUNDS/SoundImplementation/SoundGun.cs | 435 ++++ ROUNDS/SoundImplementation/SoundHierarchyDepth.cs | 9 + ROUNDS/SoundImplementation/SoundHierarchyPlay.cs | 105 + ROUNDS/SoundImplementation/SoundHierarchySpawn.cs | 37 + ROUNDS/SoundImplementation/SoundImpactModifier.cs | 18 + ROUNDS/SoundImplementation/SoundMusicManager.cs | 145 ++ ROUNDS/SoundImplementation/SoundOnePerPlayer.cs | 44 + ROUNDS/SoundImplementation/SoundPlayerStatic.cs | 104 + ROUNDS/SoundImplementation/SoundPolyGrouping.cs | 7 + ROUNDS/SoundImplementation/SoundShotModifier.cs | 26 + .../SoundStaticRemoteControl.cs | 6 + .../SoundImplementation/SoundUnityEventPlayer.cs | 107 + ROUNDS/SoundImplementation/SoundVolumeManager.cs | 71 + ROUNDS/SpawnBulletHit.cs | 12 + ROUNDS/SpawnMinion.cs | 36 + ROUNDS/SpawnObjectEffect.cs | 101 + ROUNDS/SpawnObjectOnDealDamage.cs | 50 + ROUNDS/SpawnObjectOnDealtDamage.cs | 35 + ROUNDS/SpawnObjects.cs | 83 + ROUNDS/SpawnPoint.cs | 15 + ROUNDS/SpawnStaticRemnant.cs | 52 + ROUNDS/SpawnedAttack.cs | 63 + ROUNDS/SpawnedAttack_ParentPlayer.cs | 9 + ROUNDS/Spring.cs | 24 + ROUNDS/StandStillTrigger.cs | 25 + ROUNDS/StartEvent.cs | 12 + ROUNDS/StatsAfterDealingDamage.cs | 68 + ROUNDS/StatsWhenFullHP.cs | 58 + ROUNDS/SteamManager.cs | 99 + ROUNDS/StopRecursion.cs | 5 + ROUNDS/StunHandler.cs | 102 + ROUNDS/StunPlayer.cs | 29 + ROUNDS/SuperBasicController.cs | 327 +++ ROUNDS/SwordArtMove.cs | 61 + ROUNDS/TasteOfBlood.cs | 66 + ROUNDS/Teleport.cs | 76 + ROUNDS/TeleportToOpponent.cs | 27 + ROUNDS/TextFlicker.cs | 35 + ROUNDS/ThereCanOnlyBeOne.cs | 30 + ROUNDS/Thruster.cs | 85 + ROUNDS/TickMover.cs | 41 + ROUNDS/TimeHandler.cs | 96 + ROUNDS/ToggleStats.cs | 31 + ROUNDS/ToggleUnparented.cs | 29 + ROUNDS/TracerRound.cs | 48 + ROUNDS/TracerTarget.cs | 65 + ROUNDS/TrickShot.cs | 87 + ROUNDS/TwitchAudienceVisualizer.cs | 147 ++ ROUNDS/TwitchChatMessage.cs | 11 + ROUNDS/TwitchIrc.cs | 217 ++ ROUNDS/TwitchIrcExample.cs | 88 + ROUNDS/TwitchUIHandler.cs | 154 ++ ROUNDS/UIHandler.cs | 177 ++ ROUNDS/UniformModifier.cs | 28 + .../UnityEngine.UI.ProceduralImage/ModifierID.cs | 16 + .../ProceduralImage.cs | 221 ++ .../ProceduralImageInfo.cs | 26 + .../ProceduralImageModifier.cs | 21 + ROUNDS/Unparent.cs | 44 + ROUNDS/UnparentObject.cs | 9 + ROUNDS/UnparentOnHit.cs | 38 + ROUNDS/UserJoined.cs | 3 + ROUNDS/UserLeft.cs | 3 + ROUNDS/VelocityStretch.cs | 18 + ROUNDS/WallRayCaster.cs | 34 + ROUNDS/WasDealtDamageEffect.cs | 6 + ROUNDS/WasDealtDamageTrigger.cs | 35 + ROUNDS/Weapon.cs | 20 + ROUNDS/WeaponHandler.cs | 173 ++ ROUNDS/ZapEffect.cs | 20 + ROUNDS/Zip.cs | 27 + ROUNDS/Zop.cs | 52 + ROUNDS/_Player/CharacterData.cs | 291 +++ ROUNDS/_Player/PlayerCollision.cs | 152 ++ ROUNDS/_Player/PlayerDoJump.cs | 18 + ROUNDS/_Player/PlayerFollowGround.cs | 30 + ROUNDS/_Player/PlayerJump.cs | 85 + ROUNDS/_Player/PlayerMovement.cs | 71 + ROUNDS/_Player/PlayerVelocity.cs | 82 + ROUNDS/bin/Debug/netstandard2.1/AmplifyColor.dll | Bin 0 -> 3584 bytes .../netstandard2.1/Assembly-CSharp-firstpass.dll | Bin 0 -> 776192 bytes .../Debug/netstandard2.1/Assembly-CSharp.deps.json | 1426 +++++++++++++ .../bin/Debug/netstandard2.1/Assembly-CSharp.dll | Bin 0 -> 908288 bytes .../bin/Debug/netstandard2.1/Assembly-CSharp.pdb | Bin 0 -> 485500 bytes .../bin/Debug/netstandard2.1/BitpackersASMDEF.dll | Bin 0 -> 35328 bytes ROUNDS/bin/Debug/netstandard2.1/ByteConverter.dll | Bin 0 -> 6144 bytes .../netstandard2.1/EmoCompressUtilsASMDEF.dll | Bin 0 -> 6144 bytes ROUNDS/bin/Debug/netstandard2.1/FloatCrusher.dll | Bin 0 -> 19968 bytes ROUNDS/bin/Debug/netstandard2.1/HalFloat.dll | Bin 0 -> 9728 bytes .../bin/Debug/netstandard2.1/HalfFloatASMDEF.dll | Bin 0 -> 9728 bytes ROUNDS/bin/Debug/netstandard2.1/InControl.dll | Bin 0 -> 495104 bytes ROUNDS/bin/Debug/netstandard2.1/Mono.Security.dll | Bin 0 -> 310272 bytes ROUNDS/bin/Debug/netstandard2.1/Photon3Unity3D.dll | Bin 0 -> 228352 bytes ROUNDS/bin/Debug/netstandard2.1/PhotonChat.dll | Bin 0 -> 33280 bytes ROUNDS/bin/Debug/netstandard2.1/PhotonRealtime.dll | Bin 0 -> 95744 bytes .../netstandard2.1/PhotonUnityNetworking.Demos.dll | Bin 0 -> 121856 bytes .../PhotonUnityNetworking.Utilities.dll | Bin 0 -> 55808 bytes .../Debug/netstandard2.1/PhotonUnityNetworking.dll | Bin 0 -> 107008 bytes .../bin/Debug/netstandard2.1/PhotonWebSocket.dll | Bin 0 -> 3584 bytes ROUNDS/bin/Debug/netstandard2.1/QuatCompress.dll | Bin 0 -> 7680 bytes .../Sirenix.OdinInspector.Attributes.dll | Bin 0 -> 32256 bytes .../Sirenix.OdinInspector.CompatibilityLayer.dll | Bin 0 -> 6144 bytes .../Sirenix.Serialization.Config.dll | Bin 0 -> 19968 bytes .../Debug/netstandard2.1/Sirenix.Serialization.dll | Bin 0 -> 311296 bytes .../bin/Debug/netstandard2.1/Sirenix.Utilities.dll | Bin 0 -> 144384 bytes .../netstandard2.1/SonigonAudioEngine.Runtime.dll | Bin 0 -> 95744 bytes .../Debug/netstandard2.1/System.Configuration.dll | Bin 0 -> 43008 bytes .../System.Diagnostics.StackTrace.dll | Bin 0 -> 6656 bytes .../netstandard2.1/System.EnterpriseServices.dll | Bin 0 -> 33280 bytes .../System.Globalization.Extensions.dll | Bin 0 -> 6144 bytes .../System.ServiceModel.Internals.dll | Bin 0 -> 218112 bytes .../netstandard2.1/System.Xml.XPath.XDocument.dll | Bin 0 -> 5120 bytes .../netstandard2.1/Unity.Analytics.DataPrivacy.dll | Bin 0 -> 7680 bytes .../Unity.Analytics.StandardEvents.dll | Bin 0 -> 32256 bytes .../Unity.Postprocessing.Runtime.dll | Bin 0 -> 144384 bytes .../bin/Debug/netstandard2.1/Unity.TextMeshPro.dll | Bin 0 -> 331776 bytes .../Debug/netstandard2.1/UnityEngine.AIModule.dll | Bin 0 -> 42496 bytes .../Debug/netstandard2.1/UnityEngine.ARModule.dll | Bin 0 -> 12288 bytes .../UnityEngine.AccessibilityModule.dll | Bin 0 -> 11776 bytes .../netstandard2.1/UnityEngine.AnimationModule.dll | Bin 0 -> 137216 bytes .../UnityEngine.AssetBundleModule.dll | Bin 0 -> 20992 bytes .../netstandard2.1/UnityEngine.AudioModule.dll | Bin 0 -> 58368 bytes .../netstandard2.1/UnityEngine.BaselibModule.dll | Bin 0 -> 8192 bytes .../netstandard2.1/UnityEngine.ClothModule.dll | Bin 0 -> 14336 bytes .../UnityEngine.ClusterInputModule.dll | Bin 0 -> 9728 bytes .../UnityEngine.ClusterRendererModule.dll | Bin 0 -> 8704 bytes .../netstandard2.1/UnityEngine.CoreModule.dll | Bin 0 -> 851456 bytes .../UnityEngine.CrashReportingModule.dll | Bin 0 -> 9216 bytes .../netstandard2.1/UnityEngine.DirectorModule.dll | Bin 0 -> 12800 bytes .../UnityEngine.FileSystemHttpModule.dll | Bin 0 -> 8192 bytes .../UnityEngine.GameCenterModule.dll | Bin 0 -> 26112 bytes .../netstandard2.1/UnityEngine.GridModule.dll | Bin 0 -> 13312 bytes .../netstandard2.1/UnityEngine.HotReloadModule.dll | Bin 0 -> 8192 bytes .../netstandard2.1/UnityEngine.IMGUIModule.dll | Bin 0 -> 146944 bytes .../UnityEngine.ImageConversionModule.dll | Bin 0 -> 9728 bytes .../netstandard2.1/UnityEngine.InputModule.dll | Bin 0 -> 11264 bytes .../UnityEngine.JSONSerializeModule.dll | Bin 0 -> 10240 bytes .../UnityEngine.LocalizationModule.dll | Bin 0 -> 9216 bytes .../netstandard2.1/UnityEngine.Networking.dll | Bin 0 -> 261120 bytes .../UnityEngine.ParticleSystemModule.dll | Bin 0 -> 128512 bytes .../UnityEngine.PerformanceReportingModule.dll | Bin 0 -> 8704 bytes .../netstandard2.1/UnityEngine.Physics2DModule.dll | Bin 0 -> 93184 bytes .../netstandard2.1/UnityEngine.PhysicsModule.dll | Bin 0 -> 84992 bytes .../netstandard2.1/UnityEngine.ProfilerModule.dll | Bin 0 -> 8192 bytes .../netstandard2.1/UnityEngine.Purchasing.dll | Bin 0 -> 27648 bytes .../UnityEngine.ScreenCaptureModule.dll | Bin 0 -> 9216 bytes .../UnityEngine.SharedInternalsModule.dll | Bin 0 -> 19456 bytes .../netstandard2.1/UnityEngine.SpatialTracking.dll | Bin 0 -> 11264 bytes .../UnityEngine.SpriteMaskModule.dll | Bin 0 -> 9728 bytes .../UnityEngine.SpriteShapeModule.dll | Bin 0 -> 9728 bytes .../netstandard2.1/UnityEngine.StreamingModule.dll | Bin 0 -> 8704 bytes .../UnityEngine.StyleSheetsModule.dll | Bin 0 -> 16384 bytes .../netstandard2.1/UnityEngine.SubstanceModule.dll | Bin 0 -> 12800 bytes .../Debug/netstandard2.1/UnityEngine.TLSModule.dll | Bin 0 -> 8192 bytes .../netstandard2.1/UnityEngine.TerrainModule.dll | Bin 0 -> 62976 bytes .../UnityEngine.TerrainPhysicsModule.dll | Bin 0 -> 8704 bytes .../netstandard2.1/UnityEngine.TextCoreModule.dll | Bin 0 -> 37376 bytes .../UnityEngine.TextRenderingModule.dll | Bin 0 -> 26624 bytes .../netstandard2.1/UnityEngine.TilemapModule.dll | Bin 0 -> 24064 bytes .../Debug/netstandard2.1/UnityEngine.Timeline.dll | Bin 0 -> 98816 bytes .../netstandard2.1/UnityEngine.TimelineModule.dll | Bin 0 -> 8192 bytes ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UI.dll | Bin 0 -> 253952 bytes .../UnityEngine.UIElementsModule.dll | Bin 0 -> 351744 bytes .../Debug/netstandard2.1/UnityEngine.UIModule.dll | Bin 0 -> 22016 bytes .../netstandard2.1/UnityEngine.UNETModule.dll | Bin 0 -> 77824 bytes .../netstandard2.1/UnityEngine.UmbraModule.dll | Bin 0 -> 8192 bytes .../UnityEngine.UnityAnalyticsModule.dll | Bin 0 -> 24064 bytes .../UnityEngine.UnityConnectModule.dll | Bin 0 -> 10240 bytes .../UnityEngine.UnityTestProtocolModule.dll | Bin 0 -> 8192 bytes ...nityEngine.UnityWebRequestAssetBundleModule.dll | Bin 0 -> 11264 bytes .../UnityEngine.UnityWebRequestAudioModule.dll | Bin 0 -> 10752 bytes .../UnityEngine.UnityWebRequestModule.dll | Bin 0 -> 41984 bytes .../UnityEngine.UnityWebRequestTextureModule.dll | Bin 0 -> 10240 bytes .../UnityEngine.UnityWebRequestWWWModule.dll | Bin 0 -> 19968 bytes .../Debug/netstandard2.1/UnityEngine.VFXModule.dll | Bin 0 -> 27136 bytes .../Debug/netstandard2.1/UnityEngine.VRModule.dll | Bin 0 -> 30720 bytes .../netstandard2.1/UnityEngine.VehiclesModule.dll | Bin 0 -> 11776 bytes .../netstandard2.1/UnityEngine.VideoModule.dll | Bin 0 -> 26624 bytes .../netstandard2.1/UnityEngine.WindModule.dll | Bin 0 -> 9216 bytes .../Debug/netstandard2.1/UnityEngine.XRModule.dll | Bin 0 -> 44544 bytes ROUNDS/bin/Debug/netstandard2.1/UnityEngine.dll | Bin 0 -> 72704 bytes .../bin/Debug/netstandard2.1/websocket-sharp.dll | Bin 0 -> 250368 bytes .../emotitron.Utilities.Example/BasicController.cs | 289 +++ .../ShowIfInterfaceAttribute.cs | 29 + .../ValueTypeAttribute.cs | 18 + .../AutoDestroyWrongNetLib.cs | 25 + ROUNDS/emotitron.Utilities/MarkerNameType.cs | 38 + ROUNDS/emotitron.Utilities/MarkerType.cs | 10 + ROUNDS/emotitron.Utilities/NameTypeUtils.cs | 16 + ROUNDS/emotitron/TestEnum.cs | 9 + ROUNDS/emotitron/TestPackObject.cs | 50 + ....NETStandard,Version=v2.0.AssemblyAttributes.cs | 4 + ...OUNDS.GeneratedMSBuildEditorConfig.editorconfig | 3 + .../obj/Debug/netstandard2.0/ROUNDS.assets.cache | Bin 0 -> 505 bytes .../ROUNDS.csproj.AssemblyReference.cache | Bin 0 -> 143178 bytes .../ROUNDS.csproj.CoreCompileInputs.cache | 1 + .../ROUNDS.csproj.FileListAbsolute.txt | 3 + ....NETStandard,Version=v2.1.AssemblyAttributes.cs | 4 + .../obj/Debug/netstandard2.1/Assembly-CSharp.dll | Bin 0 -> 908288 bytes .../obj/Debug/netstandard2.1/Assembly-CSharp.pdb | Bin 0 -> 485500 bytes ...OUNDS.GeneratedMSBuildEditorConfig.editorconfig | 3 + .../obj/Debug/netstandard2.1/ROUNDS.assets.cache | Bin 0 -> 236 bytes .../ROUNDS.csproj.AssemblyReference.cache | Bin 0 -> 145139 bytes .../netstandard2.1/ROUNDS.csproj.CopyComplete | 0 .../ROUNDS.csproj.CoreCompileInputs.cache | 1 + .../ROUNDS.csproj.FileListAbsolute.txt | 109 + ROUNDS/obj/ROUNDS.csproj.nuget.dgspec.json | 67 + ROUNDS/obj/ROUNDS.csproj.nuget.g.props | 16 + ROUNDS/obj/ROUNDS.csproj.nuget.g.targets | 2 + ROUNDS/obj/project.assets.json | 73 + ROUNDS/obj/project.nuget.cache | 8 + 1395 files changed, 92452 insertions(+) create mode 100644 "Doc/ROUNDS\345\210\206\346\236\220.xlsx" create mode 100644 GameCode/AbyssalCountdown.cs create mode 100644 GameCode/Accelerate.cs create mode 100644 GameCode/ActivateSciptWhenCanSeeOtherPlayer.cs create mode 100644 GameCode/AddShake.cs create mode 100644 GameCode/Aim.cs create mode 100644 GameCode/AimForPlayer.cs create mode 100644 GameCode/AmplifyColorBase.cs create mode 100644 GameCode/AmplifyColorEffect.cs create mode 100644 GameCode/AmplifyColorRenderMask.cs create mode 100644 GameCode/AmplifyColorRenderMaskBase.cs create mode 100644 GameCode/AmplifyColorTriggerProxy.cs create mode 100644 GameCode/AmplifyColorTriggerProxy2D.cs create mode 100644 GameCode/AmplifyColorTriggerProxyBase.cs create mode 100644 GameCode/AmplifyColorVolume.cs create mode 100644 GameCode/AmplifyColorVolume2D.cs create mode 100644 GameCode/AmplifyColorVolumeBase.cs create mode 100644 GameCode/ApplyCardStats.cs create mode 100644 GameCode/ApplyRootScale.cs create mode 100644 GameCode/ArmRotator.cs create mode 100644 GameCode/ArtHandler.cs create mode 100644 GameCode/ArtInstance.cs create mode 100644 GameCode/AttackLevel.cs create mode 100644 GameCode/AttackTrigger.cs create mode 100644 GameCode/AudioModifyer.cs create mode 100644 GameCode/Background.cs create mode 100644 GameCode/BackgroundHandler.cs create mode 100644 GameCode/BeamAttack.cs create mode 100644 GameCode/BezierCurve.cs create mode 100644 GameCode/BlinkStep.cs create mode 100644 GameCode/Block.cs create mode 100644 GameCode/BlockEffect.cs create mode 100644 GameCode/BlockEffectCounter.cs create mode 100644 GameCode/BlockRechargeUI.cs create mode 100644 GameCode/BlockTrigger.cs create mode 100644 GameCode/BlurPost.cs create mode 100644 GameCode/BounceEffect.cs create mode 100644 GameCode/BounceEffectRetarget.cs create mode 100644 GameCode/BounceTrigger.cs create mode 100644 GameCode/BrodalAIController.cs create mode 100644 GameCode/BuildOnly.cs create mode 100644 GameCode/BulletBase.cs create mode 100644 GameCode/BulletDamageEvents.cs create mode 100644 GameCode/BulletPoint.cs create mode 100644 GameCode/BulletSurf.cs create mode 100644 GameCode/BulletWrapper.cs create mode 100644 GameCode/CameraZoomHandler.cs create mode 100644 GameCode/CanSeeInfo.cs create mode 100644 GameCode/CapScale.cs create mode 100644 GameCode/CappedDeltaTime.cs create mode 100644 GameCode/CardAnimation.cs create mode 100644 GameCode/CardAudioModifier.cs create mode 100644 GameCode/CardBar.cs create mode 100644 GameCode/CardBarButton.cs create mode 100644 GameCode/CardBarHandler.cs create mode 100644 GameCode/CardCategories.cs create mode 100644 GameCode/CardCategory.cs create mode 100644 GameCode/CardChoice.cs create mode 100644 GameCode/CardChoiceVisuals.cs create mode 100644 GameCode/CardInfo.cs create mode 100644 GameCode/CardInfoDisplayer.cs create mode 100644 GameCode/CardInfoStat.cs create mode 100644 GameCode/CardRarityColor.cs create mode 100644 GameCode/CardThemeColor.cs create mode 100644 GameCode/CardVisuals.cs create mode 100644 GameCode/ChangeColor.cs create mode 100644 GameCode/ChangeDamageMultiplierAfterDistanceTravelled.cs create mode 100644 GameCode/ChannelMessage.cs create mode 100644 GameCode/CharacterCreator.cs create mode 100644 GameCode/CharacterCreatorButtonSpawner.cs create mode 100644 GameCode/CharacterCreatorDragging.cs create mode 100644 GameCode/CharacterCreatorHandler.cs create mode 100644 GameCode/CharacterCreatorItemEquipper.cs create mode 100644 GameCode/CharacterCreatorItemLoader.cs create mode 100644 GameCode/CharacterCreatorNavigation.cs create mode 100644 GameCode/CharacterCreatorPortrait.cs create mode 100644 GameCode/CharacterData.cs create mode 100644 GameCode/CharacterItem.cs create mode 100644 GameCode/CharacterItemButton.cs create mode 100644 GameCode/CharacterItemMirror.cs create mode 100644 GameCode/CharacterItemType.cs create mode 100644 GameCode/CharacterSelectionInstance.cs create mode 100644 GameCode/CharacterSelectionMenu.cs create mode 100644 GameCode/CharacterStatModifiers.cs create mode 100644 GameCode/ChargeFeedback.cs create mode 100644 GameCode/Chase.cs create mode 100644 GameCode/ChatFilter.cs create mode 100644 GameCode/ChatFilterInstance.cs create mode 100644 GameCode/ChildRPC.cs create mode 100644 GameCode/ChillingTouch.cs create mode 100644 GameCode/ChomaticAberrationFeeler.cs create mode 100644 GameCode/Cluster.cs create mode 100644 GameCode/CodeAnimation.cs create mode 100644 GameCode/CodeAnimationInstance.cs create mode 100644 GameCode/CollisionChecker.cs create mode 100644 GameCode/ColorBlink.cs create mode 100644 GameCode/ColorHandler.cs create mode 100644 GameCode/Comment.cs create mode 100644 GameCode/Connected.cs create mode 100644 GameCode/ControllerImageToggler.cs create mode 100644 GameCode/CooldownCondition.cs create mode 100644 GameCode/CooldownWindUp.cs create mode 100644 GameCode/CopyChildren.cs create mode 100644 GameCode/CopyObject.cs create mode 100644 GameCode/CopyOwnerGunStats.cs create mode 100644 GameCode/CopyPlayerAim.cs create mode 100644 GameCode/Cos.cs create mode 100644 GameCode/CounterUI.cs create mode 100644 GameCode/CrownPos.cs create mode 100644 GameCode/CurveAnimation.cs create mode 100644 GameCode/CurveAnimationInstance.cs create mode 100644 GameCode/CurveAnimationType.cs create mode 100644 GameCode/CurveAnimationUse.cs create mode 100644 GameCode/Damagable.cs create mode 100644 GameCode/DamagableEvent.cs create mode 100644 GameCode/DamageBox.cs create mode 100644 GameCode/DamageEffect.cs create mode 100644 GameCode/DamageOverTime.cs create mode 100644 GameCode/DealDamageToPlayer.cs create mode 100644 GameCode/DealtDamageEffect.cs create mode 100644 GameCode/DealtDamageTrigger.cs create mode 100644 GameCode/DeathEffect.cs create mode 100644 GameCode/Debug.cs create mode 100644 GameCode/DelayEvent.cs create mode 100644 GameCode/DelayedEvent.cs create mode 100644 GameCode/DestroyEvent.cs create mode 100644 GameCode/DestroyObjects.cs create mode 100644 GameCode/DestroyOnAwake.cs create mode 100644 GameCode/Destructible.cs create mode 100644 GameCode/DestructibleBoxDestruction.cs create mode 100644 GameCode/DevConsole.cs create mode 100644 GameCode/DisableChildren.cs create mode 100644 GameCode/DisableEvent.cs create mode 100644 GameCode/DisableIfSimple.cs create mode 100644 GameCode/DisableObjects.cs create mode 100644 GameCode/DisplayMatchPlayerNames.cs create mode 100644 GameCode/DmgEvent.cs create mode 100644 GameCode/DoPlayerReload.cs create mode 100644 GameCode/DodgeGround.cs create mode 100644 GameCode/DontChangeMe.cs create mode 100644 GameCode/DuringReloadTrigger.cs create mode 100644 GameCode/DynamicParticleSet.cs create mode 100644 GameCode/DynamicParticles.cs create mode 100644 GameCode/Emoji.cs create mode 100644 GameCode/EmojiButton.cs create mode 100644 GameCode/EmojiCombiner.cs create mode 100644 GameCode/Empower.cs create mode 100644 GameCode/EmpowerStopBlockObjectFollow.cs create mode 100644 GameCode/EmptySprite.cs create mode 100644 GameCode/EnableEvent.cs create mode 100644 GameCode/EnableObjectPerLevel.cs create mode 100644 GameCode/EnsnareEffect.cs create mode 100644 GameCode/ErrorHandler.cs create mode 100644 GameCode/EscapeMenuHandler.cs create mode 100644 GameCode/EventSequence.cs create mode 100644 GameCode/ExceptionThrown.cs create mode 100644 GameCode/Explosion.cs create mode 100644 GameCode/Explosion_Overpower.cs create mode 100644 GameCode/Extensions.cs create mode 100644 GameCode/ExtraBlock.cs create mode 100644 GameCode/FRILerp.cs create mode 100644 GameCode/FakeParticleDB.cs create mode 100644 GameCode/FlickerEvent.cs create mode 100644 GameCode/FollowInactiveHand.cs create mode 100644 GameCode/FollowLocalPos.cs create mode 100644 GameCode/FollowPlayer.cs create mode 100644 GameCode/FollowRandomPlayer.cs create mode 100644 GameCode/FollowScale.cs create mode 100644 GameCode/FollowTransform.cs create mode 100644 GameCode/ForceMultiplier.cs create mode 100644 GameCode/FreeModifier.cs create mode 100644 GameCode/GM_ArmsRace.cs create mode 100644 GameCode/GM_Test.cs create mode 100644 GameCode/GameAnalytics.cs create mode 100644 GameCode/GameCrownHandler.cs create mode 100644 GameCode/GameFeeler.cs create mode 100644 GameCode/GameManager.cs create mode 100644 GameCode/GamefeelManager.cs create mode 100644 GameCode/GeneralInput.cs create mode 100644 GameCode/GeneralParticleSystem.cs create mode 100644 GameCode/GeneralShooter.cs create mode 100644 GameCode/GetColor.cs create mode 100644 GameCode/GetControllerButton.cs create mode 100644 GameCode/GifCam.cs create mode 100644 GameCode/GoBack.cs create mode 100644 GameCode/Grass.cs create mode 100644 GameCode/Gravity.cs create mode 100644 GameCode/GridBounceCircle.cs create mode 100644 GameCode/GridLightBulb.cs create mode 100644 GameCode/GridObject.cs create mode 100644 GameCode/GridVisualizer.cs create mode 100644 GameCode/Gun.cs create mode 100644 GameCode/GunAmmo.cs create mode 100644 GameCode/GunLevel.cs create mode 100644 GameCode/HandPos.cs create mode 100644 GameCode/HasToReturn.cs create mode 100644 GameCode/HealthBar.cs create mode 100644 GameCode/HealthHandler.cs create mode 100644 GameCode/HitInfo.cs create mode 100644 GameCode/Holdable.cs create mode 100644 GameCode/Holding.cs create mode 100644 GameCode/HoldingObject.cs create mode 100644 GameCode/Homing.cs create mode 100644 GameCode/HoverEvent.cs create mode 100644 GameCode/HoverEventColor.cs create mode 100644 GameCode/HoverEvent_WobbleButton.cs create mode 100644 GameCode/HoveredTooltip.cs create mode 100644 GameCode/IKArmMove.cs create mode 100644 GameCode/IKLegMove.cs create mode 100644 GameCode/IkLeg.cs create mode 100644 GameCode/Immunities.cs create mode 100644 GameCode/Implosion.cs create mode 100644 GameCode/InitPackage.cs create mode 100644 GameCode/IsMineEvent.cs create mode 100644 GameCode/JustEvent.cs create mode 100644 GameCode/KillBox.cs create mode 100644 GameCode/LeftRight.cs create mode 100644 GameCode/LegRaycasters.cs create mode 100644 GameCode/LegRenderer.cs create mode 100644 GameCode/LegRotator.cs create mode 100644 GameCode/LerpBackToStartPos.cs create mode 100644 GameCode/LevelMapper.cs create mode 100644 GameCode/LevelScale.cs create mode 100644 GameCode/LifeSteal.cs create mode 100644 GameCode/LineEffect.cs create mode 100644 GameCode/LineEffectExplosionModifier.cs create mode 100644 GameCode/LineEffectInstance.cs create mode 100644 GameCode/LineOfSightTrigger.cs create mode 100644 GameCode/LineRangeEffect.cs create mode 100644 GameCode/ListMenu.cs create mode 100644 GameCode/ListMenuButton.cs create mode 100644 GameCode/ListMenuPage.cs create mode 100644 GameCode/LoadingScreen.cs create mode 100644 GameCode/LobbyHandler.cs create mode 100644 GameCode/Looper.cs create mode 100644 GameCode/LowFrameRate.cs create mode 100644 GameCode/LowerScreenshakePerPlayer.cs create mode 100644 GameCode/MainCam.cs create mode 100644 GameCode/MainMenuHandler.cs create mode 100644 GameCode/Map.cs create mode 100644 GameCode/MapManager.cs create mode 100644 GameCode/MapObjet_Rope.cs create mode 100644 GameCode/MapTransition.cs create mode 100644 GameCode/MapWrapper.cs create mode 100644 GameCode/MenuControllerEvent.cs create mode 100644 GameCode/MenuControllerHandler.cs create mode 100644 GameCode/MenuControllerToggler.cs create mode 100644 GameCode/MenuEffects.cs create mode 100644 GameCode/MoveForward.cs create mode 100644 GameCode/MoveSequence.cs create mode 100644 GameCode/MoveTransform.cs create mode 100644 GameCode/MoveTransformGravity.cs create mode 100644 GameCode/Movement.cs create mode 100644 GameCode/MultiOptions.cs create mode 100644 GameCode/MultiOptionsButton.cs create mode 100644 GameCode/MusicGridVisualizer.cs create mode 100644 GameCode/MusicVisualizerData.cs create mode 100644 GameCode/NetworkConnectionHandler.cs create mode 100644 GameCode/NetworkData.cs create mode 100644 GameCode/NetworkPhysicsObject.cs create mode 100644 GameCode/NetworkPlayer.cs create mode 100644 GameCode/NetworkSettings.cs create mode 100644 GameCode/NewScript.cs create mode 100644 GameCode/NextArt.cs create mode 100644 GameCode/ObjectParticle.cs create mode 100644 GameCode/ObjectPool.cs create mode 100644 GameCode/ObjectScaleToBulletStats.cs create mode 100644 GameCode/ObjectShake.cs create mode 100644 GameCode/ObjectSyncPackage.cs create mode 100644 GameCode/ObjectsToSpawn.cs create mode 100644 GameCode/OnlineNameSelect.cs create mode 100644 GameCode/OnlyOneEdgeModifier.cs create mode 100644 GameCode/OptionsButton.cs create mode 100644 GameCode/Optionshandler.cs create mode 100644 GameCode/Orbit.cs create mode 100644 GameCode/OutOfBoundsHandler.cs create mode 100644 GameCode/ParticleExplosionModifier.cs create mode 100644 GameCode/ParticlePlayer.cs create mode 100644 GameCode/ParticleTime.cs create mode 100644 GameCode/PerlinWordScale.cs create mode 100644 GameCode/PhotonMapObject.cs create mode 100644 GameCode/PhysicsFunctions.cs create mode 100644 GameCode/PickerType.cs create mode 100644 GameCode/Platform.cs create mode 100644 GameCode/PlayLineAnimation.cs create mode 100644 GameCode/Player.cs create mode 100644 GameCode/PlayerAI.cs create mode 100644 GameCode/PlayerAIDavid.cs create mode 100644 GameCode/PlayerAIMinion.cs create mode 100644 GameCode/PlayerAIPetter.cs create mode 100644 GameCode/PlayerAIPhilip.cs create mode 100644 GameCode/PlayerAIWilhelm.cs create mode 100644 GameCode/PlayerAIZorro.cs create mode 100644 GameCode/PlayerAPI.cs create mode 100644 GameCode/PlayerActions.cs create mode 100644 GameCode/PlayerAssigner.cs create mode 100644 GameCode/PlayerAudioModifyers.cs create mode 100644 GameCode/PlayerChat.cs create mode 100644 GameCode/PlayerCollision.cs create mode 100644 GameCode/PlayerDoBlock.cs create mode 100644 GameCode/PlayerDoJump.cs create mode 100644 GameCode/PlayerEffects.cs create mode 100644 GameCode/PlayerFace.cs create mode 100644 GameCode/PlayerFlyParticle.cs create mode 100644 GameCode/PlayerFollowGround.cs create mode 100644 GameCode/PlayerImmunity.cs create mode 100644 GameCode/PlayerInRangeSlow.cs create mode 100644 GameCode/PlayerInRangeTrigger.cs create mode 100644 GameCode/PlayerJump.cs create mode 100644 GameCode/PlayerManager.cs create mode 100644 GameCode/PlayerMovement.cs create mode 100644 GameCode/PlayerName.cs create mode 100644 GameCode/PlayerSkin.cs create mode 100644 GameCode/PlayerSkinBank.cs create mode 100644 GameCode/PlayerSkinHandler.cs create mode 100644 GameCode/PlayerSkinParticle.cs create mode 100644 GameCode/PlayerSounds.cs create mode 100644 GameCode/PlayerSpawnVisualEffect.cs create mode 100644 GameCode/PlayerVelocity.cs create mode 100644 GameCode/PlayerWobblePosition.cs create mode 100644 GameCode/Point.cs create mode 100644 GameCode/PointVisualizer.cs create mode 100644 GameCode/PopUpHandler.cs create mode 100644 GameCode/Populate.cs create mode 100644 GameCode/PositionNoise.cs create mode 100644 GameCode/PowerUps.cs create mode 100644 GameCode/ProjectileCollision.cs create mode 100644 GameCode/ProjectileHit.cs create mode 100644 GameCode/ProjectileHitEmpower.cs create mode 100644 GameCode/ProjectileHitSurface.cs create mode 100644 GameCode/ProjectileHitSurfaceShield.cs create mode 100644 GameCode/ProjectileInit.cs create mode 100644 GameCode/ProjectilesToSpawn.cs create mode 100644 GameCode/PublicInt.cs create mode 100644 GameCode/QuitButton.cs create mode 100644 GameCode/RadarShot.cs create mode 100644 GameCode/Rage.cs create mode 100644 GameCode/RayCastTrail.cs create mode 100644 GameCode/RayHit.cs create mode 100644 GameCode/RayHitBash.cs create mode 100644 GameCode/RayHitBulletSound.cs create mode 100644 GameCode/RayHitDrill.cs create mode 100644 GameCode/RayHitEffect.cs create mode 100644 GameCode/RayHitPoison.cs create mode 100644 GameCode/RayHitReflect.cs create mode 100644 GameCode/RaycastForward.cs create mode 100644 GameCode/RaycastSetScale.cs create mode 100644 GameCode/ReflectEvent.cs create mode 100644 GameCode/RegenerateAfterStandStill.cs create mode 100644 GameCode/RegionSelector.cs create mode 100644 GameCode/ReloadTigger.cs create mode 100644 GameCode/RemoteControl.cs create mode 100644 GameCode/RemoveAfterSeconds.cs create mode 100644 GameCode/RemoveAfterSecondsScale.cs create mode 100644 GameCode/RescaleFromDamage.cs create mode 100644 GameCode/RescaleFromDamagePart.cs create mode 100644 GameCode/ResetBlock.cs create mode 100644 GameCode/RespawnEvent.cs create mode 100644 GameCode/RigLookUp.cs create mode 100644 GameCode/RightLeftMirrorSpring.cs create mode 100644 GameCode/RingHandler.cs create mode 100644 GameCode/RotSpring.cs create mode 100644 GameCode/Rotate.cs create mode 100644 GameCode/RotatingShooter.cs create mode 100644 GameCode/RotationHandler.cs create mode 100644 GameCode/RoundCounter.cs create mode 100644 GameCode/RoundModifier.cs create mode 100644 GameCode/RunSmoke.cs create mode 100644 GameCode/SFLight.cs create mode 100644 GameCode/SFPolygon.cs create mode 100644 GameCode/SFRenderer.cs create mode 100644 GameCode/SFSample.cs create mode 100644 GameCode/Saw.cs create mode 100644 GameCode/ScaleEvent.cs create mode 100644 GameCode/ScaleEventInstace.cs create mode 100644 GameCode/ScaleShake.cs create mode 100644 GameCode/ScaleTrailFromDamage.cs create mode 100644 GameCode/ScaleWithHp.cs create mode 100644 GameCode/ScreenEdgeBounce.cs create mode 100644 GameCode/Screenshaker.cs create mode 100644 GameCode/ServerMessage.cs create mode 100644 GameCode/SetActive.cs create mode 100644 GameCode/SetColorByBlockCD.cs create mode 100644 GameCode/SetEmissionOverTimeByVelocity.cs create mode 100644 GameCode/SetLocalScale.cs create mode 100644 GameCode/SetOfflineMode.cs create mode 100644 GameCode/SetParticleTimeAfterSecondsToRemove.cs create mode 100644 GameCode/SetPlayerSpriteLayer.cs create mode 100644 GameCode/SetRotation.cs create mode 100644 GameCode/SetScaleFromSizeAndExtraSize.cs create mode 100644 GameCode/SetScaleToZero.cs create mode 100644 GameCode/SetSpawnedParticleColor.cs create mode 100644 GameCode/SetSpecificArt.cs create mode 100644 GameCode/SetSpriteColor.cs create mode 100644 GameCode/SetTeamColor.cs create mode 100644 GameCode/SetTeamColorFromParentPlayer.cs create mode 100644 GameCode/SetTeamColorFromSpawnedAttack.cs create mode 100644 GameCode/SetTeamColorSpecific.cs create mode 100644 GameCode/SetTextColor.cs create mode 100644 GameCode/ShieldCharge.cs create mode 100644 GameCode/ShootPos.cs create mode 100644 GameCode/SilenceHandler.cs create mode 100644 GameCode/SimulatedSelection.cs create mode 100644 GameCode/SkipIntro.cs create mode 100644 GameCode/SliceEffect.cs create mode 100644 GameCode/SoundAudioListenerPosition.cs create mode 100644 GameCode/SpawnBulletHit.cs create mode 100644 GameCode/SpawnMinion.cs create mode 100644 GameCode/SpawnObjectEffect.cs create mode 100644 GameCode/SpawnObjectOnDealDamage.cs create mode 100644 GameCode/SpawnObjectOnDealtDamage.cs create mode 100644 GameCode/SpawnObjects.cs create mode 100644 GameCode/SpawnPoint.cs create mode 100644 GameCode/SpawnStaticRemnant.cs create mode 100644 GameCode/SpawnedAttack.cs create mode 100644 GameCode/SpawnedAttack_ParentPlayer.cs create mode 100644 GameCode/Spring.cs create mode 100644 GameCode/StandStillTrigger.cs create mode 100644 GameCode/StartEvent.cs create mode 100644 GameCode/StatsAfterDealingDamage.cs create mode 100644 GameCode/StatsWhenFullHP.cs create mode 100644 GameCode/SteamManager.cs create mode 100644 GameCode/StopRecursion.cs create mode 100644 GameCode/StunHandler.cs create mode 100644 GameCode/StunPlayer.cs create mode 100644 GameCode/SuperBasicController.cs create mode 100644 GameCode/SwordArtMove.cs create mode 100644 GameCode/TasteOfBlood.cs create mode 100644 GameCode/Teleport.cs create mode 100644 GameCode/TeleportToOpponent.cs create mode 100644 GameCode/TextFlicker.cs create mode 100644 GameCode/ThereCanOnlyBeOne.cs create mode 100644 GameCode/Thruster.cs create mode 100644 GameCode/TickMover.cs create mode 100644 GameCode/TimeHandler.cs create mode 100644 GameCode/ToggleStats.cs create mode 100644 GameCode/ToggleUnparented.cs create mode 100644 GameCode/TracerRound.cs create mode 100644 GameCode/TracerTarget.cs create mode 100644 GameCode/TrickShot.cs create mode 100644 GameCode/TwitchAudienceVisualizer.cs create mode 100644 GameCode/TwitchChatMessage.cs create mode 100644 GameCode/TwitchIrc.cs create mode 100644 GameCode/TwitchIrcExample.cs create mode 100644 GameCode/TwitchUIHandler.cs create mode 100644 GameCode/UIHandler.cs create mode 100644 GameCode/UniformModifier.cs create mode 100644 GameCode/Unparent.cs create mode 100644 GameCode/UnparentObject.cs create mode 100644 GameCode/UnparentOnHit.cs create mode 100644 GameCode/UserJoined.cs create mode 100644 GameCode/UserLeft.cs create mode 100644 GameCode/VelocityStretch.cs create mode 100644 GameCode/WallRayCaster.cs create mode 100644 GameCode/WasDealtDamageEffect.cs create mode 100644 GameCode/WasDealtDamageTrigger.cs create mode 100644 GameCode/Weapon.cs create mode 100644 GameCode/WeaponHandler.cs create mode 100644 GameCode/ZapEffect.cs create mode 100644 GameCode/Zip.cs create mode 100644 GameCode/Zop.cs create mode 100644 ROUNDS/.vs/ProjectEvaluation/rounds.metadata.v5.2 create mode 100644 ROUNDS/.vs/ProjectEvaluation/rounds.projects.v5.2 create mode 100644 ROUNDS/.vs/ROUNDS/DesignTimeBuild/.dtbcache.v2 create mode 100644 ROUNDS/.vs/ROUNDS/FileContentIndex/0ab1bff2-041a-4d95-ac3d-bb1664d9e3dd.vsidx create mode 100644 ROUNDS/.vs/ROUNDS/FileContentIndex/137f2f53-0b71-4a63-9ade-cfe5b28588f0.vsidx create mode 100644 ROUNDS/.vs/ROUNDS/FileContentIndex/5fe23c0d-3068-40a6-b6bf-0cac71fd5f2a.vsidx create mode 100644 ROUNDS/.vs/ROUNDS/FileContentIndex/d1c173dd-2134-446a-a456-1fd2c7db044c.vsidx create mode 100644 ROUNDS/.vs/ROUNDS/FileContentIndex/read.lock create mode 100644 ROUNDS/.vs/ROUNDS/v17/.futdcache.v2 create mode 100644 ROUNDS/.vs/ROUNDS/v17/.suo create mode 100644 ROUNDS/.vs/ROUNDS/v17/fileList.bin create mode 100644 ROUNDS/AbyssalCountdown.cs create mode 100644 ROUNDS/Accelerate.cs create mode 100644 ROUNDS/ActivateSciptWhenCanSeeOtherPlayer.cs create mode 100644 ROUNDS/AddShake.cs create mode 100644 ROUNDS/Aim.cs create mode 100644 ROUNDS/AimForPlayer.cs create mode 100644 ROUNDS/AmplifyColor/Quality.cs create mode 100644 ROUNDS/AmplifyColor/RenderLayer.cs create mode 100644 ROUNDS/AmplifyColor/Tonemapping.cs create mode 100644 ROUNDS/AmplifyColor/VersionInfo.cs create mode 100644 ROUNDS/AmplifyColor/VolumeEffect.cs create mode 100644 ROUNDS/AmplifyColor/VolumeEffectComponent.cs create mode 100644 ROUNDS/AmplifyColor/VolumeEffectComponentFlags.cs create mode 100644 ROUNDS/AmplifyColor/VolumeEffectContainer.cs create mode 100644 ROUNDS/AmplifyColor/VolumeEffectField.cs create mode 100644 ROUNDS/AmplifyColor/VolumeEffectFieldFlags.cs create mode 100644 ROUNDS/AmplifyColor/VolumeEffectFlags.cs create mode 100644 ROUNDS/AmplifyColorBase.cs create mode 100644 ROUNDS/AmplifyColorEffect.cs create mode 100644 ROUNDS/AmplifyColorRenderMask.cs create mode 100644 ROUNDS/AmplifyColorRenderMaskBase.cs create mode 100644 ROUNDS/AmplifyColorTriggerProxy.cs create mode 100644 ROUNDS/AmplifyColorTriggerProxy2D.cs create mode 100644 ROUNDS/AmplifyColorTriggerProxyBase.cs create mode 100644 ROUNDS/AmplifyColorVolume.cs create mode 100644 ROUNDS/AmplifyColorVolume2D.cs create mode 100644 ROUNDS/AmplifyColorVolumeBase.cs create mode 100644 ROUNDS/ApplyCardStats.cs create mode 100644 ROUNDS/ApplyRootScale.cs create mode 100644 ROUNDS/ArmRotator.cs create mode 100644 ROUNDS/ArtHandler.cs create mode 100644 ROUNDS/ArtInstance.cs create mode 100644 ROUNDS/AttackLevel.cs create mode 100644 ROUNDS/AttackTrigger.cs create mode 100644 ROUNDS/AudioModifyer.cs create mode 100644 ROUNDS/Background.cs create mode 100644 ROUNDS/BackgroundHandler.cs create mode 100644 ROUNDS/BeamAttack.cs create mode 100644 ROUNDS/BezierCurve.cs create mode 100644 ROUNDS/BlinkStep.cs create mode 100644 ROUNDS/Block.cs create mode 100644 ROUNDS/BlockEffect.cs create mode 100644 ROUNDS/BlockEffectCounter.cs create mode 100644 ROUNDS/BlockRechargeUI.cs create mode 100644 ROUNDS/BlockTrigger.cs create mode 100644 ROUNDS/BlurPost.cs create mode 100644 ROUNDS/BounceEffect.cs create mode 100644 ROUNDS/BounceEffectRetarget.cs create mode 100644 ROUNDS/BounceTrigger.cs create mode 100644 ROUNDS/BrodalAIController.cs create mode 100644 ROUNDS/BuildOnly.cs create mode 100644 ROUNDS/BulletBase.cs create mode 100644 ROUNDS/BulletDamageEvents.cs create mode 100644 ROUNDS/BulletPoint.cs create mode 100644 ROUNDS/BulletSurf.cs create mode 100644 ROUNDS/BulletWrapper.cs create mode 100644 ROUNDS/CameraZoomHandler.cs create mode 100644 ROUNDS/CanSeeInfo.cs create mode 100644 ROUNDS/CapScale.cs create mode 100644 ROUNDS/CappedDeltaTime.cs create mode 100644 ROUNDS/CardAnimation.cs create mode 100644 ROUNDS/CardAudioModifier.cs create mode 100644 ROUNDS/CardBar.cs create mode 100644 ROUNDS/CardBarButton.cs create mode 100644 ROUNDS/CardBarHandler.cs create mode 100644 ROUNDS/CardCategories.cs create mode 100644 ROUNDS/CardCategory.cs create mode 100644 ROUNDS/CardChoice.cs create mode 100644 ROUNDS/CardChoiceVisuals.cs create mode 100644 ROUNDS/CardInfo.cs create mode 100644 ROUNDS/CardInfoDisplayer.cs create mode 100644 ROUNDS/CardInfoStat.cs create mode 100644 ROUNDS/CardRarityColor.cs create mode 100644 ROUNDS/CardThemeColor.cs create mode 100644 ROUNDS/CardVisuals.cs create mode 100644 ROUNDS/ChangeColor.cs create mode 100644 ROUNDS/ChangeDamageMultiplierAfterDistanceTravelled.cs create mode 100644 ROUNDS/ChannelMessage.cs create mode 100644 ROUNDS/CharacterCreator.cs create mode 100644 ROUNDS/CharacterCreatorButtonSpawner.cs create mode 100644 ROUNDS/CharacterCreatorDragging.cs create mode 100644 ROUNDS/CharacterCreatorHandler.cs create mode 100644 ROUNDS/CharacterCreatorItemEquipper.cs create mode 100644 ROUNDS/CharacterCreatorItemLoader.cs create mode 100644 ROUNDS/CharacterCreatorNavigation.cs create mode 100644 ROUNDS/CharacterCreatorPortrait.cs create mode 100644 ROUNDS/CharacterItem.cs create mode 100644 ROUNDS/CharacterItemButton.cs create mode 100644 ROUNDS/CharacterItemMirror.cs create mode 100644 ROUNDS/CharacterItemType.cs create mode 100644 ROUNDS/CharacterSelectionInstance.cs create mode 100644 ROUNDS/CharacterSelectionMenu.cs create mode 100644 ROUNDS/CharacterStatModifiers.cs create mode 100644 ROUNDS/ChargeFeedback.cs create mode 100644 ROUNDS/Chase.cs create mode 100644 ROUNDS/ChatFilter.cs create mode 100644 ROUNDS/ChatFilterInstance.cs create mode 100644 ROUNDS/ChildRPC.cs create mode 100644 ROUNDS/ChillingTouch.cs create mode 100644 ROUNDS/ChomaticAberrationFeeler.cs create mode 100644 ROUNDS/Cluster.cs create mode 100644 ROUNDS/CodeAnimation.cs create mode 100644 ROUNDS/CodeAnimationInstance.cs create mode 100644 ROUNDS/CollisionChecker.cs create mode 100644 ROUNDS/ColorBlink.cs create mode 100644 ROUNDS/ColorHandler.cs create mode 100644 ROUNDS/Comment.cs create mode 100644 ROUNDS/Connected.cs create mode 100644 ROUNDS/ControllerImageToggler.cs create mode 100644 ROUNDS/CooldownCondition.cs create mode 100644 ROUNDS/CooldownWindUp.cs create mode 100644 ROUNDS/CopyChildren.cs create mode 100644 ROUNDS/CopyObject.cs create mode 100644 ROUNDS/CopyOwnerGunStats.cs create mode 100644 ROUNDS/CopyPlayerAim.cs create mode 100644 ROUNDS/Cos.cs create mode 100644 ROUNDS/CounterUI.cs create mode 100644 ROUNDS/CrownPos.cs create mode 100644 ROUNDS/CurveAnimation.cs create mode 100644 ROUNDS/CurveAnimationInstance.cs create mode 100644 ROUNDS/CurveAnimationType.cs create mode 100644 ROUNDS/CurveAnimationUse.cs create mode 100644 ROUNDS/Damagable.cs create mode 100644 ROUNDS/DamagableEvent.cs create mode 100644 ROUNDS/DamageBox.cs create mode 100644 ROUNDS/DamageEffect.cs create mode 100644 ROUNDS/DamageOverTime.cs create mode 100644 ROUNDS/DealDamageToPlayer.cs create mode 100644 ROUNDS/DealtDamageEffect.cs create mode 100644 ROUNDS/DealtDamageTrigger.cs create mode 100644 ROUNDS/DeathEffect.cs create mode 100644 ROUNDS/Debug.cs create mode 100644 ROUNDS/DelayEvent.cs create mode 100644 ROUNDS/DelayedEvent.cs create mode 100644 ROUNDS/DestroyEvent.cs create mode 100644 ROUNDS/DestroyObjects.cs create mode 100644 ROUNDS/DestroyOnAwake.cs create mode 100644 ROUNDS/Destructible.cs create mode 100644 ROUNDS/DestructibleBoxDestruction.cs create mode 100644 ROUNDS/DevConsole.cs create mode 100644 ROUNDS/DisableChildren.cs create mode 100644 ROUNDS/DisableEvent.cs create mode 100644 ROUNDS/DisableIfSimple.cs create mode 100644 ROUNDS/DisableObjects.cs create mode 100644 ROUNDS/DisplayMatchPlayerNames.cs create mode 100644 ROUNDS/DmgEvent.cs create mode 100644 ROUNDS/DoPlayerReload.cs create mode 100644 ROUNDS/DodgeGround.cs create mode 100644 ROUNDS/DontChangeMe.cs create mode 100644 ROUNDS/DuringReloadTrigger.cs create mode 100644 ROUNDS/DynamicParticleSet.cs create mode 100644 ROUNDS/DynamicParticles.cs create mode 100644 ROUNDS/Emoji.cs create mode 100644 ROUNDS/EmojiButton.cs create mode 100644 ROUNDS/EmojiCombiner.cs create mode 100644 ROUNDS/Empower.cs create mode 100644 ROUNDS/EmpowerStopBlockObjectFollow.cs create mode 100644 ROUNDS/EmptySprite.cs create mode 100644 ROUNDS/EnableEvent.cs create mode 100644 ROUNDS/EnableObjectPerLevel.cs create mode 100644 ROUNDS/EnsnareEffect.cs create mode 100644 ROUNDS/ErrorHandler.cs create mode 100644 ROUNDS/EscapeMenuHandler.cs create mode 100644 ROUNDS/EventSequence.cs create mode 100644 ROUNDS/ExceptionThrown.cs create mode 100644 ROUNDS/Explosion.cs create mode 100644 ROUNDS/Explosion_Overpower.cs create mode 100644 ROUNDS/Extensions.cs create mode 100644 ROUNDS/ExtraBlock.cs create mode 100644 ROUNDS/FRILerp.cs create mode 100644 ROUNDS/FakeParticleDB.cs create mode 100644 ROUNDS/FlickerEvent.cs create mode 100644 ROUNDS/FollowInactiveHand.cs create mode 100644 ROUNDS/FollowLocalPos.cs create mode 100644 ROUNDS/FollowPlayer.cs create mode 100644 ROUNDS/FollowRandomPlayer.cs create mode 100644 ROUNDS/FollowScale.cs create mode 100644 ROUNDS/FollowTransform.cs create mode 100644 ROUNDS/ForceMultiplier.cs create mode 100644 ROUNDS/FreeModifier.cs create mode 100644 ROUNDS/GM_ArmsRace.cs create mode 100644 ROUNDS/GM_Test.cs create mode 100644 ROUNDS/GameAnalytics.cs create mode 100644 ROUNDS/GameCrownHandler.cs create mode 100644 ROUNDS/GameFeeler.cs create mode 100644 ROUNDS/GameManager.cs create mode 100644 ROUNDS/GamefeelManager.cs create mode 100644 ROUNDS/GeneralInput.cs create mode 100644 ROUNDS/GeneralParticleSystem.cs create mode 100644 ROUNDS/GeneralShooter.cs create mode 100644 ROUNDS/GetColor.cs create mode 100644 ROUNDS/GetControllerButton.cs create mode 100644 ROUNDS/GifCam.cs create mode 100644 ROUNDS/GoBack.cs create mode 100644 ROUNDS/Grass.cs create mode 100644 ROUNDS/Gravity.cs create mode 100644 ROUNDS/GridBounceCircle.cs create mode 100644 ROUNDS/GridLightBulb.cs create mode 100644 ROUNDS/GridObject.cs create mode 100644 ROUNDS/GridVisualizer.cs create mode 100644 ROUNDS/Gun.cs create mode 100644 ROUNDS/GunAmmo.cs create mode 100644 ROUNDS/GunLevel.cs create mode 100644 ROUNDS/HandPos.cs create mode 100644 ROUNDS/HasToReturn.cs create mode 100644 ROUNDS/HealthBar.cs create mode 100644 ROUNDS/HealthHandler.cs create mode 100644 ROUNDS/HitInfo.cs create mode 100644 ROUNDS/Holdable.cs create mode 100644 ROUNDS/Holding.cs create mode 100644 ROUNDS/HoldingObject.cs create mode 100644 ROUNDS/Homing.cs create mode 100644 ROUNDS/HoverEvent.cs create mode 100644 ROUNDS/HoverEventColor.cs create mode 100644 ROUNDS/HoverEvent_WobbleButton.cs create mode 100644 ROUNDS/HoveredTooltip.cs create mode 100644 ROUNDS/IKArmMove.cs create mode 100644 ROUNDS/IKLegMove.cs create mode 100644 ROUNDS/IkLeg.cs create mode 100644 ROUNDS/Immunities.cs create mode 100644 ROUNDS/Implosion.cs create mode 100644 ROUNDS/InitPackage.cs create mode 100644 ROUNDS/Irc/ChannelMessageEventArgs.cs create mode 100644 ROUNDS/Irc/ExceptionEventArgs.cs create mode 100644 ROUNDS/Irc/StringEventArgs.cs create mode 100644 ROUNDS/Irc/UpdateUsersEventArgs.cs create mode 100644 ROUNDS/Irc/UserJoinedEventArgs.cs create mode 100644 ROUNDS/Irc/UserLeftEventArgs.cs create mode 100644 ROUNDS/IsMineEvent.cs create mode 100644 ROUNDS/JustEvent.cs create mode 100644 ROUNDS/KillBox.cs create mode 100644 ROUNDS/Landfall.AI/Evolver.cs create mode 100644 ROUNDS/Landfall.AI/Genome.cs create mode 100644 ROUNDS/Landfall.AI/NeuralNet.cs create mode 100644 ROUNDS/Landfall.AI/Neuron.cs create mode 100644 ROUNDS/Landfall.AI/Population.cs create mode 100644 ROUNDS/Landfall.AI/WeightDataAsset.cs create mode 100644 ROUNDS/Landfall.Network/ClientSteamLobby.cs create mode 100644 ROUNDS/Landfall.Network/SteamLobbyMessageType.cs create mode 100644 ROUNDS/LeftRight.cs create mode 100644 ROUNDS/LegRaycasters.cs create mode 100644 ROUNDS/LegRenderer.cs create mode 100644 ROUNDS/LegRotator.cs create mode 100644 ROUNDS/LerpBackToStartPos.cs create mode 100644 ROUNDS/LevelMapper.cs create mode 100644 ROUNDS/LevelScale.cs create mode 100644 ROUNDS/LifeSteal.cs create mode 100644 ROUNDS/LineEffect.cs create mode 100644 ROUNDS/LineEffectExplosionModifier.cs create mode 100644 ROUNDS/LineEffectInstance.cs create mode 100644 ROUNDS/LineOfSightTrigger.cs create mode 100644 ROUNDS/LineRangeEffect.cs create mode 100644 ROUNDS/ListMenu.cs create mode 100644 ROUNDS/ListMenuButton.cs create mode 100644 ROUNDS/ListMenuPage.cs create mode 100644 ROUNDS/LoadingScreen.cs create mode 100644 ROUNDS/LobbyHandler.cs create mode 100644 ROUNDS/Looper.cs create mode 100644 ROUNDS/LowFrameRate.cs create mode 100644 ROUNDS/LowerScreenshakePerPlayer.cs create mode 100644 ROUNDS/MainCam.cs create mode 100644 ROUNDS/MainMenuHandler.cs create mode 100644 ROUNDS/Map.cs create mode 100644 ROUNDS/MapManager.cs create mode 100644 ROUNDS/MapObjet_Rope.cs create mode 100644 ROUNDS/MapTransition.cs create mode 100644 ROUNDS/MapWrapper.cs create mode 100644 ROUNDS/MenuControllerEvent.cs create mode 100644 ROUNDS/MenuControllerHandler.cs create mode 100644 ROUNDS/MenuControllerToggler.cs create mode 100644 ROUNDS/MenuEffects.cs create mode 100644 ROUNDS/MoveForward.cs create mode 100644 ROUNDS/MoveSequence.cs create mode 100644 ROUNDS/MoveTransform.cs create mode 100644 ROUNDS/MoveTransformGravity.cs create mode 100644 ROUNDS/Movement.cs create mode 100644 ROUNDS/MultiOptions.cs create mode 100644 ROUNDS/MultiOptionsButton.cs create mode 100644 ROUNDS/MusicGridVisualizer.cs create mode 100644 ROUNDS/MusicVisualizerData.cs create mode 100644 ROUNDS/NetworkConnectionHandler.cs create mode 100644 ROUNDS/NetworkData.cs create mode 100644 ROUNDS/NetworkPhysicsObject.cs create mode 100644 ROUNDS/NetworkPlayer.cs create mode 100644 ROUNDS/NetworkSettings.cs create mode 100644 ROUNDS/NewScript.cs create mode 100644 ROUNDS/NextArt.cs create mode 100644 ROUNDS/ObjectParticle.cs create mode 100644 ROUNDS/ObjectPool.cs create mode 100644 ROUNDS/ObjectScaleToBulletStats.cs create mode 100644 ROUNDS/ObjectShake.cs create mode 100644 ROUNDS/ObjectSyncPackage.cs create mode 100644 ROUNDS/ObjectsToSpawn.cs create mode 100644 ROUNDS/OnlineNameSelect.cs create mode 100644 ROUNDS/OnlyOneEdgeModifier.cs create mode 100644 ROUNDS/OptionsButton.cs create mode 100644 ROUNDS/Optionshandler.cs create mode 100644 ROUNDS/Orbit.cs create mode 100644 ROUNDS/OutOfBoundsHandler.cs create mode 100644 ROUNDS/ParticleExplosionModifier.cs create mode 100644 ROUNDS/ParticlePlayer.cs create mode 100644 ROUNDS/ParticleTime.cs create mode 100644 ROUNDS/PerlinWordScale.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackBoolean.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackByte.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackChar.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackDouble.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackInt16.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackInt32.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackInt64.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackList.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackSByte.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackSingle.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackString.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackStringBuilder.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackUInt16.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackUInt32.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackUInt64.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackVector2.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackVector2Int.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackVector3.cs create mode 100644 ROUNDS/Photon.Compression.Internal/IPackVector3Int.cs create mode 100644 ROUNDS/Photon.Compression.Internal/PackDelegate.cs create mode 100644 ROUNDS/Photon.Compression.Internal/PackFrame.cs create mode 100644 ROUNDS/Photon.Compression.Internal/PackFrame_TestPackObject.cs create mode 100644 ROUNDS/Photon.Compression.Internal/PackListDelegate.cs create mode 100644 ROUNDS/Photon.Compression.Internal/PackObjectDatabase.cs create mode 100644 ROUNDS/Photon.Compression.Internal/PackSingleDelegate.cs create mode 100644 ROUNDS/Photon.Compression.Internal/PackSupportedTypesAttribute.cs create mode 100644 ROUNDS/Photon.Compression.Internal/Pack_TestPackObject.cs create mode 100644 ROUNDS/Photon.Compression.Internal/SyncRangedAttribute.cs create mode 100644 ROUNDS/Photon.Compression.Internal/SyncVarBaseAttribute.cs create mode 100644 ROUNDS/Photon.Compression.Internal/UnpackDelegate.cs create mode 100644 ROUNDS/Photon.Compression.Internal/UnpackListDelegate.cs create mode 100644 ROUNDS/Photon.Compression/CompressLevel.cs create mode 100644 ROUNDS/Photon.Compression/CompressedElement.cs create mode 100644 ROUNDS/Photon.Compression/CompressedElementExt.cs create mode 100644 ROUNDS/Photon.Compression/CompressedMatrix.cs create mode 100644 ROUNDS/Photon.Compression/CompressedQuat.cs create mode 100644 ROUNDS/Photon.Compression/DefaultKeyRate.cs create mode 100644 ROUNDS/Photon.Compression/DefaultPackInclusion.cs create mode 100644 ROUNDS/Photon.Compression/Element.cs create mode 100644 ROUNDS/Photon.Compression/ElementCrusher.cs create mode 100644 ROUNDS/Photon.Compression/FactorBoundsOn.cs create mode 100644 ROUNDS/Photon.Compression/FloatCrusherExtensions.cs create mode 100644 ROUNDS/Photon.Compression/IHasTransformCrusher.cs create mode 100644 ROUNDS/Photon.Compression/IOnElementCrusherChange.cs create mode 100644 ROUNDS/Photon.Compression/IPackObj.cs create mode 100644 ROUNDS/Photon.Compression/IPackObjOnReadyChange.cs create mode 100644 ROUNDS/Photon.Compression/IncludeAxisExtensions.cs create mode 100644 ROUNDS/Photon.Compression/IncludedAxes.cs create mode 100644 ROUNDS/Photon.Compression/IndicatorBit.cs create mode 100644 ROUNDS/Photon.Compression/IndicatorBits.cs create mode 100644 ROUNDS/Photon.Compression/KeyRate.cs create mode 100644 ROUNDS/Photon.Compression/LiteCrusher.cs create mode 100644 ROUNDS/Photon.Compression/LiteFloatCompressType.cs create mode 100644 ROUNDS/Photon.Compression/LiteFloatCrusher.cs create mode 100644 ROUNDS/Photon.Compression/LiteIntCompressType.cs create mode 100644 ROUNDS/Photon.Compression/LiteIntCrusher.cs create mode 100644 ROUNDS/Photon.Compression/LiteOutOfBoundsHandling.cs create mode 100644 ROUNDS/Photon.Compression/Matrix.cs create mode 100644 ROUNDS/Photon.Compression/MatrixExtensions.cs create mode 100644 ROUNDS/Photon.Compression/NormCompress.cs create mode 100644 ROUNDS/Photon.Compression/NormalizedFloatCompression.cs create mode 100644 ROUNDS/Photon.Compression/PackObjectAttribute.cs create mode 100644 ROUNDS/Photon.Compression/PackObjectSettings.cs create mode 100644 ROUNDS/Photon.Compression/QuatCrusher.cs create mode 100644 ROUNDS/Photon.Compression/SerializationFlags.cs create mode 100644 ROUNDS/Photon.Compression/SetValueTiming.cs create mode 100644 ROUNDS/Photon.Compression/SyncAs.cs create mode 100644 ROUNDS/Photon.Compression/SyncHalfFloatAttribute.cs create mode 100644 ROUNDS/Photon.Compression/SyncListAttribute.cs create mode 100644 ROUNDS/Photon.Compression/SyncRangedIntAttribute.cs create mode 100644 ROUNDS/Photon.Compression/SyncVarAttribute.cs create mode 100644 ROUNDS/Photon.Compression/TransformCrusher.cs create mode 100644 ROUNDS/Photon.Compression/WorldBounds.cs create mode 100644 ROUNDS/Photon.Compression/WorldBoundsGroup.cs create mode 100644 ROUNDS/Photon.Compression/WorldBoundsSelectAttributeAttribute.cs create mode 100644 ROUNDS/Photon.Compression/WorldBoundsSettings.cs create mode 100644 ROUNDS/Photon.Compression/XYZSwitchMaskAttribute.cs create mode 100644 ROUNDS/Photon.Pun.Demo/OwnerGUI.cs create mode 100644 ROUNDS/Photon.Pun.Example/TakeOwnership.cs create mode 100644 ROUNDS/Photon.Pun.Simple.ContactGroups/ContactGroupAssign.cs create mode 100644 ROUNDS/Photon.Pun.Simple.ContactGroups/ContactGroupMaskSelector.cs create mode 100644 ROUNDS/Photon.Pun.Simple.ContactGroups/ContactGroupSelector.cs create mode 100644 ROUNDS/Photon.Pun.Simple.ContactGroups/ContactGroupSettings.cs create mode 100644 ROUNDS/Photon.Pun.Simple.ContactGroups/ContactGroupValues.cs create mode 100644 ROUNDS/Photon.Pun.Simple.ContactGroups/IContactGroupMask.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Debugging/UIConsole.cs create mode 100644 ROUNDS/Photon.Pun.Simple.GhostWorlds/IHasNetworkID.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/CallbackUtilities.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/NetMsgCallbacks.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/NetMsgSends.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/NetObjColliderExt.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/ParameterDefaults.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/ParameterExtrapolation.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/ParameterInterpolation.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/ParameterMissingHold.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/ParameterSettings.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/ReceiveGroup.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/SimpleDocsURLS.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Internal/TickManager.cs create mode 100644 ROUNDS/Photon.Pun.Simple.Pooling/Pool.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AnimPassThru.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ApplyOrderConstants.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AutoDestroyUnspawned.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AutoLayerByAuthority.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AutoMountHitscan.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AutoOwnerComponentEnable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AutoOwnerGameObjEnable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AutoZoom.cs create mode 100644 ROUNDS/Photon.Pun.Simple/AxisMask.cs create mode 100644 ROUNDS/Photon.Pun.Simple/BasicInventory.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ConnectionTickOffsets.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ConsumedDespawn.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Consumption.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ContactEvent.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ContactManager.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ContactProjectile.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ContactReactorBase.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ContactTrigger.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ContactType.cs create mode 100644 ROUNDS/Photon.Pun.Simple/DisplayToggle.cs create mode 100644 ROUNDS/Photon.Pun.Simple/DoubleTime.cs create mode 100644 ROUNDS/Photon.Pun.Simple/EnableOnNetObjReady.cs create mode 100644 ROUNDS/Photon.Pun.Simple/FrameArrival.cs create mode 100644 ROUNDS/Photon.Pun.Simple/FrameBase.cs create mode 100644 ROUNDS/Photon.Pun.Simple/FrameContents.cs create mode 100644 ROUNDS/Photon.Pun.Simple/GenericHitscanExt.cs create mode 100644 ROUNDS/Photon.Pun.Simple/GenericSpawnPoint.cs create mode 100644 ROUNDS/Photon.Pun.Simple/HitscanComponent.cs create mode 100644 ROUNDS/Photon.Pun.Simple/HitscanDefinition.cs create mode 100644 ROUNDS/Photon.Pun.Simple/HitscanType.cs create mode 100644 ROUNDS/Photon.Pun.Simple/HitscanTypeExt.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IAdjustableApplyOrder.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IApplyOrder.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IAutoKinematic.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IConsumable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IContactGroupsAssign.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IContactReactor.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IContactSystem.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IContactTrigger.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IContactable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IDeltaFrameChangeDetect.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IFlagTeleport.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IInventorySystem.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IInventoryable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IMountable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnAuthorityChanged.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnAwake.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnCaptureState.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnChangeOwnedVitals.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnContactEvent.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnCriticallyLateFrame.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnDisable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnEnable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnIncrementFrame.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnInterpolate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnJoinedRoom.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnNetObjReady.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnNetSerialize.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnNetworkHit.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPostCallbackLoop.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPostLateUpdate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPostSimulate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPostUpdate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPreLateUpdate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPreNetDestroy.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPreQuit.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPreSimulate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnPreUpdate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnQuantize.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnRootVitalBecameZero.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnSnapshot.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnStart.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnStateChange.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnTerminate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnTickPreSerialization.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnTickSnapshot.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnVitalChange.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnVitalParamChange.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnVitalValueChange.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnVitalsChange.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnVitalsParamChange.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IOnVitalsValueChange.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IProjectile.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IProjectileCannon.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IReadyable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ISerializationOptional.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ISpawnController.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ISyncAnimator.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ISyncContact.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ISyncTransform.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ITransformController.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IUseKeyframes.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IVitalsConsumable.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IVitalsContactReactor.cs create mode 100644 ROUNDS/Photon.Pun.Simple/IVitalsSystem.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Interpolation.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Inventory.cs create mode 100644 ROUNDS/Photon.Pun.Simple/InventoryContactReactors.cs create mode 100644 ROUNDS/Photon.Pun.Simple/KinematicSetting.cs create mode 100644 ROUNDS/Photon.Pun.Simple/LocalApplyTiming.cs create mode 100644 ROUNDS/Photon.Pun.Simple/MaskLogic.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Mount.cs create mode 100644 ROUNDS/Photon.Pun.Simple/MountMaskSelector.cs create mode 100644 ROUNDS/Photon.Pun.Simple/MountSelector.cs create mode 100644 ROUNDS/Photon.Pun.Simple/MountSettings.cs create mode 100644 ROUNDS/Photon.Pun.Simple/MountSwitcher.cs create mode 100644 ROUNDS/Photon.Pun.Simple/MountThrow.cs create mode 100644 ROUNDS/Photon.Pun.Simple/MountsManager.cs create mode 100644 ROUNDS/Photon.Pun.Simple/NetComponent.cs create mode 100644 ROUNDS/Photon.Pun.Simple/NetMaster.cs create mode 100644 ROUNDS/Photon.Pun.Simple/NetMasterCallbacks.cs create mode 100644 ROUNDS/Photon.Pun.Simple/NetMasterLate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/NetObject.cs create mode 100644 ROUNDS/Photon.Pun.Simple/NetworkHit.cs create mode 100644 ROUNDS/Photon.Pun.Simple/NetworkHits.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ObjState.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ObjStateEditor.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ObjStateLogic.cs create mode 100644 ROUNDS/Photon.Pun.Simple/OnStateChangeKinematic.cs create mode 100644 ROUNDS/Photon.Pun.Simple/OnStateChangeToggle.cs create mode 100644 ROUNDS/Photon.Pun.Simple/OwnedIVitals.cs create mode 100644 ROUNDS/Photon.Pun.Simple/PassThruType.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ProjectileHelpers.cs create mode 100644 ROUNDS/Photon.Pun.Simple/ReadyStateEnum.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Replicate.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Replication.cs create mode 100644 ROUNDS/Photon.Pun.Simple/RespondTo.cs create mode 100644 ROUNDS/Photon.Pun.Simple/RigidbodyType.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SimulateHealth.cs create mode 100644 ROUNDS/Photon.Pun.Simple/StateChangeInfo.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncAdditiveMover.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncAnimator.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncCannon.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncContact.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncContactScan.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncMoverBase.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncNodeMover.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncObject.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncOwner.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncShootBase.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncSpawnTimer.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncState.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncTransform.cs create mode 100644 ROUNDS/Photon.Pun.Simple/SyncVitals.cs create mode 100644 ROUNDS/Photon.Pun.Simple/TRS.cs create mode 100644 ROUNDS/Photon.Pun.Simple/TRSDefinitionBase.cs create mode 100644 ROUNDS/Photon.Pun.Simple/TeleportMarker.cs create mode 100644 ROUNDS/Photon.Pun.Simple/TickEngineSettings.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Vital.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalData.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalDefinition.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalNameType.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalType.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalUI.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalUIBase.cs create mode 100644 ROUNDS/Photon.Pun.Simple/Vitals.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalsContactReactor.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalsData.cs create mode 100644 ROUNDS/Photon.Pun.Simple/VitalsUISrcBase.cs create mode 100644 ROUNDS/Photon.Pun.UtilityScripts/CopyComponent.cs create mode 100644 ROUNDS/Photon.Pun/PlayerSyncPackage.cs create mode 100644 ROUNDS/Photon.Pun/ProjectileSyncPackage.cs create mode 100644 ROUNDS/Photon.Pun/SyncPlayerMovement.cs create mode 100644 ROUNDS/Photon.Pun/SyncProjectile.cs create mode 100644 ROUNDS/Photon.Realtime.Demo/ConnectAndJoinRandomLb.cs create mode 100644 ROUNDS/Photon.Utilities/BitUtilities.cs create mode 100644 ROUNDS/Photon.Utilities/BitsPerRangeAttribute.cs create mode 100644 ROUNDS/Photon.Utilities/BoundsTools.cs create mode 100644 ROUNDS/Photon.Utilities/CatmulRom.cs create mode 100644 ROUNDS/Photon.Utilities/DisableFieldAttribute.cs create mode 100644 ROUNDS/Photon.Utilities/EnumMaskAttribute.cs create mode 100644 ROUNDS/Photon.Utilities/FastBitMask128.cs create mode 100644 ROUNDS/Photon.Utilities/FastBitMask64.cs create mode 100644 ROUNDS/Photon.Utilities/FastBitMask64Ext.cs create mode 100644 ROUNDS/Photon.Utilities/FastBitMaskExt.cs create mode 100644 ROUNDS/Photon.Utilities/MinMaxRangeAttribute.cs create mode 100644 ROUNDS/Photon.Utilities/ReadOnlyAttribute.cs create mode 100644 ROUNDS/Photon.Utilities/SettingsScriptableObject.cs create mode 100644 ROUNDS/Photon.Utilities/SettingsScriptableObjectBase.cs create mode 100644 ROUNDS/Photon.Utilities/SingleUnityLayer.cs create mode 100644 ROUNDS/Photon.Utilities/SmartVar.cs create mode 100644 ROUNDS/Photon.Utilities/SmartVarTypeCode.cs create mode 100644 ROUNDS/Photon.Utilities/VersaMaskAttribute.cs create mode 100644 ROUNDS/PhotonMapObject.cs create mode 100644 ROUNDS/PhysicsFunctions.cs create mode 100644 ROUNDS/PickerType.cs create mode 100644 ROUNDS/Platform.cs create mode 100644 ROUNDS/PlayLineAnimation.cs create mode 100644 ROUNDS/Player.cs create mode 100644 ROUNDS/PlayerAI.cs create mode 100644 ROUNDS/PlayerAIDavid.cs create mode 100644 ROUNDS/PlayerAIMinion.cs create mode 100644 ROUNDS/PlayerAIPetter.cs create mode 100644 ROUNDS/PlayerAIPhilip.cs create mode 100644 ROUNDS/PlayerAIWilhelm.cs create mode 100644 ROUNDS/PlayerAIZorro.cs create mode 100644 ROUNDS/PlayerAPI.cs create mode 100644 ROUNDS/PlayerActions.cs create mode 100644 ROUNDS/PlayerAssigner.cs create mode 100644 ROUNDS/PlayerAudioModifyers.cs create mode 100644 ROUNDS/PlayerChat.cs create mode 100644 ROUNDS/PlayerDoBlock.cs create mode 100644 ROUNDS/PlayerEffects.cs create mode 100644 ROUNDS/PlayerFace.cs create mode 100644 ROUNDS/PlayerFlyParticle.cs create mode 100644 ROUNDS/PlayerImmunity.cs create mode 100644 ROUNDS/PlayerInRangeSlow.cs create mode 100644 ROUNDS/PlayerInRangeTrigger.cs create mode 100644 ROUNDS/PlayerManager.cs create mode 100644 ROUNDS/PlayerName.cs create mode 100644 ROUNDS/PlayerSkin.cs create mode 100644 ROUNDS/PlayerSkinBank.cs create mode 100644 ROUNDS/PlayerSkinHandler.cs create mode 100644 ROUNDS/PlayerSkinParticle.cs create mode 100644 ROUNDS/PlayerSounds.cs create mode 100644 ROUNDS/PlayerSpawnVisualEffect.cs create mode 100644 ROUNDS/PlayerWobblePosition.cs create mode 100644 ROUNDS/Point.cs create mode 100644 ROUNDS/PointVisualizer.cs create mode 100644 ROUNDS/PopUpHandler.cs create mode 100644 ROUNDS/Populate.cs create mode 100644 ROUNDS/PositionNoise.cs create mode 100644 ROUNDS/PowerUps.cs create mode 100644 ROUNDS/ProjectileCollision.cs create mode 100644 ROUNDS/ProjectileHit.cs create mode 100644 ROUNDS/ProjectileHitEmpower.cs create mode 100644 ROUNDS/ProjectileHitSurface.cs create mode 100644 ROUNDS/ProjectileHitSurfaceShield.cs create mode 100644 ROUNDS/ProjectileInit.cs create mode 100644 ROUNDS/ProjectilesToSpawn.cs create mode 100644 ROUNDS/Properties/AssemblyInfo.cs create mode 100644 ROUNDS/PublicInt.cs create mode 100644 ROUNDS/QuitButton.cs create mode 100644 ROUNDS/ROUNDS.csproj create mode 100644 ROUNDS/ROUNDS.sln create mode 100644 ROUNDS/RadarShot.cs create mode 100644 ROUNDS/Rage.cs create mode 100644 ROUNDS/RayCastTrail.cs create mode 100644 ROUNDS/RayHit.cs create mode 100644 ROUNDS/RayHitBash.cs create mode 100644 ROUNDS/RayHitBulletSound.cs create mode 100644 ROUNDS/RayHitDrill.cs create mode 100644 ROUNDS/RayHitEffect.cs create mode 100644 ROUNDS/RayHitPoison.cs create mode 100644 ROUNDS/RayHitReflect.cs create mode 100644 ROUNDS/RaycastForward.cs create mode 100644 ROUNDS/RaycastSetScale.cs create mode 100644 ROUNDS/ReflectEvent.cs create mode 100644 ROUNDS/RegenerateAfterStandStill.cs create mode 100644 ROUNDS/RegionSelector.cs create mode 100644 ROUNDS/ReloadTigger.cs create mode 100644 ROUNDS/RemoteControl.cs create mode 100644 ROUNDS/RemoveAfterSeconds.cs create mode 100644 ROUNDS/RemoveAfterSecondsScale.cs create mode 100644 ROUNDS/RescaleFromDamage.cs create mode 100644 ROUNDS/RescaleFromDamagePart.cs create mode 100644 ROUNDS/ResetBlock.cs create mode 100644 ROUNDS/RespawnEvent.cs create mode 100644 ROUNDS/RigLookUp.cs create mode 100644 ROUNDS/RightLeftMirrorSpring.cs create mode 100644 ROUNDS/RingHandler.cs create mode 100644 ROUNDS/RotSpring.cs create mode 100644 ROUNDS/Rotate.cs create mode 100644 ROUNDS/RotatingShooter.cs create mode 100644 ROUNDS/RotationHandler.cs create mode 100644 ROUNDS/RoundCounter.cs create mode 100644 ROUNDS/RoundModifier.cs create mode 100644 ROUNDS/Rounds/FakeParticle.cs create mode 100644 ROUNDS/RunSmoke.cs create mode 100644 ROUNDS/SFLight.cs create mode 100644 ROUNDS/SFPolygon.cs create mode 100644 ROUNDS/SFRenderer.cs create mode 100644 ROUNDS/SFSample.cs create mode 100644 ROUNDS/Saw.cs create mode 100644 ROUNDS/ScaleEvent.cs create mode 100644 ROUNDS/ScaleEventInstace.cs create mode 100644 ROUNDS/ScaleShake.cs create mode 100644 ROUNDS/ScaleTrailFromDamage.cs create mode 100644 ROUNDS/ScaleWithHp.cs create mode 100644 ROUNDS/ScreenEdgeBounce.cs create mode 100644 ROUNDS/Screenshaker.cs create mode 100644 ROUNDS/ServerMessage.cs create mode 100644 ROUNDS/SetActive.cs create mode 100644 ROUNDS/SetColorByBlockCD.cs create mode 100644 ROUNDS/SetEmissionOverTimeByVelocity.cs create mode 100644 ROUNDS/SetLocalScale.cs create mode 100644 ROUNDS/SetOfflineMode.cs create mode 100644 ROUNDS/SetParticleTimeAfterSecondsToRemove.cs create mode 100644 ROUNDS/SetPlayerSpriteLayer.cs create mode 100644 ROUNDS/SetRotation.cs create mode 100644 ROUNDS/SetScaleFromSizeAndExtraSize.cs create mode 100644 ROUNDS/SetScaleToZero.cs create mode 100644 ROUNDS/SetSpawnedParticleColor.cs create mode 100644 ROUNDS/SetSpecificArt.cs create mode 100644 ROUNDS/SetSpriteColor.cs create mode 100644 ROUNDS/SetTeamColor.cs create mode 100644 ROUNDS/SetTeamColorFromParentPlayer.cs create mode 100644 ROUNDS/SetTeamColorFromSpawnedAttack.cs create mode 100644 ROUNDS/SetTeamColorSpecific.cs create mode 100644 ROUNDS/SetTextColor.cs create mode 100644 ROUNDS/ShieldCharge.cs create mode 100644 ROUNDS/ShootPos.cs create mode 100644 ROUNDS/SilenceHandler.cs create mode 100644 ROUNDS/SimulatedSelection.cs create mode 100644 ROUNDS/SkipIntro.cs create mode 100644 ROUNDS/SliceEffect.cs create mode 100644 ROUNDS/SoundAudioListenerPosition.cs create mode 100644 ROUNDS/SoundImplementation/SoundAnimationPlay.cs create mode 100644 ROUNDS/SoundImplementation/SoundEnvironmentRigidbody.cs create mode 100644 ROUNDS/SoundImplementation/SoundGun.cs create mode 100644 ROUNDS/SoundImplementation/SoundHierarchyDepth.cs create mode 100644 ROUNDS/SoundImplementation/SoundHierarchyPlay.cs create mode 100644 ROUNDS/SoundImplementation/SoundHierarchySpawn.cs create mode 100644 ROUNDS/SoundImplementation/SoundImpactModifier.cs create mode 100644 ROUNDS/SoundImplementation/SoundMusicManager.cs create mode 100644 ROUNDS/SoundImplementation/SoundOnePerPlayer.cs create mode 100644 ROUNDS/SoundImplementation/SoundPlayerStatic.cs create mode 100644 ROUNDS/SoundImplementation/SoundPolyGrouping.cs create mode 100644 ROUNDS/SoundImplementation/SoundShotModifier.cs create mode 100644 ROUNDS/SoundImplementation/SoundStaticRemoteControl.cs create mode 100644 ROUNDS/SoundImplementation/SoundUnityEventPlayer.cs create mode 100644 ROUNDS/SoundImplementation/SoundVolumeManager.cs create mode 100644 ROUNDS/SpawnBulletHit.cs create mode 100644 ROUNDS/SpawnMinion.cs create mode 100644 ROUNDS/SpawnObjectEffect.cs create mode 100644 ROUNDS/SpawnObjectOnDealDamage.cs create mode 100644 ROUNDS/SpawnObjectOnDealtDamage.cs create mode 100644 ROUNDS/SpawnObjects.cs create mode 100644 ROUNDS/SpawnPoint.cs create mode 100644 ROUNDS/SpawnStaticRemnant.cs create mode 100644 ROUNDS/SpawnedAttack.cs create mode 100644 ROUNDS/SpawnedAttack_ParentPlayer.cs create mode 100644 ROUNDS/Spring.cs create mode 100644 ROUNDS/StandStillTrigger.cs create mode 100644 ROUNDS/StartEvent.cs create mode 100644 ROUNDS/StatsAfterDealingDamage.cs create mode 100644 ROUNDS/StatsWhenFullHP.cs create mode 100644 ROUNDS/SteamManager.cs create mode 100644 ROUNDS/StopRecursion.cs create mode 100644 ROUNDS/StunHandler.cs create mode 100644 ROUNDS/StunPlayer.cs create mode 100644 ROUNDS/SuperBasicController.cs create mode 100644 ROUNDS/SwordArtMove.cs create mode 100644 ROUNDS/TasteOfBlood.cs create mode 100644 ROUNDS/Teleport.cs create mode 100644 ROUNDS/TeleportToOpponent.cs create mode 100644 ROUNDS/TextFlicker.cs create mode 100644 ROUNDS/ThereCanOnlyBeOne.cs create mode 100644 ROUNDS/Thruster.cs create mode 100644 ROUNDS/TickMover.cs create mode 100644 ROUNDS/TimeHandler.cs create mode 100644 ROUNDS/ToggleStats.cs create mode 100644 ROUNDS/ToggleUnparented.cs create mode 100644 ROUNDS/TracerRound.cs create mode 100644 ROUNDS/TracerTarget.cs create mode 100644 ROUNDS/TrickShot.cs create mode 100644 ROUNDS/TwitchAudienceVisualizer.cs create mode 100644 ROUNDS/TwitchChatMessage.cs create mode 100644 ROUNDS/TwitchIrc.cs create mode 100644 ROUNDS/TwitchIrcExample.cs create mode 100644 ROUNDS/TwitchUIHandler.cs create mode 100644 ROUNDS/UIHandler.cs create mode 100644 ROUNDS/UniformModifier.cs create mode 100644 ROUNDS/UnityEngine.UI.ProceduralImage/ModifierID.cs create mode 100644 ROUNDS/UnityEngine.UI.ProceduralImage/ProceduralImage.cs create mode 100644 ROUNDS/UnityEngine.UI.ProceduralImage/ProceduralImageInfo.cs create mode 100644 ROUNDS/UnityEngine.UI.ProceduralImage/ProceduralImageModifier.cs create mode 100644 ROUNDS/Unparent.cs create mode 100644 ROUNDS/UnparentObject.cs create mode 100644 ROUNDS/UnparentOnHit.cs create mode 100644 ROUNDS/UserJoined.cs create mode 100644 ROUNDS/UserLeft.cs create mode 100644 ROUNDS/VelocityStretch.cs create mode 100644 ROUNDS/WallRayCaster.cs create mode 100644 ROUNDS/WasDealtDamageEffect.cs create mode 100644 ROUNDS/WasDealtDamageTrigger.cs create mode 100644 ROUNDS/Weapon.cs create mode 100644 ROUNDS/WeaponHandler.cs create mode 100644 ROUNDS/ZapEffect.cs create mode 100644 ROUNDS/Zip.cs create mode 100644 ROUNDS/Zop.cs create mode 100644 ROUNDS/_Player/CharacterData.cs create mode 100644 ROUNDS/_Player/PlayerCollision.cs create mode 100644 ROUNDS/_Player/PlayerDoJump.cs create mode 100644 ROUNDS/_Player/PlayerFollowGround.cs create mode 100644 ROUNDS/_Player/PlayerJump.cs create mode 100644 ROUNDS/_Player/PlayerMovement.cs create mode 100644 ROUNDS/_Player/PlayerVelocity.cs create mode 100644 ROUNDS/bin/Debug/netstandard2.1/AmplifyColor.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Assembly-CSharp-firstpass.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Assembly-CSharp.deps.json create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Assembly-CSharp.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Assembly-CSharp.pdb create mode 100644 ROUNDS/bin/Debug/netstandard2.1/BitpackersASMDEF.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/ByteConverter.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/EmoCompressUtilsASMDEF.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/FloatCrusher.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/HalFloat.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/HalfFloatASMDEF.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/InControl.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Mono.Security.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Photon3Unity3D.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/PhotonChat.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/PhotonRealtime.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/PhotonUnityNetworking.Demos.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/PhotonUnityNetworking.Utilities.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/PhotonUnityNetworking.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/PhotonWebSocket.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/QuatCompress.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Sirenix.OdinInspector.Attributes.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Sirenix.OdinInspector.CompatibilityLayer.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Sirenix.Serialization.Config.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Sirenix.Serialization.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Sirenix.Utilities.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/SonigonAudioEngine.Runtime.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/System.Configuration.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/System.Diagnostics.StackTrace.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/System.EnterpriseServices.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/System.Globalization.Extensions.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/System.ServiceModel.Internals.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/System.Xml.XPath.XDocument.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Unity.Analytics.DataPrivacy.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Unity.Analytics.StandardEvents.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Unity.Postprocessing.Runtime.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/Unity.TextMeshPro.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.AIModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ARModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.AccessibilityModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.AnimationModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.AssetBundleModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.AudioModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.BaselibModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ClothModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ClusterInputModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ClusterRendererModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.CoreModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.CrashReportingModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.DirectorModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.FileSystemHttpModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.GameCenterModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.GridModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.HotReloadModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.IMGUIModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ImageConversionModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.InputModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.JSONSerializeModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.LocalizationModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.Networking.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ParticleSystemModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.PerformanceReportingModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.Physics2DModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.PhysicsModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ProfilerModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.Purchasing.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.ScreenCaptureModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.SharedInternalsModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.SpatialTracking.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.SpriteMaskModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.SpriteShapeModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.StreamingModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.StyleSheetsModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.SubstanceModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.TLSModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.TerrainModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.TerrainPhysicsModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.TextCoreModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.TextRenderingModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.TilemapModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.Timeline.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.TimelineModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UI.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UIElementsModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UIModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UNETModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UmbraModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityAnalyticsModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityConnectModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityTestProtocolModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityWebRequestAssetBundleModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityWebRequestAudioModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityWebRequestModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityWebRequestTextureModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.UnityWebRequestWWWModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.VFXModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.VRModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.VehiclesModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.VideoModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.WindModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.XRModule.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/UnityEngine.dll create mode 100644 ROUNDS/bin/Debug/netstandard2.1/websocket-sharp.dll create mode 100644 ROUNDS/emotitron.Utilities.Example/BasicController.cs create mode 100644 ROUNDS/emotitron.Utilities.GUIUtilities/ShowIfInterfaceAttribute.cs create mode 100644 ROUNDS/emotitron.Utilities.GUIUtilities/ValueTypeAttribute.cs create mode 100644 ROUNDS/emotitron.Utilities.Networking/AutoDestroyWrongNetLib.cs create mode 100644 ROUNDS/emotitron.Utilities/MarkerNameType.cs create mode 100644 ROUNDS/emotitron.Utilities/MarkerType.cs create mode 100644 ROUNDS/emotitron.Utilities/NameTypeUtils.cs create mode 100644 ROUNDS/emotitron/TestEnum.cs create mode 100644 ROUNDS/emotitron/TestPackObject.cs create mode 100644 ROUNDS/obj/Debug/netstandard2.0/.NETStandard,Version=v2.0.AssemblyAttributes.cs create mode 100644 ROUNDS/obj/Debug/netstandard2.0/ROUNDS.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 ROUNDS/obj/Debug/netstandard2.0/ROUNDS.assets.cache create mode 100644 ROUNDS/obj/Debug/netstandard2.0/ROUNDS.csproj.AssemblyReference.cache create mode 100644 ROUNDS/obj/Debug/netstandard2.0/ROUNDS.csproj.CoreCompileInputs.cache create mode 100644 ROUNDS/obj/Debug/netstandard2.0/ROUNDS.csproj.FileListAbsolute.txt create mode 100644 ROUNDS/obj/Debug/netstandard2.1/.NETStandard,Version=v2.1.AssemblyAttributes.cs create mode 100644 ROUNDS/obj/Debug/netstandard2.1/Assembly-CSharp.dll create mode 100644 ROUNDS/obj/Debug/netstandard2.1/Assembly-CSharp.pdb create mode 100644 ROUNDS/obj/Debug/netstandard2.1/ROUNDS.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 ROUNDS/obj/Debug/netstandard2.1/ROUNDS.assets.cache create mode 100644 ROUNDS/obj/Debug/netstandard2.1/ROUNDS.csproj.AssemblyReference.cache create mode 100644 ROUNDS/obj/Debug/netstandard2.1/ROUNDS.csproj.CopyComplete create mode 100644 ROUNDS/obj/Debug/netstandard2.1/ROUNDS.csproj.CoreCompileInputs.cache create mode 100644 ROUNDS/obj/Debug/netstandard2.1/ROUNDS.csproj.FileListAbsolute.txt create mode 100644 ROUNDS/obj/ROUNDS.csproj.nuget.dgspec.json create mode 100644 ROUNDS/obj/ROUNDS.csproj.nuget.g.props create mode 100644 ROUNDS/obj/ROUNDS.csproj.nuget.g.targets create mode 100644 ROUNDS/obj/project.assets.json create mode 100644 ROUNDS/obj/project.nuget.cache diff --git "a/Doc/ROUNDS\345\210\206\346\236\220.xlsx" "b/Doc/ROUNDS\345\210\206\346\236\220.xlsx" new file mode 100644 index 0000000..36f3d44 Binary files /dev/null and "b/Doc/ROUNDS\345\210\206\346\236\220.xlsx" differ diff --git a/GameCode/AbyssalCountdown.cs b/GameCode/AbyssalCountdown.cs new file mode 100644 index 0000000..062e920 --- /dev/null +++ b/GameCode/AbyssalCountdown.cs @@ -0,0 +1,189 @@ +using System; +using Sonigon; +using UnityEngine; +using UnityEngine.UI.ProceduralImage; + +public class AbyssalCountdown : MonoBehaviour +{ + public SoundEvent soundAbyssalChargeLoop; + + private bool soundChargeIsPlaying; + + private float soundCounterLast; + + private SoundParameterIntensity soundParameterIntensity = new SoundParameterIntensity(0f, UpdateMode.Continuous); + + [Range(0f, 1f)] + public float counter; + + public float timeToFill = 10f; + + public float timeToEmpty = 3f; + + public float duration; + + public float hpMultiplier = 2f; + + public ProceduralImage outerRing; + + public ProceduralImage fill; + + public Transform rotator; + + public Transform still; + + private CharacterData data; + + public GameObject[] abyssalObjects; + + private float remainingDuration; + + private bool isAbyssalForm; + + private float startCounter; + + private void Start() + { + soundCounterLast = counter; + data = GetComponentInParent(); + HealthHandler healthHandler = data.healthHandler; + healthHandler.reviveAction = (Action)Delegate.Combine(healthHandler.reviveAction, new Action(ResetStuff)); + GetComponentInParent().childRPCs.Add("Abyssal", RPCA_Activate); + } + + private void OnDestroy() + { + HealthHandler healthHandler = data.healthHandler; + healthHandler.reviveAction = (Action)Delegate.Combine(healthHandler.reviveAction, new Action(ResetStuff)); + GetComponentInParent().childRPCs.Remove("Abyssal"); + SoundStop(); + } + + private void OnDisable() + { + SoundStop(); + } + + private void SoundPlay() + { + if (!soundChargeIsPlaying) + { + soundChargeIsPlaying = true; + SoundManager.Instance.Play(soundAbyssalChargeLoop, base.transform, soundParameterIntensity); + } + } + + private void SoundStop() + { + if (soundChargeIsPlaying) + { + soundChargeIsPlaying = false; + SoundManager.Instance.Stop(soundAbyssalChargeLoop, base.transform); + } + } + + private void ResetStuff() + { + SoundStop(); + remainingDuration = 0f; + counter = 0f; + if (isAbyssalForm) + { + for (int i = 0; i < abyssalObjects.Length; i++) + { + abyssalObjects[i].gameObject.SetActive(value: false); + } + data.maxHealth /= hpMultiplier; + data.health /= hpMultiplier; + data.stats.ConfigureMassAndSize(); + isAbyssalForm = false; + rotator.gameObject.SetActive(value: false); + still.gameObject.SetActive(value: false); + } + SoundStop(); + } + + private void RPCA_Activate() + { + remainingDuration = duration; + } + + private void Update() + { + if (soundCounterLast < counter) + { + SoundPlay(); + } + else + { + SoundStop(); + } + soundCounterLast = counter; + soundParameterIntensity.intensity = counter; + outerRing.fillAmount = counter; + fill.fillAmount = counter; + rotator.transform.localEulerAngles = new Vector3(0f, 0f, 0f - Mathf.Lerp(0f, 360f, counter)); + if (!data.playerVel.simulated) + { + startCounter = 1f; + return; + } + startCounter -= TimeHandler.deltaTime; + if (startCounter > 0f) + { + return; + } + if (remainingDuration > 0f) + { + if (!isAbyssalForm) + { + for (int i = 0; i < abyssalObjects.Length; i++) + { + abyssalObjects[i].gameObject.SetActive(value: true); + } + data.maxHealth *= hpMultiplier; + data.health *= hpMultiplier; + data.stats.ConfigureMassAndSize(); + isAbyssalForm = true; + } + remainingDuration -= TimeHandler.deltaTime; + counter = remainingDuration / duration; + return; + } + if (isAbyssalForm) + { + for (int j = 0; j < abyssalObjects.Length; j++) + { + abyssalObjects[j].gameObject.SetActive(value: false); + } + data.maxHealth /= hpMultiplier; + data.health /= hpMultiplier; + data.stats.ConfigureMassAndSize(); + isAbyssalForm = false; + } + if (data.input.direction == Vector3.zero || data.input.direction == Vector3.down) + { + counter += TimeHandler.deltaTime / timeToFill; + } + else + { + counter -= TimeHandler.deltaTime / timeToEmpty; + } + counter = Mathf.Clamp(counter, -0.1f / timeToFill, 1f); + if (counter >= 1f && data.view.IsMine) + { + remainingDuration = duration; + GetComponentInParent().CallFunction("Abyssal"); + } + if (counter <= 0f) + { + rotator.gameObject.SetActive(value: false); + still.gameObject.SetActive(value: false); + } + else + { + rotator.gameObject.SetActive(value: true); + still.gameObject.SetActive(value: true); + } + } +} diff --git a/GameCode/Accelerate.cs b/GameCode/Accelerate.cs new file mode 100644 index 0000000..9bc086b --- /dev/null +++ b/GameCode/Accelerate.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +public class Accelerate : MonoBehaviour +{ + private MoveTransform move; + + public float startMultiplier = 0.5f; + + public float acceleratonPerSecond = 2f; + + public float pow = 1f; + + private void Start() + { + move = GetComponentInParent(); + move.multiplier *= startMultiplier; + move.multiplier = Mathf.Clamp(move.multiplier, 0.01f, float.PositiveInfinity); + } + + private void Update() + { + move.multiplier = Mathf.Clamp(move.multiplier + TimeHandler.deltaTime * acceleratonPerSecond * Mathf.Pow(move.multiplier, pow), 0f, 25f); + } +} diff --git a/GameCode/ActivateSciptWhenCanSeeOtherPlayer.cs b/GameCode/ActivateSciptWhenCanSeeOtherPlayer.cs new file mode 100644 index 0000000..5a527fc --- /dev/null +++ b/GameCode/ActivateSciptWhenCanSeeOtherPlayer.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +public class ActivateSciptWhenCanSeeOtherPlayer : MonoBehaviour +{ + public enum Target + { + OtherPlayer, + Closest + } + + public Target target; + + private SpawnedAttack spawned; + + public MonoBehaviour script; + + private void Start() + { + spawned = GetComponentInParent(); + } + + private void Update() + { + Player player = null; + player = ((target != 0) ? PlayerManager.instance.GetClosestPlayer(base.transform.position, needVision: true) : PlayerManager.instance.GetOtherPlayer(spawned.spawner)); + if ((bool)player) + { + if (PlayerManager.instance.CanSeePlayer(base.transform.position, player).canSee) + { + script.enabled = true; + } + else + { + script.enabled = false; + } + } + else + { + script.enabled = false; + } + } +} diff --git a/GameCode/AddShake.cs b/GameCode/AddShake.cs new file mode 100644 index 0000000..227a243 --- /dev/null +++ b/GameCode/AddShake.cs @@ -0,0 +1,25 @@ +using UnityEngine; + +public class AddShake : MonoBehaviour +{ + public Vector2 shake; + + public bool auto = true; + + public bool inheritScale; + + public float max = float.PositiveInfinity; + + private void Start() + { + if (auto) + { + DoShake(); + } + } + + public void DoShake() + { + GamefeelManager.GameFeel(shake * Mathf.Clamp(inheritScale ? base.transform.localScale.x : 1f, 0f, max)); + } +} diff --git a/GameCode/Aim.cs b/GameCode/Aim.cs new file mode 100644 index 0000000..45288a5 --- /dev/null +++ b/GameCode/Aim.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +public class Aim : MonoBehaviour +{ + private GeneralInput input; + + private HoldingObject holdingObject; + + private CharacterData data; + + private Vector3 aimDirection; + + private void Awake() + { + input = GetComponent(); + data = GetComponent(); + holdingObject = GetComponentInChildren(); + } + + private void Update() + { + if ((double)input.aimDirection.magnitude > 0.2) + { + aimDirection = input.aimDirection; + } + if (input.direction.magnitude > 0.2f && Optionshandler.leftStickAim && input.aimDirection == Vector3.zero) + { + aimDirection = input.direction; + } + if ((bool)holdingObject) + { + if (aimDirection != Vector3.zero) + { + holdingObject.transform.rotation = Quaternion.LookRotation(aimDirection); + } + data.aimDirection = aimDirection; + } + } +} diff --git a/GameCode/AimForPlayer.cs b/GameCode/AimForPlayer.cs new file mode 100644 index 0000000..5a9ab24 --- /dev/null +++ b/GameCode/AimForPlayer.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +public class AimForPlayer : MonoBehaviour +{ + public enum Target + { + OtherPlayer, + Closest + } + + public float upOffset; + + public Target target; + + private SpawnedAttack spawned; + + private void Start() + { + spawned = GetComponentInParent(); + } + + private void Update() + { + Player player = null; + player = ((target != 0) ? PlayerManager.instance.GetClosestPlayer(base.transform.position, needVision: true) : PlayerManager.instance.GetOtherPlayer(spawned.spawner)); + if ((bool)player && PlayerManager.instance.CanSeePlayer(base.transform.position, player).canSee) + { + base.transform.rotation = Quaternion.LookRotation(player.transform.position + Vector3.up * Vector3.Distance(player.transform.position, base.transform.position) * 0.1f * upOffset - base.transform.position, Vector3.forward); + } + } +} diff --git a/GameCode/AmplifyColorBase.cs b/GameCode/AmplifyColorBase.cs new file mode 100644 index 0000000..214d0a4 --- /dev/null +++ b/GameCode/AmplifyColorBase.cs @@ -0,0 +1,879 @@ +using System; +using System.Collections.Generic; +using AmplifyColor; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Serialization; + +[AddComponentMenu("")] +public class AmplifyColorBase : MonoBehaviour +{ + public const int LutSize = 32; + + public const int LutWidth = 1024; + + public const int LutHeight = 32; + + private const int DepthCurveLutRange = 1024; + + public Tonemapping Tonemapper; + + public float Exposure = 1f; + + public float LinearWhitePoint = 11.2f; + + [FormerlySerializedAs("UseDithering")] + public bool ApplyDithering; + + public Quality QualityLevel = Quality.Standard; + + public float BlendAmount; + + public Texture LutTexture; + + public Texture LutBlendTexture; + + public Texture MaskTexture; + + public bool UseDepthMask; + + public AnimationCurve DepthMaskCurve = new AnimationCurve(new Keyframe(0f, 1f), new Keyframe(1f, 1f)); + + public bool UseVolumes; + + public float ExitVolumeBlendTime = 1f; + + public Transform TriggerVolumeProxy; + + public LayerMask VolumeCollisionMask = -1; + + private Camera ownerCamera; + + private Shader shaderBase; + + private Shader shaderBlend; + + private Shader shaderBlendCache; + + private Shader shaderMask; + + private Shader shaderMaskBlend; + + private Shader shaderDepthMask; + + private Shader shaderDepthMaskBlend; + + private Shader shaderProcessOnly; + + private RenderTexture blendCacheLut; + + private Texture2D defaultLut; + + private Texture2D depthCurveLut; + + private Color32[] depthCurveColors; + + private ColorSpace colorSpace = ColorSpace.Uninitialized; + + private Quality qualityLevel = Quality.Standard; + + private Material materialBase; + + private Material materialBlend; + + private Material materialBlendCache; + + private Material materialMask; + + private Material materialMaskBlend; + + private Material materialDepthMask; + + private Material materialDepthMaskBlend; + + private Material materialProcessOnly; + + private bool blending; + + private float blendingTime; + + private float blendingTimeCountdown; + + private Action onFinishBlend; + + private AnimationCurve prevDepthMaskCurve = new AnimationCurve(); + + private bool volumesBlending; + + private float volumesBlendingTime; + + private float volumesBlendingTimeCountdown; + + private Texture volumesLutBlendTexture; + + private float volumesBlendAmount; + + private Texture worldLUT; + + private AmplifyColorVolumeBase currentVolumeLut; + + private RenderTexture midBlendLUT; + + private bool blendingFromMidBlend; + + private VolumeEffect worldVolumeEffects; + + private VolumeEffect currentVolumeEffects; + + private VolumeEffect blendVolumeEffects; + + private float worldExposure = 1f; + + private float currentExposure = 1f; + + private float blendExposure = 1f; + + private float effectVolumesBlendAdjust; + + private List enteredVolumes = new List(); + + private AmplifyColorTriggerProxyBase actualTriggerProxy; + + [HideInInspector] + public VolumeEffectFlags EffectFlags = new VolumeEffectFlags(); + + [SerializeField] + [HideInInspector] + private string sharedInstanceID = ""; + + private bool silentError; + + public Texture2D DefaultLut + { + get + { + if (!(defaultLut == null)) + { + return defaultLut; + } + return CreateDefaultLut(); + } + } + + public bool IsBlending => blending; + + private float effectVolumesBlendAdjusted => Mathf.Clamp01((effectVolumesBlendAdjust < 0.99f) ? ((volumesBlendAmount - effectVolumesBlendAdjust) / (1f - effectVolumesBlendAdjust)) : 1f); + + public string SharedInstanceID => sharedInstanceID; + + public bool WillItBlend + { + get + { + if (LutTexture != null && LutBlendTexture != null) + { + return !blending; + } + return false; + } + } + + public void NewSharedInstanceID() + { + sharedInstanceID = Guid.NewGuid().ToString(); + } + + private void ReportMissingShaders() + { + Debug.LogError("[AmplifyColor] Failed to initialize shaders. Please attempt to re-enable the Amplify Color Effect component. If that fails, please reinstall Amplify Color."); + base.enabled = false; + } + + private void ReportNotSupported() + { + Debug.LogError("[AmplifyColor] This image effect is not supported on this platform."); + base.enabled = false; + } + + private bool CheckShader(Shader s) + { + if (s == null) + { + ReportMissingShaders(); + return false; + } + if (!s.isSupported) + { + ReportNotSupported(); + return false; + } + return true; + } + + private bool CheckShaders() + { + if (CheckShader(shaderBase) && CheckShader(shaderBlend) && CheckShader(shaderBlendCache) && CheckShader(shaderMask) && CheckShader(shaderMaskBlend)) + { + return CheckShader(shaderProcessOnly); + } + return false; + } + + private bool CheckSupport() + { + if (!SystemInfo.supportsImageEffects) + { + ReportNotSupported(); + return false; + } + return true; + } + + private void OnEnable() + { + if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null) + { + Debug.LogWarning("[AmplifyColor] Null graphics device detected. Skipping effect silently."); + silentError = true; + } + else if (CheckSupport() && CreateMaterials()) + { + Texture2D texture2D = LutTexture as Texture2D; + Texture2D texture2D2 = LutBlendTexture as Texture2D; + if ((texture2D != null && texture2D.mipmapCount > 1) || (texture2D2 != null && texture2D2.mipmapCount > 1)) + { + Debug.LogError("[AmplifyColor] Please disable \"Generate Mip Maps\" import settings on all LUT textures to avoid visual glitches. Change Texture Type to \"Advanced\" to access Mip settings."); + } + } + } + + private void OnDisable() + { + if (actualTriggerProxy != null) + { + UnityEngine.Object.DestroyImmediate(actualTriggerProxy.gameObject); + actualTriggerProxy = null; + } + ReleaseMaterials(); + ReleaseTextures(); + } + + private void VolumesBlendTo(Texture blendTargetLUT, float blendTimeInSec) + { + volumesLutBlendTexture = blendTargetLUT; + volumesBlendAmount = 0f; + volumesBlendingTime = blendTimeInSec; + volumesBlendingTimeCountdown = blendTimeInSec; + volumesBlending = true; + } + + public void BlendTo(Texture blendTargetLUT, float blendTimeInSec, Action onFinishBlend) + { + LutBlendTexture = blendTargetLUT; + BlendAmount = 0f; + this.onFinishBlend = onFinishBlend; + blendingTime = blendTimeInSec; + blendingTimeCountdown = blendTimeInSec; + blending = true; + } + + private void CheckCamera() + { + if (ownerCamera == null) + { + ownerCamera = GetComponent(); + } + if (UseDepthMask && (ownerCamera.depthTextureMode & DepthTextureMode.Depth) == 0) + { + ownerCamera.depthTextureMode |= DepthTextureMode.Depth; + } + } + + private void Start() + { + if (!silentError) + { + CheckCamera(); + worldLUT = LutTexture; + worldVolumeEffects = EffectFlags.GenerateEffectData(this); + blendVolumeEffects = (currentVolumeEffects = worldVolumeEffects); + worldExposure = Exposure; + blendExposure = (currentExposure = worldExposure); + } + } + + private void Update() + { + if (silentError) + { + return; + } + CheckCamera(); + bool flag = false; + if (volumesBlending) + { + volumesBlendAmount = (volumesBlendingTime - volumesBlendingTimeCountdown) / volumesBlendingTime; + volumesBlendingTimeCountdown -= Time.smoothDeltaTime; + if (volumesBlendAmount >= 1f) + { + volumesBlendAmount = 1f; + flag = true; + } + } + else + { + volumesBlendAmount = Mathf.Clamp01(volumesBlendAmount); + } + if (blending) + { + BlendAmount = (blendingTime - blendingTimeCountdown) / blendingTime; + blendingTimeCountdown -= Time.smoothDeltaTime; + if (BlendAmount >= 1f) + { + LutTexture = LutBlendTexture; + BlendAmount = 0f; + blending = false; + LutBlendTexture = null; + if (onFinishBlend != null) + { + onFinishBlend(); + } + } + } + else + { + BlendAmount = Mathf.Clamp01(BlendAmount); + } + if (UseVolumes) + { + if (actualTriggerProxy == null) + { + GameObject gameObject = new GameObject(base.name + "+ACVolumeProxy") + { + hideFlags = HideFlags.HideAndDontSave + }; + if (TriggerVolumeProxy != null && TriggerVolumeProxy.GetComponent() != null) + { + actualTriggerProxy = gameObject.AddComponent(); + } + else + { + actualTriggerProxy = gameObject.AddComponent(); + } + actualTriggerProxy.OwnerEffect = this; + } + UpdateVolumes(); + } + else if (actualTriggerProxy != null) + { + UnityEngine.Object.DestroyImmediate(actualTriggerProxy.gameObject); + actualTriggerProxy = null; + } + if (flag) + { + LutTexture = volumesLutBlendTexture; + volumesBlendAmount = 0f; + volumesBlending = false; + volumesLutBlendTexture = null; + effectVolumesBlendAdjust = 0f; + currentVolumeEffects = blendVolumeEffects; + currentVolumeEffects.SetValues(this); + currentExposure = blendExposure; + if (blendingFromMidBlend && midBlendLUT != null) + { + midBlendLUT.DiscardContents(); + } + blendingFromMidBlend = false; + } + } + + public void EnterVolume(AmplifyColorVolumeBase volume) + { + if (!enteredVolumes.Contains(volume)) + { + enteredVolumes.Insert(0, volume); + } + } + + public void ExitVolume(AmplifyColorVolumeBase volume) + { + if (enteredVolumes.Contains(volume)) + { + enteredVolumes.Remove(volume); + } + } + + private void UpdateVolumes() + { + if (volumesBlending) + { + currentVolumeEffects.BlendValues(this, blendVolumeEffects, effectVolumesBlendAdjusted); + } + if (volumesBlending) + { + Exposure = Mathf.Lerp(currentExposure, blendExposure, effectVolumesBlendAdjusted); + } + Transform transform = ((TriggerVolumeProxy == null) ? base.transform : TriggerVolumeProxy); + if (actualTriggerProxy.transform.parent != transform) + { + actualTriggerProxy.Reference = transform; + actualTriggerProxy.gameObject.layer = transform.gameObject.layer; + } + AmplifyColorVolumeBase amplifyColorVolumeBase = null; + int num = int.MinValue; + for (int i = 0; i < enteredVolumes.Count; i++) + { + AmplifyColorVolumeBase amplifyColorVolumeBase2 = enteredVolumes[i]; + if (amplifyColorVolumeBase2.Priority > num) + { + amplifyColorVolumeBase = amplifyColorVolumeBase2; + num = amplifyColorVolumeBase2.Priority; + } + } + if (!(amplifyColorVolumeBase != currentVolumeLut)) + { + return; + } + currentVolumeLut = amplifyColorVolumeBase; + Texture texture = ((amplifyColorVolumeBase == null) ? worldLUT : amplifyColorVolumeBase.LutTexture); + float num2 = ((amplifyColorVolumeBase == null) ? ExitVolumeBlendTime : amplifyColorVolumeBase.EnterBlendTime); + if (volumesBlending && !blendingFromMidBlend && texture == LutTexture) + { + LutTexture = volumesLutBlendTexture; + volumesLutBlendTexture = texture; + volumesBlendingTimeCountdown = num2 * ((volumesBlendingTime - volumesBlendingTimeCountdown) / volumesBlendingTime); + volumesBlendingTime = num2; + currentVolumeEffects = VolumeEffect.BlendValuesToVolumeEffect(EffectFlags, currentVolumeEffects, blendVolumeEffects, effectVolumesBlendAdjusted); + currentExposure = Mathf.Lerp(currentExposure, blendExposure, effectVolumesBlendAdjusted); + effectVolumesBlendAdjust = 1f - volumesBlendAmount; + volumesBlendAmount = 1f - volumesBlendAmount; + } + else + { + if (volumesBlending) + { + materialBlendCache.SetFloat("_LerpAmount", volumesBlendAmount); + if (blendingFromMidBlend) + { + Graphics.Blit(midBlendLUT, blendCacheLut); + materialBlendCache.SetTexture("_RgbTex", blendCacheLut); + } + else + { + materialBlendCache.SetTexture("_RgbTex", LutTexture); + } + materialBlendCache.SetTexture("_LerpRgbTex", (volumesLutBlendTexture != null) ? volumesLutBlendTexture : defaultLut); + Graphics.Blit(midBlendLUT, midBlendLUT, materialBlendCache); + blendCacheLut.DiscardContents(); + currentVolumeEffects = VolumeEffect.BlendValuesToVolumeEffect(EffectFlags, currentVolumeEffects, blendVolumeEffects, effectVolumesBlendAdjusted); + currentExposure = Mathf.Lerp(currentExposure, blendExposure, effectVolumesBlendAdjusted); + effectVolumesBlendAdjust = 0f; + blendingFromMidBlend = true; + } + VolumesBlendTo(texture, num2); + } + blendVolumeEffects = ((amplifyColorVolumeBase == null) ? worldVolumeEffects : amplifyColorVolumeBase.EffectContainer.FindVolumeEffect(this)); + blendExposure = ((amplifyColorVolumeBase == null) ? worldExposure : amplifyColorVolumeBase.Exposure); + if (blendVolumeEffects == null) + { + blendVolumeEffects = worldVolumeEffects; + } + } + + private void SetupShader() + { + colorSpace = QualitySettings.activeColorSpace; + qualityLevel = QualityLevel; + shaderBase = Shader.Find("Hidden/Amplify Color/Base"); + shaderBlend = Shader.Find("Hidden/Amplify Color/Blend"); + shaderBlendCache = Shader.Find("Hidden/Amplify Color/BlendCache"); + shaderMask = Shader.Find("Hidden/Amplify Color/Mask"); + shaderMaskBlend = Shader.Find("Hidden/Amplify Color/MaskBlend"); + shaderDepthMask = Shader.Find("Hidden/Amplify Color/DepthMask"); + shaderDepthMaskBlend = Shader.Find("Hidden/Amplify Color/DepthMaskBlend"); + shaderProcessOnly = Shader.Find("Hidden/Amplify Color/ProcessOnly"); + } + + private void ReleaseMaterials() + { + SafeRelease(ref materialBase); + SafeRelease(ref materialBlend); + SafeRelease(ref materialBlendCache); + SafeRelease(ref materialMask); + SafeRelease(ref materialMaskBlend); + SafeRelease(ref materialDepthMask); + SafeRelease(ref materialDepthMaskBlend); + SafeRelease(ref materialProcessOnly); + } + + private Texture2D CreateDefaultLut() + { + defaultLut = new Texture2D(1024, 32, TextureFormat.RGB24, mipChain: false, linear: true) + { + hideFlags = HideFlags.HideAndDontSave + }; + defaultLut.name = "DefaultLut"; + defaultLut.hideFlags = HideFlags.DontSave; + defaultLut.anisoLevel = 1; + defaultLut.filterMode = FilterMode.Bilinear; + Color32[] array = new Color32[32768]; + for (int i = 0; i < 32; i++) + { + int num = i * 32; + for (int j = 0; j < 32; j++) + { + int num2 = num + j * 1024; + for (int k = 0; k < 32; k++) + { + float num3 = (float)k / 31f; + float num4 = (float)j / 31f; + float num5 = (float)i / 31f; + byte r = (byte)(num3 * 255f); + byte g = (byte)(num4 * 255f); + byte b = (byte)(num5 * 255f); + array[num2 + k] = new Color32(r, g, b, byte.MaxValue); + } + } + } + defaultLut.SetPixels32(array); + defaultLut.Apply(); + return defaultLut; + } + + private Texture2D CreateDepthCurveLut() + { + SafeRelease(ref depthCurveLut); + depthCurveLut = new Texture2D(1024, 1, TextureFormat.Alpha8, mipChain: false, linear: true) + { + hideFlags = HideFlags.HideAndDontSave + }; + depthCurveLut.name = "DepthCurveLut"; + depthCurveLut.hideFlags = HideFlags.DontSave; + depthCurveLut.anisoLevel = 1; + depthCurveLut.wrapMode = TextureWrapMode.Clamp; + depthCurveLut.filterMode = FilterMode.Bilinear; + depthCurveColors = new Color32[1024]; + return depthCurveLut; + } + + private void UpdateDepthCurveLut() + { + if (depthCurveLut == null) + { + CreateDepthCurveLut(); + } + float num = 0f; + int num2 = 0; + while (num2 < 1024) + { + depthCurveColors[num2].a = (byte)Mathf.FloorToInt(Mathf.Clamp01(DepthMaskCurve.Evaluate(num)) * 255f); + num2++; + num += 0.0009775171f; + } + depthCurveLut.SetPixels32(depthCurveColors); + depthCurveLut.Apply(); + } + + private void CheckUpdateDepthCurveLut() + { + bool flag = false; + if (DepthMaskCurve.length != prevDepthMaskCurve.length) + { + flag = true; + } + else + { + float num = 0f; + int num2 = 0; + while (num2 < DepthMaskCurve.length) + { + if (Mathf.Abs(DepthMaskCurve.Evaluate(num) - prevDepthMaskCurve.Evaluate(num)) > float.Epsilon) + { + flag = true; + break; + } + num2++; + num += 0.0009775171f; + } + } + if (depthCurveLut == null || flag) + { + UpdateDepthCurveLut(); + prevDepthMaskCurve = new AnimationCurve(DepthMaskCurve.keys); + } + } + + private void CreateHelperTextures() + { + ReleaseTextures(); + blendCacheLut = new RenderTexture(1024, 32, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear) + { + hideFlags = HideFlags.HideAndDontSave + }; + blendCacheLut.name = "BlendCacheLut"; + blendCacheLut.wrapMode = TextureWrapMode.Clamp; + blendCacheLut.useMipMap = false; + blendCacheLut.anisoLevel = 0; + blendCacheLut.Create(); + midBlendLUT = new RenderTexture(1024, 32, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear) + { + hideFlags = HideFlags.HideAndDontSave + }; + midBlendLUT.name = "MidBlendLut"; + midBlendLUT.wrapMode = TextureWrapMode.Clamp; + midBlendLUT.useMipMap = false; + midBlendLUT.anisoLevel = 0; + midBlendLUT.Create(); + CreateDefaultLut(); + if (UseDepthMask) + { + CreateDepthCurveLut(); + } + } + + private bool CheckMaterialAndShader(Material material, string name) + { + if (material == null || material.shader == null) + { + Debug.LogWarning("[AmplifyColor] Error creating " + name + " material. Effect disabled."); + base.enabled = false; + } + else if (!material.shader.isSupported) + { + Debug.LogWarning("[AmplifyColor] " + name + " shader not supported on this platform. Effect disabled."); + base.enabled = false; + } + else + { + material.hideFlags = HideFlags.HideAndDontSave; + } + return base.enabled; + } + + private bool CreateMaterials() + { + SetupShader(); + if (!CheckShaders()) + { + return false; + } + ReleaseMaterials(); + materialBase = new Material(shaderBase); + materialBlend = new Material(shaderBlend); + materialBlendCache = new Material(shaderBlendCache); + materialMask = new Material(shaderMask); + materialMaskBlend = new Material(shaderMaskBlend); + materialDepthMask = new Material(shaderDepthMask); + materialDepthMaskBlend = new Material(shaderDepthMaskBlend); + materialProcessOnly = new Material(shaderProcessOnly); + if (1 == 0 || !CheckMaterialAndShader(materialBase, "BaseMaterial") || !CheckMaterialAndShader(materialBlend, "BlendMaterial") || !CheckMaterialAndShader(materialBlendCache, "BlendCacheMaterial") || !CheckMaterialAndShader(materialMask, "MaskMaterial") || !CheckMaterialAndShader(materialMaskBlend, "MaskBlendMaterial") || !CheckMaterialAndShader(materialDepthMask, "DepthMaskMaterial") || !CheckMaterialAndShader(materialDepthMaskBlend, "DepthMaskBlendMaterial") || !CheckMaterialAndShader(materialProcessOnly, "ProcessOnlyMaterial")) + { + return false; + } + CreateHelperTextures(); + return true; + } + + private void SetMaterialKeyword(string keyword, bool state) + { + bool flag = materialBase.IsKeywordEnabled(keyword); + if (state && !flag) + { + materialBase.EnableKeyword(keyword); + materialBlend.EnableKeyword(keyword); + materialBlendCache.EnableKeyword(keyword); + materialMask.EnableKeyword(keyword); + materialMaskBlend.EnableKeyword(keyword); + materialDepthMask.EnableKeyword(keyword); + materialDepthMaskBlend.EnableKeyword(keyword); + materialProcessOnly.EnableKeyword(keyword); + } + else if (!state && materialBase.IsKeywordEnabled(keyword)) + { + materialBase.DisableKeyword(keyword); + materialBlend.DisableKeyword(keyword); + materialBlendCache.DisableKeyword(keyword); + materialMask.DisableKeyword(keyword); + materialMaskBlend.DisableKeyword(keyword); + materialDepthMask.DisableKeyword(keyword); + materialDepthMaskBlend.DisableKeyword(keyword); + materialProcessOnly.DisableKeyword(keyword); + } + } + + private void SafeRelease(ref T obj) where T : UnityEngine.Object + { + if ((UnityEngine.Object)obj != (UnityEngine.Object)null) + { + if (obj.GetType() == typeof(RenderTexture)) + { + (obj as RenderTexture).Release(); + } + UnityEngine.Object.DestroyImmediate(obj); + obj = null; + } + } + + private void ReleaseTextures() + { + RenderTexture.active = null; + SafeRelease(ref blendCacheLut); + SafeRelease(ref midBlendLUT); + SafeRelease(ref defaultLut); + SafeRelease(ref depthCurveLut); + } + + public static bool ValidateLutDimensions(Texture lut) + { + bool result = true; + if (lut != null) + { + if (lut.width / lut.height != lut.height) + { + Debug.LogWarning("[AmplifyColor] Lut " + lut.name + " has invalid dimensions."); + result = false; + } + else if (lut.anisoLevel != 0) + { + lut.anisoLevel = 0; + } + } + return result; + } + + private void UpdatePostEffectParams() + { + if (UseDepthMask) + { + CheckUpdateDepthCurveLut(); + } + Exposure = Mathf.Max(Exposure, 0f); + } + + private int ComputeShaderPass() + { + bool flag = QualityLevel == Quality.Mobile; + bool flag2 = colorSpace == ColorSpace.Linear; + bool allowHDR = ownerCamera.allowHDR; + int num = (flag ? 18 : 0); + if (allowHDR) + { + num += 2; + num += (flag2 ? 8 : 0); + num += (ApplyDithering ? 4 : 0); + return (int)(num + Tonemapper); + } + return num + (flag2 ? 1 : 0); + } + + private void OnRenderImage(RenderTexture source, RenderTexture destination) + { + if (silentError) + { + Graphics.Blit(source, destination); + return; + } + BlendAmount = Mathf.Clamp01(BlendAmount); + if (colorSpace != QualitySettings.activeColorSpace || qualityLevel != QualityLevel) + { + CreateMaterials(); + } + UpdatePostEffectParams(); + bool num = ValidateLutDimensions(LutTexture); + bool flag = ValidateLutDimensions(LutBlendTexture); + bool flag2 = LutTexture == null && LutBlendTexture == null && volumesLutBlendTexture == null; + Texture texture = ((LutTexture == null) ? defaultLut : LutTexture); + Texture lutBlendTexture = LutBlendTexture; + int pass = ComputeShaderPass(); + bool flag3 = BlendAmount != 0f || blending; + bool flag4 = flag3 || (flag3 && lutBlendTexture != null); + bool flag5 = flag4; + bool num2 = !num || !flag || flag2; + Material material = (num2 ? materialProcessOnly : ((flag4 || volumesBlending) ? ((!UseDepthMask) ? ((MaskTexture != null) ? materialMaskBlend : materialBlend) : materialDepthMaskBlend) : ((!UseDepthMask) ? ((MaskTexture != null) ? materialMask : materialBase) : materialDepthMask))); + material.SetFloat("_Exposure", Exposure); + material.SetFloat("_ShoulderStrength", 0.22f); + material.SetFloat("_LinearStrength", 0.3f); + material.SetFloat("_LinearAngle", 0.1f); + material.SetFloat("_ToeStrength", 0.2f); + material.SetFloat("_ToeNumerator", 0.01f); + material.SetFloat("_ToeDenominator", 0.3f); + material.SetFloat("_LinearWhite", LinearWhitePoint); + material.SetFloat("_LerpAmount", BlendAmount); + if (MaskTexture != null) + { + material.SetTexture("_MaskTex", MaskTexture); + } + if (UseDepthMask) + { + material.SetTexture("_DepthCurveLut", depthCurveLut); + } + if (MaskTexture != null && source.dimension == TextureDimension.Tex2DArray) + { + material.SetVector("_StereoScale", new Vector4(0.5f, 1f, 0.5f, 0f)); + } + else + { + material.SetVector("_StereoScale", new Vector4(1f, 1f, 0f, 0f)); + } + if (!num2) + { + if (volumesBlending) + { + volumesBlendAmount = Mathf.Clamp01(volumesBlendAmount); + materialBlendCache.SetFloat("_LerpAmount", volumesBlendAmount); + if (blendingFromMidBlend) + { + materialBlendCache.SetTexture("_RgbTex", midBlendLUT); + } + else + { + materialBlendCache.SetTexture("_RgbTex", texture); + } + materialBlendCache.SetTexture("_LerpRgbTex", (volumesLutBlendTexture != null) ? volumesLutBlendTexture : defaultLut); + Graphics.Blit(texture, blendCacheLut, materialBlendCache); + } + if (flag5) + { + materialBlendCache.SetFloat("_LerpAmount", BlendAmount); + RenderTexture renderTexture = null; + if (volumesBlending) + { + renderTexture = RenderTexture.GetTemporary(blendCacheLut.width, blendCacheLut.height, blendCacheLut.depth, blendCacheLut.format, RenderTextureReadWrite.Linear); + Graphics.Blit(blendCacheLut, renderTexture); + materialBlendCache.SetTexture("_RgbTex", renderTexture); + } + else + { + materialBlendCache.SetTexture("_RgbTex", texture); + } + materialBlendCache.SetTexture("_LerpRgbTex", (lutBlendTexture != null) ? lutBlendTexture : defaultLut); + Graphics.Blit(texture, blendCacheLut, materialBlendCache); + if (renderTexture != null) + { + RenderTexture.ReleaseTemporary(renderTexture); + } + material.SetTexture("_RgbBlendCacheTex", blendCacheLut); + } + else if (volumesBlending) + { + material.SetTexture("_RgbBlendCacheTex", blendCacheLut); + } + else + { + if (texture != null) + { + material.SetTexture("_RgbTex", texture); + } + if (lutBlendTexture != null) + { + material.SetTexture("_LerpRgbTex", lutBlendTexture); + } + } + } + Graphics.Blit(source, destination, material, pass); + if (flag5 || volumesBlending) + { + blendCacheLut.DiscardContents(); + } + } +} diff --git a/GameCode/AmplifyColorEffect.cs b/GameCode/AmplifyColorEffect.cs new file mode 100644 index 0000000..ca37822 --- /dev/null +++ b/GameCode/AmplifyColorEffect.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +[ImageEffectAllowedInSceneView] +[ImageEffectTransformsToLDR] +[ExecuteInEditMode] +[AddComponentMenu("Image Effects/Amplify Color")] +public sealed class AmplifyColorEffect : AmplifyColorBase +{ +} diff --git a/GameCode/AmplifyColorRenderMask.cs b/GameCode/AmplifyColorRenderMask.cs new file mode 100644 index 0000000..8890a0e --- /dev/null +++ b/GameCode/AmplifyColorRenderMask.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +[ExecuteInEditMode] +[RequireComponent(typeof(Camera))] +[RequireComponent(typeof(AmplifyColorEffect))] +[AddComponentMenu("Image Effects/Amplify Color Render Mask")] +public class AmplifyColorRenderMask : AmplifyColorRenderMaskBase +{ +} diff --git a/GameCode/AmplifyColorRenderMaskBase.cs b/GameCode/AmplifyColorRenderMaskBase.cs new file mode 100644 index 0000000..589c64a --- /dev/null +++ b/GameCode/AmplifyColorRenderMaskBase.cs @@ -0,0 +1,174 @@ +using AmplifyColor; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.XR; + +[ExecuteInEditMode] +[RequireComponent(typeof(Camera))] +[AddComponentMenu("")] +public class AmplifyColorRenderMaskBase : MonoBehaviour +{ + [FormerlySerializedAs("clearColor")] + public Color ClearColor = Color.black; + + [FormerlySerializedAs("renderLayers")] + public RenderLayer[] RenderLayers = new RenderLayer[0]; + + [FormerlySerializedAs("debug")] + public bool DebugMask; + + private Camera referenceCamera; + + private Camera maskCamera; + + private AmplifyColorBase colorEffect; + + private int width; + + private int height; + + private RenderTexture maskTexture; + + private Shader colorMaskShader; + + private bool singlePassStereo; + + private void OnEnable() + { + if (maskCamera == null) + { + GameObject gameObject = new GameObject("Mask Camera", typeof(Camera)) + { + hideFlags = HideFlags.HideAndDontSave + }; + gameObject.transform.parent = base.gameObject.transform; + maskCamera = gameObject.GetComponent(); + } + referenceCamera = GetComponent(); + colorEffect = GetComponent(); + colorMaskShader = Shader.Find("Hidden/RenderMask"); + } + + private void OnDisable() + { + DestroyCamera(); + DestroyRenderTextures(); + } + + private void DestroyCamera() + { + if (maskCamera != null) + { + Object.DestroyImmediate(maskCamera.gameObject); + maskCamera = null; + } + } + + private void DestroyRenderTextures() + { + if (maskTexture != null) + { + RenderTexture.active = null; + Object.DestroyImmediate(maskTexture); + maskTexture = null; + } + } + + private void UpdateRenderTextures(bool singlePassStereo) + { + int num = referenceCamera.pixelWidth; + int num2 = referenceCamera.pixelHeight; + if (maskTexture == null || width != num || height != num2 || !maskTexture.IsCreated() || this.singlePassStereo != singlePassStereo) + { + width = num; + height = num2; + DestroyRenderTextures(); + if (XRSettings.enabled) + { + num = XRSettings.eyeTextureWidth * ((!singlePassStereo) ? 1 : 2); + num2 = XRSettings.eyeTextureHeight; + } + if (maskTexture == null) + { + maskTexture = new RenderTexture(num, num2, 24, RenderTextureFormat.Default, RenderTextureReadWrite.sRGB) + { + hideFlags = HideFlags.HideAndDontSave, + name = "MaskTexture" + }; + maskTexture.name = "AmplifyColorMaskTexture"; + bool allowMSAA = maskCamera.allowMSAA; + maskTexture.antiAliasing = ((!allowMSAA || QualitySettings.antiAliasing <= 0) ? 1 : QualitySettings.antiAliasing); + } + maskTexture.Create(); + this.singlePassStereo = singlePassStereo; + } + if (colorEffect != null) + { + colorEffect.MaskTexture = maskTexture; + } + } + + private void UpdateCameraProperties() + { + maskCamera.CopyFrom(referenceCamera); + maskCamera.targetTexture = maskTexture; + maskCamera.clearFlags = CameraClearFlags.Nothing; + maskCamera.renderingPath = RenderingPath.VertexLit; + maskCamera.pixelRect = new Rect(0f, 0f, width, height); + maskCamera.depthTextureMode = DepthTextureMode.None; + maskCamera.allowHDR = false; + maskCamera.enabled = false; + } + + private void OnPreRender() + { + if (!(maskCamera != null)) + { + return; + } + RenderBuffer activeColorBuffer = Graphics.activeColorBuffer; + RenderBuffer activeDepthBuffer = Graphics.activeDepthBuffer; + bool flag = false; + if (referenceCamera.stereoEnabled) + { + flag = XRSettings.eyeTextureDesc.vrUsage == VRTextureUsage.TwoEyes; + maskCamera.SetStereoViewMatrix(Camera.StereoscopicEye.Left, referenceCamera.GetStereoViewMatrix(Camera.StereoscopicEye.Left)); + maskCamera.SetStereoViewMatrix(Camera.StereoscopicEye.Right, referenceCamera.GetStereoViewMatrix(Camera.StereoscopicEye.Right)); + maskCamera.SetStereoProjectionMatrix(Camera.StereoscopicEye.Left, referenceCamera.GetStereoProjectionMatrix(Camera.StereoscopicEye.Left)); + maskCamera.SetStereoProjectionMatrix(Camera.StereoscopicEye.Right, referenceCamera.GetStereoProjectionMatrix(Camera.StereoscopicEye.Right)); + } + UpdateRenderTextures(flag); + UpdateCameraProperties(); + Graphics.SetRenderTarget(maskTexture); + GL.Clear(clearDepth: true, clearColor: true, ClearColor); + if (flag) + { + maskCamera.worldToCameraMatrix = referenceCamera.GetStereoViewMatrix(Camera.StereoscopicEye.Left); + maskCamera.projectionMatrix = referenceCamera.GetStereoProjectionMatrix(Camera.StereoscopicEye.Left); + maskCamera.rect = new Rect(0f, 0f, 0.5f, 1f); + } + RenderLayer[] renderLayers = RenderLayers; + for (int i = 0; i < renderLayers.Length; i++) + { + RenderLayer renderLayer = renderLayers[i]; + Shader.SetGlobalColor("_COLORMASK_Color", renderLayer.color); + maskCamera.cullingMask = renderLayer.mask; + maskCamera.RenderWithShader(colorMaskShader, "RenderType"); + } + if (flag) + { + maskCamera.worldToCameraMatrix = referenceCamera.GetStereoViewMatrix(Camera.StereoscopicEye.Right); + maskCamera.projectionMatrix = referenceCamera.GetStereoProjectionMatrix(Camera.StereoscopicEye.Right); + maskCamera.rect = new Rect(0.5f, 0f, 0.5f, 1f); + renderLayers = RenderLayers; + for (int i = 0; i < renderLayers.Length; i++) + { + RenderLayer renderLayer2 = renderLayers[i]; + Shader.SetGlobalColor("_COLORMASK_Color", renderLayer2.color); + maskCamera.cullingMask = renderLayer2.mask; + maskCamera.RenderWithShader(colorMaskShader, "RenderType"); + } + } + Graphics.SetRenderTarget(activeColorBuffer, activeDepthBuffer); + } +} diff --git a/GameCode/AmplifyColorTriggerProxy.cs b/GameCode/AmplifyColorTriggerProxy.cs new file mode 100644 index 0000000..916f8f1 --- /dev/null +++ b/GameCode/AmplifyColorTriggerProxy.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +[RequireComponent(typeof(Rigidbody))] +[RequireComponent(typeof(SphereCollider))] +[AddComponentMenu("")] +public class AmplifyColorTriggerProxy : AmplifyColorTriggerProxyBase +{ + private SphereCollider sphereCollider; + + private Rigidbody rigidBody; + + private void Start() + { + sphereCollider = GetComponent(); + sphereCollider.radius = 0.01f; + sphereCollider.isTrigger = true; + rigidBody = GetComponent(); + rigidBody.useGravity = false; + rigidBody.isKinematic = true; + } + + private void LateUpdate() + { + base.transform.position = Reference.position; + base.transform.rotation = Reference.rotation; + } +} diff --git a/GameCode/AmplifyColorTriggerProxy2D.cs b/GameCode/AmplifyColorTriggerProxy2D.cs new file mode 100644 index 0000000..c4bc606 --- /dev/null +++ b/GameCode/AmplifyColorTriggerProxy2D.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +[RequireComponent(typeof(Rigidbody2D))] +[RequireComponent(typeof(CircleCollider2D))] +[AddComponentMenu("")] +public class AmplifyColorTriggerProxy2D : AmplifyColorTriggerProxyBase +{ + private CircleCollider2D circleCollider; + + private Rigidbody2D rigidBody; + + private void Start() + { + circleCollider = GetComponent(); + circleCollider.radius = 0.01f; + circleCollider.isTrigger = true; + rigidBody = GetComponent(); + rigidBody.gravityScale = 0f; + rigidBody.isKinematic = true; + } + + private void LateUpdate() + { + base.transform.position = Reference.position; + base.transform.rotation = Reference.rotation; + } +} diff --git a/GameCode/AmplifyColorTriggerProxyBase.cs b/GameCode/AmplifyColorTriggerProxyBase.cs new file mode 100644 index 0000000..efb1cac --- /dev/null +++ b/GameCode/AmplifyColorTriggerProxyBase.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +[AddComponentMenu("")] +public class AmplifyColorTriggerProxyBase : MonoBehaviour +{ + public Transform Reference; + + public AmplifyColorBase OwnerEffect; +} diff --git a/GameCode/AmplifyColorVolume.cs b/GameCode/AmplifyColorVolume.cs new file mode 100644 index 0000000..e616e57 --- /dev/null +++ b/GameCode/AmplifyColorVolume.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +[RequireComponent(typeof(BoxCollider))] +[AddComponentMenu("Image Effects/Amplify Color Volume")] +public class AmplifyColorVolume : AmplifyColorVolumeBase +{ + private void OnTriggerEnter(Collider other) + { + AmplifyColorTriggerProxy component = other.GetComponent(); + if (component != null && component.OwnerEffect.UseVolumes && ((int)component.OwnerEffect.VolumeCollisionMask & (1 << base.gameObject.layer)) != 0) + { + component.OwnerEffect.EnterVolume(this); + } + } + + private void OnTriggerExit(Collider other) + { + AmplifyColorTriggerProxy component = other.GetComponent(); + if (component != null && component.OwnerEffect.UseVolumes && ((int)component.OwnerEffect.VolumeCollisionMask & (1 << base.gameObject.layer)) != 0) + { + component.OwnerEffect.ExitVolume(this); + } + } +} diff --git a/GameCode/AmplifyColorVolume2D.cs b/GameCode/AmplifyColorVolume2D.cs new file mode 100644 index 0000000..3dd0bbd --- /dev/null +++ b/GameCode/AmplifyColorVolume2D.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +[RequireComponent(typeof(BoxCollider2D))] +[AddComponentMenu("Image Effects/Amplify Color Volume 2D")] +public class AmplifyColorVolume2D : AmplifyColorVolumeBase +{ + private void OnTriggerEnter2D(Collider2D other) + { + AmplifyColorTriggerProxy2D component = other.GetComponent(); + if (component != null && component.OwnerEffect.UseVolumes && ((int)component.OwnerEffect.VolumeCollisionMask & (1 << base.gameObject.layer)) != 0) + { + component.OwnerEffect.EnterVolume(this); + } + } + + private void OnTriggerExit2D(Collider2D other) + { + AmplifyColorTriggerProxy2D component = other.GetComponent(); + if (component != null && component.OwnerEffect.UseVolumes && ((int)component.OwnerEffect.VolumeCollisionMask & (1 << base.gameObject.layer)) != 0) + { + component.OwnerEffect.ExitVolume(this); + } + } +} diff --git a/GameCode/AmplifyColorVolumeBase.cs b/GameCode/AmplifyColorVolumeBase.cs new file mode 100644 index 0000000..b241f7f --- /dev/null +++ b/GameCode/AmplifyColorVolumeBase.cs @@ -0,0 +1,74 @@ +using AmplifyColor; +using UnityEngine; + +[ExecuteInEditMode] +[AddComponentMenu("")] +public class AmplifyColorVolumeBase : MonoBehaviour +{ + public Texture2D LutTexture; + + public float Exposure = 1f; + + public float EnterBlendTime = 1f; + + public int Priority; + + public bool ShowInSceneView = true; + + [HideInInspector] + public VolumeEffectContainer EffectContainer = new VolumeEffectContainer(); + + private void OnDrawGizmos() + { + if (!ShowInSceneView) + { + return; + } + BoxCollider component = GetComponent(); + BoxCollider2D component2 = GetComponent(); + if (component != null || component2 != null) + { + Vector3 center; + Vector3 size; + if (component != null) + { + center = component.center; + size = component.size; + } + else + { + center = component2.offset; + size = component2.size; + } + Gizmos.color = Color.green; + Gizmos.matrix = base.transform.localToWorldMatrix; + Gizmos.DrawWireCube(center, size); + } + } + + private void OnDrawGizmosSelected() + { + BoxCollider component = GetComponent(); + BoxCollider2D component2 = GetComponent(); + if (component != null || component2 != null) + { + Color green = Color.green; + green.a = 0.2f; + Gizmos.color = green; + Gizmos.matrix = base.transform.localToWorldMatrix; + Vector3 center; + Vector3 size; + if (component != null) + { + center = component.center; + size = component.size; + } + else + { + center = component2.offset; + size = component2.size; + } + Gizmos.DrawCube(center, size); + } + } +} diff --git a/GameCode/ApplyCardStats.cs b/GameCode/ApplyCardStats.cs new file mode 100644 index 0000000..378db39 --- /dev/null +++ b/GameCode/ApplyCardStats.cs @@ -0,0 +1,305 @@ +using System.Collections.Generic; +using Photon.Pun; +using UnityEngine; + +public class ApplyCardStats : MonoBehaviour +{ + private Gun myGunStats; + + private CharacterStatModifiers myPlayerStats; + + private Block myBlock; + + private Player playerToUpgrade; + + private CardAudioModifier cardAudio; + + private bool done; + + private DamagableEvent damagable; + + public bool shootToPick; + + private void Start() + { + myGunStats = GetComponent(); + myPlayerStats = GetComponent(); + myBlock = GetComponentInChildren(); + cardAudio = GetComponent(); + damagable = GetComponentInChildren(); + } + + private void Update() + { + if (shootToPick && damagable.dead && (bool)damagable.lastPlayer) + { + Pick(damagable.lastPlayer.teamID); + Object.Destroy(base.gameObject); + } + } + + [PunRPC] + public void RPCA_Pick(int[] actorIDs) + { + for (int i = 0; i < actorIDs.Length; i++) + { + playerToUpgrade = PlayerManager.instance.GetPlayerWithActorID(actorIDs[i]); + ApplyStats(); + CardBarHandler.instance.AddCard(playerToUpgrade.playerID, GetComponent().sourceCard); + } + } + + [PunRPC] + public void OFFLINE_Pick(Player[] players) + { + for (int i = 0; i < players.Length; i++) + { + playerToUpgrade = players[i]; + ApplyStats(); + CardBarHandler.instance.AddCard(playerToUpgrade.playerID, GetComponent().sourceCard); + } + } + + public void Pick(int pickerID, bool forcePick = false, PickerType pickerType = PickerType.Team) + { + Start(); + if (done && !forcePick) + { + return; + } + done = true; + Player[] array = PlayerManager.instance.GetPlayersInTeam(pickerID); + if (pickerType == PickerType.Player) + { + array = new Player[1] { PlayerManager.instance.players[pickerID] }; + } + if (PhotonNetwork.OfflineMode) + { + OFFLINE_Pick(array); + return; + } + int[] array2 = new int[array.Length]; + for (int i = 0; i < array.Length; i++) + { + array2[i] = array[i].data.view.ControllerActorNr; + } + GetComponent().RPC("RPCA_Pick", RpcTarget.All, array2); + } + + private void ApplyStats() + { + done = true; + PlayerAudioModifyers component = playerToUpgrade.GetComponent(); + Gun component2 = playerToUpgrade.GetComponent().holdable.GetComponent(); + Player component3 = playerToUpgrade.GetComponent(); + CharacterData component4 = playerToUpgrade.GetComponent(); + HealthHandler component5 = playerToUpgrade.GetComponent(); + playerToUpgrade.GetComponent(); + Gravity component6 = playerToUpgrade.GetComponent(); + Block component7 = playerToUpgrade.GetComponent(); + CharacterStatModifiers component8 = component3.GetComponent(); + GunAmmo componentInChildren = component2.GetComponentInChildren(); + if ((bool)componentInChildren && (bool)myGunStats) + { + componentInChildren.ammoReg += myGunStats.ammoReg; + componentInChildren.maxAmmo += myGunStats.ammo; + componentInChildren.maxAmmo = Mathf.Clamp(componentInChildren.maxAmmo, 1, 90); + componentInChildren.reloadTimeMultiplier *= myGunStats.reloadTime; + componentInChildren.reloadTimeAdd += myGunStats.reloadTimeAdd; + } + component3.data.currentCards.Add(GetComponent().sourceCard); + if ((bool)myGunStats) + { + if (myGunStats.lockGunToDefault) + { + component2.defaultCooldown = myGunStats.forceSpecificAttackSpeed; + component2.lockGunToDefault = myGunStats.lockGunToDefault; + } + if ((bool)myGunStats && myGunStats.projectiles.Length != 0) + { + component2.projectiles[0].objectToSpawn = myGunStats.projectiles[0].objectToSpawn; + } + if ((bool)myGunStats) + { + CopyGunStats(myGunStats, component2); + } + } + if ((bool)myPlayerStats) + { + component8.sizeMultiplier *= myPlayerStats.sizeMultiplier; + component4.maxHealth *= myPlayerStats.health; + component8.ConfigureMassAndSize(); + component8.movementSpeed *= myPlayerStats.movementSpeed; + component8.jump *= myPlayerStats.jump; + component4.jumps += myPlayerStats.numberOfJumps; + component6.gravityForce *= myPlayerStats.gravity; + component5.regeneration += myPlayerStats.regen; + if ((bool)myPlayerStats.AddObjectToPlayer) + { + component8.objectsAddedToPlayer.Add(Object.Instantiate(myPlayerStats.AddObjectToPlayer, component3.transform.position, component3.transform.rotation, component3.transform)); + } + component8.lifeSteal += myPlayerStats.lifeSteal; + component8.respawns += myPlayerStats.respawns; + component8.secondsToTakeDamageOver += myPlayerStats.secondsToTakeDamageOver; + if (myPlayerStats.refreshOnDamage) + { + component8.refreshOnDamage = true; + } + if (!myPlayerStats.automaticReload) + { + component8.automaticReload = false; + } + } + if ((bool)myBlock) + { + if (myBlock.objectsToSpawn != null) + { + for (int i = 0; i < myBlock.objectsToSpawn.Count; i++) + { + component7.objectsToSpawn.Add(myBlock.objectsToSpawn[i]); + } + } + component7.cdMultiplier *= myBlock.cdMultiplier; + component7.cdAdd += myBlock.cdAdd; + component7.forceToAdd += myBlock.forceToAdd; + component7.forceToAddUp += myBlock.forceToAddUp; + component7.additionalBlocks += myBlock.additionalBlocks; + component7.healing += myBlock.healing; + if (myBlock.autoBlock) + { + component7.autoBlock = myBlock.autoBlock; + } + } + if ((bool)component && (bool)cardAudio) + { + component.AddToStack(cardAudio); + } + component8.WasUpdated(); + component5.Revive(); + } + + public static void CopyGunStats(Gun copyFromGun, Gun copyToGun) + { + if (copyFromGun.unblockable) + { + copyToGun.unblockable = copyFromGun.unblockable; + } + if (copyFromGun.ignoreWalls) + { + copyToGun.ignoreWalls = copyFromGun.ignoreWalls; + } + float num = 1f; + if (copyFromGun.numberOfProjectiles != 0 && copyToGun.numberOfProjectiles != 1) + { + num = (float)copyFromGun.numberOfProjectiles / ((float)copyFromGun.numberOfProjectiles + (float)copyToGun.numberOfProjectiles); + } + copyToGun.damage *= 1f - num * (1f - copyFromGun.damage); + if (copyToGun.damage < 0.25f) + { + copyToGun.damage = 0.25f; + } + copyToGun.size += copyFromGun.size; + float num2 = 1f; + if (copyFromGun.chargeNumberOfProjectilesTo != 0f) + { + num2 = copyFromGun.chargeNumberOfProjectilesTo / (copyFromGun.chargeNumberOfProjectilesTo + copyToGun.chargeNumberOfProjectilesTo); + } + copyToGun.chargeDamageMultiplier *= 1f - num2 * (1f - copyFromGun.chargeDamageMultiplier); + copyToGun.knockback *= 1f - num * (1f - copyFromGun.knockback); + copyToGun.projectileSpeed *= copyFromGun.projectileSpeed; + copyToGun.projectielSimulatonSpeed *= copyFromGun.projectielSimulatonSpeed; + copyToGun.gravity *= copyFromGun.gravity; + copyToGun.multiplySpread *= copyFromGun.multiplySpread; + copyToGun.attackSpeed *= copyFromGun.attackSpeed; + copyToGun.bodyRecoil *= copyFromGun.recoilMuiltiplier; + copyToGun.speedMOnBounce *= copyFromGun.speedMOnBounce; + copyToGun.dmgMOnBounce *= copyFromGun.dmgMOnBounce; + copyToGun.bulletDamageMultiplier *= copyFromGun.bulletDamageMultiplier; + copyToGun.spread += copyFromGun.spread; + copyToGun.drag += copyFromGun.drag; + copyToGun.timeBetweenBullets += copyFromGun.timeBetweenBullets; + copyToGun.dragMinSpeed += copyFromGun.dragMinSpeed; + copyToGun.evenSpread += copyFromGun.evenSpread; + copyToGun.numberOfProjectiles += copyFromGun.numberOfProjectiles; + copyToGun.reflects += copyFromGun.reflects; + copyToGun.smartBounce += copyFromGun.smartBounce; + copyToGun.bulletPortal += copyFromGun.bulletPortal; + copyToGun.randomBounces += copyFromGun.randomBounces; + copyToGun.bursts += copyFromGun.bursts; + copyToGun.slow += copyFromGun.slow; + copyToGun.overheatMultiplier += copyFromGun.overheatMultiplier; + copyToGun.projectileSize += copyFromGun.projectileSize; + copyToGun.percentageDamage += copyFromGun.percentageDamage; + copyToGun.damageAfterDistanceMultiplier *= copyFromGun.damageAfterDistanceMultiplier; + copyToGun.timeToReachFullMovementMultiplier *= copyFromGun.timeToReachFullMovementMultiplier; + copyToGun.cos += copyFromGun.cos; + if (copyFromGun.dontAllowAutoFire) + { + copyToGun.dontAllowAutoFire = true; + } + if (copyFromGun.destroyBulletAfter != 0f) + { + copyToGun.destroyBulletAfter = copyFromGun.destroyBulletAfter; + } + copyToGun.chargeSpreadTo += copyFromGun.chargeSpreadTo; + copyToGun.chargeSpeedTo += copyFromGun.chargeSpeedTo; + copyToGun.chargeEvenSpreadTo += copyFromGun.chargeEvenSpreadTo; + copyToGun.chargeNumberOfProjectilesTo += copyFromGun.chargeNumberOfProjectilesTo; + copyToGun.chargeRecoilTo += copyFromGun.chargeRecoilTo; + if (copyFromGun.projectileColor != Color.black) + { + if (copyToGun.projectileColor == Color.black) + { + copyToGun.projectileColor = copyFromGun.projectileColor; + } + float r = Mathf.Pow((copyToGun.projectileColor.r * copyToGun.projectileColor.r + copyFromGun.projectileColor.r * copyFromGun.projectileColor.r) / 2f, 0.5f); + float g = Mathf.Pow((copyToGun.projectileColor.g * copyToGun.projectileColor.g + copyFromGun.projectileColor.g * copyFromGun.projectileColor.g) / 2f, 0.5f); + float b = Mathf.Pow((copyToGun.projectileColor.b * copyToGun.projectileColor.b + copyFromGun.projectileColor.b * copyFromGun.projectileColor.b) / 2f, 0.5f); + Color rgbColor = new Color(r, g, b, 1f); + float H = 0f; + float S = 0f; + float V = 0f; + Color.RGBToHSV(rgbColor, out H, out S, out V); + S = 1f; + V = 1f; + copyToGun.projectileColor = Color.HSVToRGB(H, S, V); + } + List list = new List(); + for (int i = 0; i < copyToGun.objectsToSpawn.Length; i++) + { + list.Add(copyToGun.objectsToSpawn[i]); + } + for (int j = 0; j < copyFromGun.objectsToSpawn.Length; j++) + { + bool flag = false; + for (int k = 0; k < list.Count; k++) + { + if ((bool)list[k].effect && (bool)copyFromGun.objectsToSpawn[j].effect) + { + if (list[k].effect.name == copyFromGun.objectsToSpawn[j].effect.name && list[k].scaleStacks) + { + list[k].stacks++; + flag = true; + } + } + else if ((bool)list[k].AddToProjectile && (bool)copyFromGun.objectsToSpawn[j].AddToProjectile && list[k].AddToProjectile.name == copyFromGun.objectsToSpawn[j].AddToProjectile.name && list[k].scaleStacks) + { + list[k].stacks++; + flag = true; + } + } + if (!flag) + { + list.Add(copyFromGun.objectsToSpawn[j]); + } + } + copyToGun.objectsToSpawn = list.ToArray(); + if (copyFromGun.useCharge) + { + copyToGun.useCharge = copyFromGun.useCharge; + } + copyToGun.soundGun.AddSoundShotModifier(copyFromGun.soundShotModifier); + copyToGun.soundGun.AddSoundImpactModifier(copyFromGun.soundImpactModifier); + copyToGun.soundGun.RefreshSoundModifiers(); + } +} diff --git a/GameCode/ApplyRootScale.cs b/GameCode/ApplyRootScale.cs new file mode 100644 index 0000000..36ef87a --- /dev/null +++ b/GameCode/ApplyRootScale.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +public class ApplyRootScale : MonoBehaviour +{ + public float amount = 0.5f; + + private void Start() + { + base.transform.localScale = Vector3.Lerp(base.transform.localScale, base.transform.root.localScale, amount); + } +} diff --git a/GameCode/ArmRotator.cs b/GameCode/ArmRotator.cs new file mode 100644 index 0000000..a8f02a9 --- /dev/null +++ b/GameCode/ArmRotator.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +public class ArmRotator : MonoBehaviour +{ + public Vector3 rotation; + + private void Start() + { + base.transform.localEulerAngles = rotation; + } +} diff --git a/GameCode/ArtHandler.cs b/GameCode/ArtHandler.cs new file mode 100644 index 0000000..1421de0 --- /dev/null +++ b/GameCode/ArtHandler.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +public class ArtHandler : MonoBehaviour +{ + public ArtInstance[] arts; + + public PostProcessVolume volume; + + public static ArtHandler instance; + + private ColorGrading colorGrading; + + private int currentArt = -1; + + private void Awake() + { + instance = this; + } + + private void Update() + { + if (Input.GetKeyDown(KeyCode.LeftShift)) + { + NextArt(); + } + } + + public void NextArt() + { + for (int i = 0; i < arts.Length; i++) + { + arts[i].TogglePart(on: false); + } + int num = Random.Range(0, arts.Length); + if (num >= arts.Length) + { + num = 0; + } + ApplyArt(arts[num]); + } + + private void ApplyArt(ArtInstance art) + { + art.TogglePart(on: true); + currentArt = GetArtID(art); + volume.profile = art.profile; + } + + public void SetSpecificArt(ArtInstance art) + { + ApplyArt(art); + } + + public void ApplyPost(PostProcessProfile profileToSet) + { + volume.profile = profileToSet; + } + + public void SetSpecificArt(string artName) + { + for (int i = 0; i < arts.Length; i++) + { + if (arts[i].profile.name == artName) + { + ApplyArt(arts[i]); + break; + } + } + } + + private int GetArtID(ArtInstance art) + { + int result = -1; + for (int i = 0; i < arts.Length; i++) + { + if (art == arts[i]) + { + result = i; + } + } + return result; + } +} diff --git a/GameCode/ArtInstance.cs b/GameCode/ArtInstance.cs new file mode 100644 index 0000000..49c24b3 --- /dev/null +++ b/GameCode/ArtInstance.cs @@ -0,0 +1,23 @@ +using System; +using Sirenix.OdinInspector; +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +[Serializable] +public class ArtInstance +{ + [FoldoutGroup("$profile", 0)] + public PostProcessProfile profile; + + [FoldoutGroup("$profile", 0)] + public ParticleSystem[] parts; + + public void TogglePart(bool on) + { + for (int i = 0; i < parts.Length; i++) + { + parts[i].gameObject.SetActive(on); + parts[i].Play(); + } + } +} diff --git a/GameCode/AttackLevel.cs b/GameCode/AttackLevel.cs new file mode 100644 index 0000000..78c92dd --- /dev/null +++ b/GameCode/AttackLevel.cs @@ -0,0 +1,53 @@ +using System; +using UnityEngine; + +public class AttackLevel : MonoBehaviour +{ + public int attackLevel = 1; + + public float levelScaleM = 0.7f; + + public Action LevelUpAction; + + private void Start() + { + SpawnedAttack componentInParent = GetComponentInParent(); + if ((bool)componentInParent) + { + attackLevel = componentInParent.attackLevel; + } + bool flag = false; + AttackLevel[] componentsInChildren = base.transform.root.GetComponentsInChildren(); + for (int i = 0; i < componentsInChildren.Length; i++) + { + if (!(componentsInChildren[i] == this) && componentsInChildren[i].gameObject.name == base.gameObject.name) + { + componentsInChildren[i].LevelUp(); + flag = true; + } + } + if (flag) + { + UnityEngine.Object.Destroy(base.gameObject); + } + } + + public float LevelScale() + { + return 1f + ((float)attackLevel - 1f) * levelScaleM; + } + + public int LevelsUp() + { + return attackLevel - 1; + } + + public void LevelUp() + { + attackLevel++; + if (LevelUpAction != null) + { + LevelUpAction(attackLevel); + } + } +} diff --git a/GameCode/AttackTrigger.cs b/GameCode/AttackTrigger.cs new file mode 100644 index 0000000..a452de0 --- /dev/null +++ b/GameCode/AttackTrigger.cs @@ -0,0 +1,43 @@ +using System; +using UnityEngine; +using UnityEngine.Events; + +public class AttackTrigger : MonoBehaviour +{ + public bool triggerOnEveryShot = true; + + public UnityEvent triggerEvent; + + private CharacterData data; + + private void Start() + { + data = GetComponentInParent(); + Gun gun = data.weaponHandler.gun; + gun.ShootPojectileAction = (Action)Delegate.Combine(gun.ShootPojectileAction, new Action(Shoot)); + data.weaponHandler.gun.AddAttackAction(Attack); + } + + private void OnDestroy() + { + Gun gun = data.weaponHandler.gun; + gun.ShootPojectileAction = (Action)Delegate.Remove(gun.ShootPojectileAction, new Action(Shoot)); + data.weaponHandler.gun.RemoveAttackAction(Attack); + } + + public void Attack() + { + if (!triggerOnEveryShot) + { + triggerEvent.Invoke(); + } + } + + public void Shoot(GameObject projectile) + { + if (triggerOnEveryShot) + { + triggerEvent.Invoke(); + } + } +} diff --git a/GameCode/AudioModifyer.cs b/GameCode/AudioModifyer.cs new file mode 100644 index 0000000..ddfaad9 --- /dev/null +++ b/GameCode/AudioModifyer.cs @@ -0,0 +1,9 @@ +using System; + +[Serializable] +public class AudioModifyer +{ + public CardAudioModifier modifier; + + public int stacks; +} diff --git a/GameCode/Background.cs b/GameCode/Background.cs new file mode 100644 index 0000000..0b694c7 --- /dev/null +++ b/GameCode/Background.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +public class Background : MonoBehaviour +{ + private ParticleSystem[] parts; + + private bool hasBeenInitiated; + + private void Init() + { + parts = GetComponentsInChildren(); + hasBeenInitiated = true; + } + + public void ToggleBackground(bool on) + { + if (!hasBeenInitiated) + { + Init(); + } + for (int i = 0; i < parts.Length; i++) + { + if (on) + { + parts[i].Play(); + } + else + { + parts[i].Stop(); + } + } + } +} diff --git a/GameCode/BackgroundHandler.cs b/GameCode/BackgroundHandler.cs new file mode 100644 index 0000000..90823de --- /dev/null +++ b/GameCode/BackgroundHandler.cs @@ -0,0 +1,39 @@ +using System.Collections; +using UnityEngine; + +public class BackgroundHandler : MonoBehaviour +{ + private Background[] backgrounds; + + private float untilSwitch; + + private void Start() + { + backgrounds = GetComponentsInChildren(includeInactive: true); + } + + private void Update() + { + untilSwitch -= TimeHandler.deltaTime; + if (untilSwitch < 0f) + { + SwitchBackground(); + } + } + + private void SwitchBackground() + { + untilSwitch = Random.Range(30, 60); + for (int i = 0; i < backgrounds.Length; i++) + { + backgrounds[i].ToggleBackground(on: false); + } + StartCoroutine(StartBackGroundSoon()); + } + + private IEnumerator StartBackGroundSoon() + { + yield return new WaitForSeconds(5f); + backgrounds[Random.Range(0, backgrounds.Length)].ToggleBackground(on: true); + } +} diff --git a/GameCode/BeamAttack.cs b/GameCode/BeamAttack.cs new file mode 100644 index 0000000..a05ee28 --- /dev/null +++ b/GameCode/BeamAttack.cs @@ -0,0 +1,145 @@ +using System.Collections; +using UnityEngine; + +public class BeamAttack : MonoBehaviour +{ + public float selfHeal; + + public float damage = 8f; + + public float force = 2500f; + + public float scalingForce; + + public float overTimeForce; + + public float overTimeScalingForce; + + public float overTimeDrag; + + public float effectOverTimeTime = 0.1f; + + public float interval = 0.2f; + + public float slow; + + public float maxSlow = 1f; + + public Color dmgColor; + + private Player attacker; + + private Player thisPlayer; + + private LineEffect[] lineEffects; + + private ParticleSystem[] parts; + + private CharacterStatModifiers stats; + + private float scaleMultiplier = 1f; + + private SpawnedAttack spawnedAttack; + + private float counter; + + private void Start() + { + lineEffects = GetComponentsInChildren(includeInactive: true); + parts = GetComponentsInChildren(); + thisPlayer = GetComponentInParent(); + stats = thisPlayer.GetComponent(); + attacker = PlayerManager.instance.GetOtherPlayer(thisPlayer); + scaleMultiplier = base.transform.localScale.x; + spawnedAttack = GetComponentInParent(); + if (thisPlayer == spawnedAttack.spawner) + { + Object.Destroy(base.gameObject); + } + } + + private void Update() + { + if (!attacker || !thisPlayer) + { + return; + } + counter += TimeHandler.deltaTime; + if (!(counter > interval)) + { + return; + } + CanSeeInfo canSeeInfo = PlayerManager.instance.CanSeePlayer(attacker.transform.position, thisPlayer); + if (canSeeInfo.canSee) + { + Vector2 vector = thisPlayer.transform.position - attacker.transform.position; + Vector2 normalized = vector.normalized; + if (force != 0f) + { + thisPlayer.data.healthHandler.TakeForce(normalized * scaleMultiplier * force); + } + if (scalingForce != 0f) + { + thisPlayer.data.healthHandler.TakeForce(vector * scaleMultiplier * scalingForce); + } + if (damage != 0f) + { + thisPlayer.data.healthHandler.TakeDamage(damage * scaleMultiplier * normalized, base.transform.position, dmgColor, null, attacker); + } + if (selfHeal != 0f) + { + attacker.data.healthHandler.Heal(selfHeal * scaleMultiplier); + } + for (int i = 0; i < lineEffects.Length; i++) + { + lineEffects[i].Play(attacker.transform, thisPlayer.transform); + } + StartCoroutine(DoOverTimeEffects(attacker)); + if (slow > 0f && (bool)stats) + { + stats.AddSlowAddative(slow * scaleMultiplier, maxSlow); + } + } + else + { + for (int j = 0; j < lineEffects.Length; j++) + { + lineEffects[j].Play(attacker.transform, canSeeInfo.hitPoint); + } + for (int k = 0; k < parts.Length; k++) + { + parts[k].transform.position = canSeeInfo.hitPoint; + parts[k].transform.localScale = Vector3.one * scaleMultiplier; + parts[k].Play(); + } + } + counter = 0f; + } + + private IEnumerator DoOverTimeEffects(Player attacker) + { + float c = 0f; + while (c < effectOverTimeTime) + { + c += TimeHandler.deltaTime; + if ((bool)attacker && (bool)thisPlayer) + { + Vector2 vector = thisPlayer.transform.position - attacker.transform.position; + Vector2 normalized = vector.normalized; + if (overTimeForce != 0f) + { + thisPlayer.data.healthHandler.TakeForce(normalized * scaleMultiplier * TimeHandler.deltaTime * overTimeForce); + } + if (overTimeScalingForce != 0f) + { + thisPlayer.data.healthHandler.TakeForce(vector * scaleMultiplier * TimeHandler.deltaTime * overTimeScalingForce, ForceMode2D.Force); + } + if (overTimeDrag > 0f) + { + thisPlayer.data.playerVel.AddForce(-thisPlayer.data.playerVel.velocity * Mathf.Clamp(TimeHandler.deltaTime * scaleMultiplier * overTimeDrag, 0f, 0.95f), ForceMode2D.Force); + } + } + yield return null; + } + } +} diff --git a/GameCode/BezierCurve.cs b/GameCode/BezierCurve.cs new file mode 100644 index 0000000..5fb99b8 --- /dev/null +++ b/GameCode/BezierCurve.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +public static class BezierCurve +{ + public static Vector3 CubicBezier(Vector3 Start, Vector3 _P1, Vector3 _P2, Vector3 end, float _t) + { + return (1f - _t) * QuadraticBezier(Start, _P1, _P2, _t) + _t * QuadraticBezier(_P1, _P2, end, _t); + } + + public static Vector3 QuadraticBezier(Vector3 start, Vector3 _P1, Vector3 end, float _t) + { + return (1f - _t) * LinearBezier(start, _P1, _t) + _t * LinearBezier(_P1, end, _t); + } + + public static Vector3 LinearBezier(Vector3 start, Vector3 end, float _t) + { + return (1f - _t) * start + _t * end; + } +} diff --git a/GameCode/BlinkStep.cs b/GameCode/BlinkStep.cs new file mode 100644 index 0000000..4a52737 --- /dev/null +++ b/GameCode/BlinkStep.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +public class BlinkStep : MonoBehaviour +{ + public float interval = 0.29f; + + private CharacterData data; + + private float counter; + + private void Start() + { + data = GetComponentInParent(); + } + + private void Update() + { + if (data.view.IsMine) + { + counter += TimeHandler.deltaTime; + if (counter > interval) + { + counter = 0f; + data.block.CallDoBlock(firstBlock: true, dontSetCD: true); + } + } + } +} diff --git a/GameCode/Block.cs b/GameCode/Block.cs new file mode 100644 index 0000000..b48d264 --- /dev/null +++ b/GameCode/Block.cs @@ -0,0 +1,353 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Photon.Pun; +using Sonigon; +using UnityEngine; + +public class Block : MonoBehaviour +{ + [Header("Sounds")] + public SoundEvent soundBlockStart; + + public SoundEvent soundBlockRecharged; + + public SoundEvent soundBlockBlocked; + + public SoundEvent soundBlockStatusEffect; + + [Header("Settings")] + public List objectsToSpawn = new List(); + + public float sinceBlock; + + private GeneralInput input; + + public ParticleSystem particle; + + public ParticleSystem reloadParticle; + + public ParticleSystem blockedPart; + + public float cooldown; + + public float counter = 1000f; + + public float cdMultiplier = 1f; + + public float cdAdd; + + public float forceToAdd; + + public float forceToAddUp; + + public bool autoBlock; + + public bool blockedThisFrame; + + public int additionalBlocks; + + public float healing; + + private float timeBetweenBlocks = 0.2f; + + private CharacterData data; + + private HealthHandler health; + + private bool active = true; + + public Action BlockRechargeAction; + + private bool blockedLastFrame; + + public Action BlockAction; + + public Action BlockActionEarly; + + public Action FirstBlockActionThatDelaysOthers; + + public Action SuperFirstBlockAction; + + public Vector3 blockedAtPos; + + public bool delayOtherActions; + + public ParticleSystem statusBlockPart; + + private float lastStatusBlock; + + public Action BlockProjectileAction; + + public float Cooldown() + { + return (cooldown + cdAdd) * cdMultiplier; + } + + private void Start() + { + input = GetComponent(); + data = GetComponent(); + health = GetComponent(); + sinceBlock = 100f; + } + + private void Update() + { + if ((bool)input && data.playerVel.simulated) + { + if (!blockedLastFrame) + { + blockedThisFrame = false; + } + blockedLastFrame = false; + sinceBlock += TimeHandler.deltaTime; + counter += TimeHandler.deltaTime; + if (counter > Cooldown() && !active) + { + active = true; + reloadParticle.Play(); + BlockRechargeAction(); + SoundManager.Instance.Play(soundBlockRecharged, base.transform); + } + if (input.shieldWasPressed) + { + TryBlock(); + } + } + } + + public void DoBlockAtPosition(bool firstBlock, bool dontSetCD = false, BlockTrigger.BlockTriggerType triggerType = BlockTrigger.BlockTriggerType.Default, Vector3 blockPos = default(Vector3), bool onlyBlockEffects = false) + { + blockedAtPos = blockPos; + RPCA_DoBlock(firstBlock, dontSetCD, triggerType, blockPos, onlyBlockEffects); + } + + internal void ResetStats() + { + objectsToSpawn = new List(); + sinceBlock = 10f; + cooldown = 4f; + counter = 1000f; + cdMultiplier = 1f; + cdAdd = 0f; + forceToAdd = 0f; + forceToAddUp = 0f; + autoBlock = false; + blockedThisFrame = false; + additionalBlocks = 0; + healing = 0f; + delayOtherActions = false; + } + + public void CallDoBlock(bool firstBlock, bool dontSetCD = false, BlockTrigger.BlockTriggerType triggerType = BlockTrigger.BlockTriggerType.Default, Vector3 useBlockPos = default(Vector3), bool onlyBlockEffects = false) + { + data.view.RPC("RPCA_DoBlock", RpcTarget.All, firstBlock, dontSetCD, (int)triggerType, useBlockPos, onlyBlockEffects); + } + + [PunRPC] + public void RPCA_DoBlock(bool firstBlock, bool dontSetCD = false, BlockTrigger.BlockTriggerType triggerType = BlockTrigger.BlockTriggerType.Default, Vector3 useBlockPos = default(Vector3), bool onlyBlockEffects = false) + { + if (triggerType == BlockTrigger.BlockTriggerType.Default && firstBlock) + { + for (int i = 0; i < additionalBlocks; i++) + { + StartCoroutine(DelayBlock(((float)i + 1f) * timeBetweenBlocks)); + } + } + StartCoroutine(IDoBlock(firstBlock, dontSetCD, triggerType, useBlockPos, onlyBlockEffects)); + } + + private IEnumerator IDoBlock(bool firstBlock, bool dontSetCD = false, BlockTrigger.BlockTriggerType triggerType = BlockTrigger.BlockTriggerType.Default, Vector3 useBlockPos = default(Vector3), bool onlyBlockEffects = false) + { + active = false; + Vector3 position = base.transform.position; + if (useBlockPos != Vector3.zero) + { + base.transform.position = useBlockPos; + } + if (SuperFirstBlockAction != null) + { + SuperFirstBlockAction(triggerType); + } + if (FirstBlockActionThatDelaysOthers != null) + { + FirstBlockActionThatDelaysOthers(triggerType); + } + if (useBlockPos != Vector3.zero) + { + base.transform.position = position; + } + if (!onlyBlockEffects) + { + sinceBlock = 0f; + } + if (delayOtherActions) + { + yield return new WaitForSeconds(0.2f); + } + position = base.transform.position; + if (useBlockPos != Vector3.zero) + { + base.transform.position = useBlockPos; + } + if (BlockActionEarly != null) + { + BlockActionEarly(triggerType); + } + if (BlockAction != null) + { + BlockAction(triggerType); + } + if (firstBlock) + { + if (forceToAdd != 0f) + { + health.TakeForce(data.hand.transform.forward * forceToAdd * data.playerVel.mass * 0.01f); + } + if (forceToAddUp != 0f) + { + health.TakeForce(Vector3.up * forceToAddUp * data.playerVel.mass * 0.01f); + } + } + blockedLastFrame = true; + bool flag = false; + for (int i = 0; i < data.currentCards.Count; i++) + { + if (data.currentCards[i].soundDisableBlockBasic) + { + flag = true; + break; + } + } + if (!flag && triggerType != BlockTrigger.BlockTriggerType.ShieldCharge) + { + SoundManager.Instance.Play(soundBlockStart, base.transform); + } + if (!onlyBlockEffects) + { + particle.Play(); + } + if (!dontSetCD) + { + counter = 0f; + } + GamefeelManager.GameFeel(UnityEngine.Random.insideUnitCircle.normalized * 1f); + if (!onlyBlockEffects) + { + sinceBlock = 0f; + } + Spawn(); + health.Heal(healing); + if (useBlockPos != Vector3.zero) + { + base.transform.position = position; + } + } + + public void ShowStatusEffectBlock() + { + if (!(Time.unscaledTime < lastStatusBlock + 0.25f) && data.view.IsMine) + { + lastStatusBlock = Time.unscaledTime; + data.view.RPC("RPCA_ShowStatusEffectBlock", RpcTarget.All); + } + } + + [PunRPC] + public void RPCA_ShowStatusEffectBlock() + { + SoundManager.Instance.Play(soundBlockStatusEffect, base.transform); + statusBlockPart.Play(); + } + + public void TryBlock() + { + if (!(counter < Cooldown())) + { + RPCA_DoBlock(firstBlock: true); + counter = 0f; + } + } + + private IEnumerator DelayBlock(float t) + { + yield return new WaitForSeconds(t); + yield return new WaitForEndOfFrame(); + RPCA_DoBlock(firstBlock: false, dontSetCD: true, BlockTrigger.BlockTriggerType.Echo); + } + + public void Spawn() + { + for (int i = 0; i < objectsToSpawn.Count; i++) + { + SpawnedAttack component = UnityEngine.Object.Instantiate(objectsToSpawn[i], base.transform.position, Quaternion.identity).GetComponent(); + if ((bool)component) + { + component.spawner = GetComponent(); + } + } + } + + public void blocked(GameObject projectile, Vector3 forward, Vector3 hitPos) + { + SoundManager.Instance.Play(soundBlockBlocked, base.transform); + projectile.GetComponent().RemoveOwnPlayerFromPlayersHit(); + projectile.GetComponent().AddPlayerToHeld(GetComponent()); + projectile.GetComponent().velocity *= -1f; + projectile.GetComponent().WasBlocked(); + blockedPart.transform.position = hitPos + base.transform.forward * 5f; + blockedPart.transform.rotation = Quaternion.LookRotation(-forward * 1.5f); + GamefeelManager.GameFeel(forward); + blockedPart.Play(); + SpawnedAttack componentInParent = projectile.GetComponentInParent(); + if ((!componentInParent || !(componentInParent.spawner.gameObject == base.transform.root.gameObject)) && BlockProjectileAction != null) + { + BlockProjectileAction(projectile, forward, hitPos); + } + } + + public void ResetCD(bool soundPlay) + { + active = true; + reloadParticle.Play(); + counter = Cooldown() + 1f; + if (soundPlay) + { + SoundManager.Instance.Play(soundBlockRecharged, base.transform); + } + } + + public bool TryBlockMe(GameObject toBlock, Vector3 forward, Vector3 hitPos) + { + if (sinceBlock < 0.3f) + { + blocked(toBlock, forward, hitPos); + sinceBlock = 0f; + particle.Play(); + return true; + } + return false; + } + + public void DoBlock(GameObject toBlock, Vector3 forward, Vector3 hitPos) + { + sinceBlock = 0f; + blocked(toBlock, forward, hitPos); + particle.Play(); + } + + public bool IsBlocking() + { + if (sinceBlock < 0.3f) + { + ShowStatusEffectBlock(); + } + return sinceBlock < 0.3f; + } + + public bool IsOnCD() + { + return counter < Cooldown(); + } +} diff --git a/GameCode/BlockEffect.cs b/GameCode/BlockEffect.cs new file mode 100644 index 0000000..3cc771c --- /dev/null +++ b/GameCode/BlockEffect.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public abstract class BlockEffect : MonoBehaviour +{ + public abstract void DoBlockedProjectile(GameObject projectile, Vector3 forward, Vector3 hitPos); +} diff --git a/GameCode/BlockEffectCounter.cs b/GameCode/BlockEffectCounter.cs new file mode 100644 index 0000000..56c7e39 --- /dev/null +++ b/GameCode/BlockEffectCounter.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +public class BlockEffectCounter : BlockEffect +{ + public int ownAttacksToSendBack; + + private SpawnObjectEffect spawn; + + private void Start() + { + spawn = GetComponentInParent(); + } + + public override void DoBlockedProjectile(GameObject projectile, Vector3 forward, Vector3 hitPos) + { + for (int i = 0; i < ownAttacksToSendBack; i++) + { + spawn.DoEffect(forward); + } + } +} diff --git a/GameCode/BlockRechargeUI.cs b/GameCode/BlockRechargeUI.cs new file mode 100644 index 0000000..d2ad92a --- /dev/null +++ b/GameCode/BlockRechargeUI.cs @@ -0,0 +1,20 @@ +using UnityEngine; +using UnityEngine.UI; + +public class BlockRechargeUI : MonoBehaviour +{ + private Block block; + + private Image img; + + private void Start() + { + img = GetComponentInChildren(); + block = GetComponentInParent(); + } + + private void Update() + { + img.fillAmount = block.counter / block.Cooldown(); + } +} diff --git a/GameCode/BlockTrigger.cs b/GameCode/BlockTrigger.cs new file mode 100644 index 0000000..604c466 --- /dev/null +++ b/GameCode/BlockTrigger.cs @@ -0,0 +1,140 @@ +using System; +using UnityEngine; +using UnityEngine.Events; + +public class BlockTrigger : MonoBehaviour +{ + public enum BlockTriggerType + { + Default, + None, + ShieldCharge, + Echo, + Empower + } + + public UnityEvent triggerEvent; + + public UnityEvent triggerEventEarly; + + public bool delayOtherActions; + + public UnityEvent triggerFirstBlockThatDelaysOthers; + + public UnityEvent triggerSuperFirstBlock; + + public UnityEvent successfulBlockEvent; + + public UnityEvent blockRechargeEvent; + + private BlockEffect[] effects; + + public float cooldown; + + private float lastTriggerTime = -5f; + + public BlockTriggerType blackListedType = BlockTriggerType.None; + + public float cooldownSuccess; + + private float lastTriggerTimeSuccessful = -5f; + + private void Start() + { + effects = GetComponents(); + Block componentInParent = GetComponentInParent(); + componentInParent.SuperFirstBlockAction = (Action)Delegate.Combine(componentInParent.SuperFirstBlockAction, new Action(DoSuperFirstBlock)); + componentInParent.FirstBlockActionThatDelaysOthers = (Action)Delegate.Combine(componentInParent.FirstBlockActionThatDelaysOthers, new Action(DoFirstBlockThatDelaysOthers)); + componentInParent.BlockAction = (Action)Delegate.Combine(componentInParent.BlockAction, new Action(DoBlock)); + componentInParent.BlockActionEarly = (Action)Delegate.Combine(componentInParent.BlockActionEarly, new Action(DoBlockEarly)); + componentInParent.BlockProjectileAction = (Action)Delegate.Combine(componentInParent.BlockProjectileAction, new Action(DoBlockedProjectile)); + componentInParent.BlockRechargeAction = (Action)Delegate.Combine(componentInParent.BlockRechargeAction, new Action(DoBlockRecharge)); + if (delayOtherActions) + { + GetComponentInParent().delayOtherActions = true; + } + } + + private void OnDestroy() + { + Block componentInParent = GetComponentInParent(); + if ((bool)componentInParent && componentInParent.SuperFirstBlockAction != null) + { + componentInParent.SuperFirstBlockAction = (Action)Delegate.Remove(componentInParent.SuperFirstBlockAction, new Action(DoSuperFirstBlock)); + } + if ((bool)componentInParent && componentInParent.FirstBlockActionThatDelaysOthers != null) + { + componentInParent.FirstBlockActionThatDelaysOthers = (Action)Delegate.Remove(componentInParent.FirstBlockActionThatDelaysOthers, new Action(DoFirstBlockThatDelaysOthers)); + } + if ((bool)componentInParent && componentInParent.BlockAction != null) + { + componentInParent.BlockAction = (Action)Delegate.Remove(componentInParent.BlockAction, new Action(DoBlock)); + } + if ((bool)componentInParent && componentInParent.BlockActionEarly != null) + { + componentInParent.BlockActionEarly = (Action)Delegate.Remove(componentInParent.BlockActionEarly, new Action(DoBlockEarly)); + } + if ((bool)componentInParent && componentInParent.BlockProjectileAction != null) + { + componentInParent.BlockProjectileAction = (Action)Delegate.Remove(componentInParent.BlockProjectileAction, new Action(DoBlockedProjectile)); + } + if ((bool)componentInParent && componentInParent.BlockRechargeAction != null) + { + componentInParent.BlockRechargeAction = (Action)Delegate.Remove(componentInParent.BlockRechargeAction, new Action(DoBlockRecharge)); + } + } + + public void DoSuperFirstBlock(BlockTriggerType triggerType) + { + if (triggerType != blackListedType && !(lastTriggerTime + cooldown > Time.time)) + { + lastTriggerTime = Time.time; + triggerSuperFirstBlock.Invoke(); + } + } + + public void DoFirstBlockThatDelaysOthers(BlockTriggerType triggerType) + { + if (triggerType != blackListedType && !(lastTriggerTime + cooldown > Time.time)) + { + lastTriggerTime = Time.time; + triggerFirstBlockThatDelaysOthers.Invoke(); + } + } + + public void DoBlockEarly(BlockTriggerType triggerType) + { + if (triggerType != blackListedType && !(lastTriggerTime + cooldown > Time.time)) + { + lastTriggerTime = Time.time; + triggerEventEarly.Invoke(); + } + } + + public void DoBlock(BlockTriggerType triggerType) + { + if (triggerType != blackListedType && !(lastTriggerTime + cooldown > Time.time)) + { + lastTriggerTime = Time.time; + triggerEvent.Invoke(); + } + } + + public void DoBlockedProjectile(GameObject projectile, Vector3 forward, Vector3 hitPos) + { + if (!(lastTriggerTimeSuccessful + cooldownSuccess > Time.time)) + { + lastTriggerTimeSuccessful = Time.time; + successfulBlockEvent.Invoke(); + for (int i = 0; i < effects.Length; i++) + { + effects[i].DoBlockedProjectile(projectile, forward, hitPos); + } + } + } + + public void DoBlockRecharge() + { + blockRechargeEvent.Invoke(); + } +} diff --git a/GameCode/BlurPost.cs b/GameCode/BlurPost.cs new file mode 100644 index 0000000..1e10746 --- /dev/null +++ b/GameCode/BlurPost.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +[ExecuteInEditMode] +public class BlurPost : MonoBehaviour +{ + [SerializeField] + private Material postprocessMaterial; + + private void OnRenderImage(RenderTexture source, RenderTexture destination) + { + RenderTexture temporary = RenderTexture.GetTemporary(source.width, source.height); + Graphics.Blit(source, temporary, postprocessMaterial, 0); + Graphics.Blit(temporary, destination, postprocessMaterial, 1); + RenderTexture.ReleaseTemporary(temporary); + } +} diff --git a/GameCode/BounceEffect.cs b/GameCode/BounceEffect.cs new file mode 100644 index 0000000..ff98414 --- /dev/null +++ b/GameCode/BounceEffect.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public abstract class BounceEffect : MonoBehaviour +{ + public abstract void DoBounce(HitInfo hit); +} diff --git a/GameCode/BounceEffectRetarget.cs b/GameCode/BounceEffectRetarget.cs new file mode 100644 index 0000000..8e1ef79 --- /dev/null +++ b/GameCode/BounceEffectRetarget.cs @@ -0,0 +1,103 @@ +using System.Collections; +using Photon.Pun; +using Sonigon; +using UnityEngine; + +public class BounceEffectRetarget : BounceEffect +{ + [Header("Sound")] + public SoundEvent soundTargetBounceTargetPlayer; + + private MoveTransform move; + + private PhotonView view; + + private void Start() + { + view = GetComponentInParent(); + move = GetComponentInParent(); + GetComponentInParent().childRPCsVector2.Add("TargetBounce", SetNewVel); + GetComponentInParent().childRPCsInt.Add("TargetBounceLine", DrawLineTo); + } + + public override void DoBounce(HitInfo hit) + { + StartCoroutine(DelayMove(hit)); + } + + private void ActuallyDoBounce(int playerId) + { + Player playerWithID = PlayerManager.instance.GetPlayerWithID(playerId); + if ((bool)playerWithID) + { + GetComponentInParent().CallFunction("TargetBounce", (playerWithID.data.playerVel.position + Vector2.up * move.GetUpwardsCompensation(base.transform.position, playerWithID.data.playerVel.position) - (Vector2)base.transform.position).normalized * move.velocity.magnitude); + SoundManager.Instance.PlayAtPosition(soundTargetBounceTargetPlayer, SoundManager.Instance.GetTransform(), base.transform); + } + else + { + GetComponentInParent().CallFunction("TargetBounce", move.velocity); + } + } + + private void SetNewVel(Vector2 newVel) + { + move.enabled = true; + move.velocity = newVel; + } + + private Player FindTarget(HitInfo hit) + { + Player closestPlayer = PlayerManager.instance.GetClosestPlayer(base.transform.position + (Vector3)hit.normal * 0.1f); + if (PlayerManager.instance.CanSeePlayer(base.transform.position, closestPlayer).canSee) + { + return closestPlayer; + } + return null; + } + + private IEnumerator DelayMove(HitInfo hit) + { + Player p = FindTarget(hit); + if ((bool)p && view.IsMine) + { + GetComponentInParent().CallFunction("TargetBounceLine", p.playerID); + } + move.enabled = false; + if ((bool)hit.rigidbody) + { + move.GetComponent().IgnoreRigFor(hit.rigidbody, 0.5f); + } + yield return new WaitForSeconds(0.1f); + if (view.IsMine) + { + if ((bool)p) + { + ActuallyDoBounce(p.playerID); + } + else + { + ActuallyDoBounce(-1); + } + } + } + + private void DrawLineTo(int playerID) + { + Player playerWithID = PlayerManager.instance.GetPlayerWithID(playerID); + if ((bool)playerWithID) + { + StartCoroutine(DrawLine(playerWithID.transform)); + } + } + + private IEnumerator DrawLine(Transform target) + { + LineEffect line = GetComponentInChildren(includeInactive: true); + line.StartDraw(); + while ((bool)line) + { + line.DrawLine(base.transform.position, target.position); + yield return null; + } + } +} diff --git a/GameCode/BounceTrigger.cs b/GameCode/BounceTrigger.cs new file mode 100644 index 0000000..8d7a1b5 --- /dev/null +++ b/GameCode/BounceTrigger.cs @@ -0,0 +1,22 @@ +using System; +using UnityEngine; + +public class BounceTrigger : MonoBehaviour +{ + private BounceEffect[] bounceEffects; + + private void Start() + { + bounceEffects = GetComponents(); + RayHitReflect componentInParent = GetComponentInParent(); + componentInParent.reflectAction = (Action)Delegate.Combine(componentInParent.reflectAction, new Action(Reflect)); + } + + public void Reflect(HitInfo hit) + { + for (int i = 0; i < bounceEffects.Length; i++) + { + bounceEffects[i].DoBounce(hit); + } + } +} diff --git a/GameCode/BrodalAIController.cs b/GameCode/BrodalAIController.cs new file mode 100644 index 0000000..1d0d60f --- /dev/null +++ b/GameCode/BrodalAIController.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +public class BrodalAIController : MonoBehaviour +{ + private PlayerAPI m_playerAPI; + + private int m_sampleCount = 250; + + private float m_sampleSize; + + private LayerMask m_layerMask; + + private Dictionary m_platforms = new Dictionary(); + + private Platform m_currentPlatform; + + private Vector2 m_pointOnLine; + + private bool inited; + + private void Start() + { + m_playerAPI = GetComponentInParent(); + HealthHandler healthHandler = m_playerAPI.player.data.healthHandler; + healthHandler.delayedReviveAction = (Action)Delegate.Combine(healthHandler.delayedReviveAction, new Action(Init)); + } + + public void Init() + { + m_platforms.Clear(); + m_currentPlatform = null; + PlotPlatforms(); + RaycastMap(); + PostProcessPlatforms(); + inited = true; + Debug.Log("Revived"); + } + + private void PostProcessPlatforms() + { + foreach (KeyValuePair platform in m_platforms) + { + platform.Value.PostProcessPlatformPoints(); + } + } + + private void PlotPlatforms() + { + BoxCollider2D[] array = UnityEngine.Object.FindObjectsOfType(); + foreach (BoxCollider2D boxCollider2D in array) + { + if (boxCollider2D.gameObject.layer == LayerMask.GetMask("Player")) + { + continue; + } + bool flag = false; + foreach (KeyValuePair platform in m_platforms) + { + foreach (BoxCollider2D boxCollider in platform.Value.BoxColliders) + { + bool flag2 = false; + if (boxCollider2D.bounds.Intersects(boxCollider.bounds)) + { + flag2 = true; + } + if (flag2) + { + m_platforms[platform.Key].AddCollider(boxCollider2D); + flag = true; + break; + } + } + if (flag) + { + break; + } + } + if (!flag) + { + Guid key = Guid.NewGuid(); + m_platforms.Add(key, new Platform()); + m_platforms[key].AddCollider(boxCollider2D); + } + } + } + + private void MergePlatforms() + { + } + + private void RaycastMap() + { + m_layerMask = LayerMask.GetMask("Default"); + Camera component = MainCam.instance.transform.GetComponent(); + Vector3 vector = component.ViewportToWorldPoint(new Vector2(0f, 1f)); + Vector3 vector2 = component.ViewportToWorldPoint(new Vector2(1f, 1f)); + m_sampleSize = (vector2.x - vector.x) / (float)m_sampleCount; + for (float num = vector.x; num < vector2.x; num += m_sampleSize) + { + RaycastHit2D[] array = Physics2D.RaycastAll(new Vector3(num, vector.y, 0f), Vector2.down, 9999f, m_layerMask); + for (int i = 0; i < array.Length; i++) + { + RaycastHit2D raycastHit2D = array[i]; + foreach (KeyValuePair platform in m_platforms) + { + if (platform.Value.ContainsCollider((BoxCollider2D)raycastHit2D.collider)) + { + m_platforms[platform.Key].AddPlatformPoint(raycastHit2D.point); + break; + } + } + } + } + } + + private void Update() + { + if (inited) + { + FindClosestPlatform(base.transform.position); + Vector2 vector = m_playerAPI.OtherPlayerPosition() - base.transform.position; + float magnitude = vector.magnitude; + vector.Normalize(); + Vector2 normalized = (vector + new Vector2(0f, 0.15f)).normalized; + m_playerAPI.SetAimDirection(normalized); + Vector2 position = new Vector2(base.transform.position.x, base.transform.position.y) + vector * 1.5f; + bool num = m_currentPlatform.IsPositionOutsidePlatform(position); + m_playerAPI.Move(m_playerAPI.TowardsOtherPlayer()); + if (num) + { + m_playerAPI.Jump(); + } + vector.y = 0f; + vector.Normalize(); + RaycastHit2D raycastHit2D = Physics2D.Raycast(base.transform.position, vector, 0.85f, m_layerMask); + RaycastHit2D raycastHit2D2 = Physics2D.Raycast(base.transform.position, vector, magnitude, m_layerMask); + if ((bool)raycastHit2D.collider) + { + m_playerAPI.Jump(); + } + if (raycastHit2D2.collider == null) + { + m_playerAPI.Attack(); + } + m_playerAPI.Block(); + } + } + + private void FindClosestPlatform(Vector2 position) + { + float num = float.MaxValue; + foreach (KeyValuePair platform in m_platforms) + { + float closestDistance = platform.Value.GetClosestDistance(position); + if (closestDistance < num) + { + m_currentPlatform = platform.Value; + num = closestDistance; + } + } + } +} diff --git a/GameCode/BuildOnly.cs b/GameCode/BuildOnly.cs new file mode 100644 index 0000000..48988a5 --- /dev/null +++ b/GameCode/BuildOnly.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +public class BuildOnly : MonoBehaviour +{ + private void Start() + { + if (Application.isEditor) + { + base.gameObject.SetActive(value: false); + } + } +} diff --git a/GameCode/BulletBase.cs b/GameCode/BulletBase.cs new file mode 100644 index 0000000..446970a --- /dev/null +++ b/GameCode/BulletBase.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +public class BulletBase : MonoBehaviour +{ + private void Start() + { + } + + private void Update() + { + } +} diff --git a/GameCode/BulletDamageEvents.cs b/GameCode/BulletDamageEvents.cs new file mode 100644 index 0000000..09dae56 --- /dev/null +++ b/GameCode/BulletDamageEvents.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +public class BulletDamageEvents : MonoBehaviour +{ + public DmgEvent[] damageEvents; + + public void Start() + { + ProjectileHit componentInParent = GetComponentInParent(); + for (int i = 0; i < damageEvents.Length; i++) + { + if (componentInParent.damage > damageEvents[i].dmg) + { + damageEvents[i].eventToCall.Invoke(); + } + } + } +} diff --git a/GameCode/BulletPoint.cs b/GameCode/BulletPoint.cs new file mode 100644 index 0000000..d7a9157 --- /dev/null +++ b/GameCode/BulletPoint.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; + +public class BulletPoint : MonoBehaviour +{ + public LayerMask mask; + + private Gun gun; + + private MoveTransform move; + + private ProjectileHit hit; + + private float counter = 5f; + + private void Start() + { + gun = GetComponent(); + Gun obj = gun; + obj.ShootPojectileAction = (Action)Delegate.Combine(obj.ShootPojectileAction, new Action(Fire)); + } + + private void Attack() + { + gun.Attack(1f, forceAttack: true); + } + + private void Fire(GameObject projectile) + { + move = projectile.GetComponent(); + } + + private void Update() + { + if ((bool)move) + { + counter = 0f; + Vector3 vector = base.transform.position - base.transform.root.position; + RaycastHit2D raycastHit2D = Physics2D.Raycast(base.transform.root.position, vector, vector.magnitude, mask, -10000f); + Vector3 vector2 = base.transform.position; + if (raycastHit2D.transform != null) + { + vector2 = raycastHit2D.point - (Vector2)vector.normalized * 0.1f; + } + move.velocity = Vector2.Lerp(move.velocity, (vector2 - move.transform.position) * 50f, TimeHandler.deltaTime * 50f); + } + else + { + counter += TimeHandler.deltaTime; + if (counter > 2f) + { + Attack(); + } + } + } +} diff --git a/GameCode/BulletSurf.cs b/GameCode/BulletSurf.cs new file mode 100644 index 0000000..23579ee --- /dev/null +++ b/GameCode/BulletSurf.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +public class BulletSurf : MonoBehaviour +{ + private void Start() + { + } + + private void Update() + { + } +} diff --git a/GameCode/BulletWrapper.cs b/GameCode/BulletWrapper.cs new file mode 100644 index 0000000..1229787 --- /dev/null +++ b/GameCode/BulletWrapper.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +public class BulletWrapper +{ + public float damage; + + public Vector2 velocity; + + public ProjectileHit projectileHit; + + public MoveTransform projectileMovement; +} diff --git a/GameCode/CameraZoomHandler.cs b/GameCode/CameraZoomHandler.cs new file mode 100644 index 0000000..56c8b86 --- /dev/null +++ b/GameCode/CameraZoomHandler.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +public class CameraZoomHandler : MonoBehaviour +{ + private Camera[] cameras; + + private void Start() + { + cameras = GetComponentsInChildren(); + } + + private void Update() + { + float b = 20f; + if (MapManager.instance.currentMap != null) + { + b = MapManager.instance.currentMap.Map.size; + } + for (int i = 0; i < cameras.Length; i++) + { + cameras[i].orthographicSize = Mathf.Lerp(cameras[i].orthographicSize, b, Time.unscaledDeltaTime * 5f); + } + } +} diff --git a/GameCode/CanSeeInfo.cs b/GameCode/CanSeeInfo.cs new file mode 100644 index 0000000..947131d --- /dev/null +++ b/GameCode/CanSeeInfo.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +public class CanSeeInfo +{ + public bool canSee; + + public Vector2 hitPoint; + + public float distance; +} diff --git a/GameCode/CapScale.cs b/GameCode/CapScale.cs new file mode 100644 index 0000000..bcb62a0 --- /dev/null +++ b/GameCode/CapScale.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +public class CapScale : MonoBehaviour +{ + public float min = 2f; + + public float max = 10f; + + private void Start() + { + if (base.transform.localScale.x < min) + { + base.transform.localScale = Vector3.one * min; + } + if (base.transform.localScale.x > max) + { + base.transform.localScale = Vector3.one * max; + } + } +} diff --git a/GameCode/CappedDeltaTime.cs b/GameCode/CappedDeltaTime.cs new file mode 100644 index 0000000..8bb24c6 --- /dev/null +++ b/GameCode/CappedDeltaTime.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +public class CappedDeltaTime : MonoBehaviour +{ + public static float time; + + private void Update() + { + time = Mathf.Clamp(TimeHandler.deltaTime, 0f, 0.02f); + } +} diff --git a/GameCode/CardAnimation.cs b/GameCode/CardAnimation.cs new file mode 100644 index 0000000..3578ec6 --- /dev/null +++ b/GameCode/CardAnimation.cs @@ -0,0 +1,5 @@ +using UnityEngine; + +public class CardAnimation : MonoBehaviour +{ +} diff --git a/GameCode/CardAudioModifier.cs b/GameCode/CardAudioModifier.cs new file mode 100644 index 0000000..f6206c0 --- /dev/null +++ b/GameCode/CardAudioModifier.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +public class CardAudioModifier : MonoBehaviour +{ + public enum StackType + { + RTPCValue, + PostEvent + } + + public string stackName; + + public StackType stackType; +} diff --git a/GameCode/CardBar.cs b/GameCode/CardBar.cs new file mode 100644 index 0000000..e985288 --- /dev/null +++ b/GameCode/CardBar.cs @@ -0,0 +1,95 @@ +using Sonigon; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +public class CardBar : MonoBehaviour +{ + [Header("Sounds")] + public SoundEvent soundCardPick; + + [Header("Settings")] + public GameObject pointer; + + [Header("Settings")] + public GameObject cardPos; + + private GameObject source; + + private CardInfo ci; + + private GameObject currentCard; + + private void Start() + { + source = base.transform.GetChild(0).gameObject; + } + + public void ClearBar() + { + if ((bool)currentCard) + { + Object.Destroy(currentCard); + } + for (int num = base.transform.childCount - 1; num >= 0; num--) + { + if (base.transform.GetChild(num).gameObject.activeSelf) + { + Object.Destroy(base.transform.GetChild(num).gameObject); + } + } + } + + public void AddCard(CardInfo card) + { + SoundManager.Instance.Play(soundCardPick, base.transform); + ci = card; + GameObject obj = Object.Instantiate(source, source.transform.position, source.transform.rotation, source.transform.parent); + obj.transform.localScale = Vector3.one; + string cardName = card.cardName; + cardName = cardName.Substring(0, 2); + string text = cardName[0].ToString().ToUpper(); + if (cardName.Length > 1) + { + string text2 = cardName[1].ToString().ToLower(); + cardName = text + text2; + } + else + { + cardName = text; + } + obj.GetComponentInChildren().text = cardName; + obj.GetComponent().card = card; + obj.gameObject.SetActive(value: true); + } + + public void OnHover(CardInfo card, Vector3 hoverPos) + { + if ((bool)currentCard) + { + Object.Destroy(currentCard); + } + currentCard = CardChoice.instance.AddCardVisual(card, cardPos.transform.position); + Collider2D[] componentsInChildren = currentCard.transform.root.GetComponentsInChildren(); + for (int i = 0; i < componentsInChildren.Length; i++) + { + componentsInChildren[i].enabled = false; + } + currentCard.GetComponentInChildren().sortingLayerName = "MostFront"; + currentCard.GetComponentInChildren().enabled = false; + currentCard.GetComponentInChildren().enabled = false; + currentCard.GetComponentInChildren().transform.localScale = Vector3.one * 1.15f; + } + + public void StopHover() + { + if ((bool)currentCard) + { + Object.Destroy(currentCard); + } + } + + private void Update() + { + } +} diff --git a/GameCode/CardBarButton.cs b/GameCode/CardBarButton.cs new file mode 100644 index 0000000..13d9c62 --- /dev/null +++ b/GameCode/CardBarButton.cs @@ -0,0 +1,19 @@ +using UnityEngine; +using UnityEngine.EventSystems; + +public class CardBarButton : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler +{ + internal CardInfo card; + + public void OnPointerEnter(PointerEventData eventData) + { + GetComponentInParent().OnHover(card, base.transform.position); + base.transform.localScale = Vector3.one * 1.1f; + } + + public void OnPointerExit(PointerEventData eventData) + { + GetComponentInParent().StopHover(); + base.transform.localScale = Vector3.one * 1f; + } +} diff --git a/GameCode/CardBarHandler.cs b/GameCode/CardBarHandler.cs new file mode 100644 index 0000000..f6ceea2 --- /dev/null +++ b/GameCode/CardBarHandler.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +public class CardBarHandler : MonoBehaviour +{ + private CardBar[] cardBars; + + public static CardBarHandler instance; + + private void Start() + { + instance = this; + cardBars = GetComponentsInChildren(); + } + + public void AddCard(int teamId, CardInfo card) + { + cardBars[teamId].AddCard(card); + } + + public void ResetCardBards() + { + for (int i = 0; i < cardBars.Length; i++) + { + cardBars[i].ClearBar(); + } + } +} diff --git a/GameCode/CardCategories.cs b/GameCode/CardCategories.cs new file mode 100644 index 0000000..055dc4c --- /dev/null +++ b/GameCode/CardCategories.cs @@ -0,0 +1,5 @@ +using UnityEngine; + +public class CardCategories : MonoBehaviour +{ +} diff --git a/GameCode/CardCategory.cs b/GameCode/CardCategory.cs new file mode 100644 index 0000000..7961b24 --- /dev/null +++ b/GameCode/CardCategory.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +[CreateAssetMenu(fileName = "Card Category", menuName = "Square Brawl/Card Category", order = 1)] +public class CardCategory : ScriptableObject +{ +} diff --git a/GameCode/CardChoice.cs b/GameCode/CardChoice.cs new file mode 100644 index 0000000..ac3ebb8 --- /dev/null +++ b/GameCode/CardChoice.cs @@ -0,0 +1,460 @@ +using System.Collections; +using System.Collections.Generic; +using Photon.Pun; +using SoundImplementation; +using UnityEngine; + +public class CardChoice : MonoBehaviour +{ + private enum StickDirection + { + Left, + Right, + None + } + + public int pickrID = -1; + + public ArtInstance cardPickArt; + + private Transform[] children; + + public CardInfo[] cards; + + public int picks = 6; + + public static CardChoice instance; + + public bool IsPicking; + + private List spawnedCards = new List(); + + public AnimationCurve curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + + private float speed = 4f; + + private bool isPlaying; + + private StickDirection lastStickDirection; + + private int currentlySelectedCard; + + private float counter = 1f; + + private PickerType pickerType; + + public CardThemeColor[] cardThemes; + + private void Awake() + { + instance = this; + } + + private void Start() + { + for (int i = 0; i < cards.Length; i++) + { + PhotonNetwork.PrefabPool.RegisterPrefab(cards[i].gameObject.name, cards[i].gameObject); + } + children = new Transform[base.transform.childCount]; + for (int j = 0; j < children.Length; j++) + { + children[j] = base.transform.GetChild(j); + } + } + + public CardInfo GetSourceCard(CardInfo info) + { + for (int i = 0; i < cards.Length; i++) + { + if (cards[i].cardName == info.cardName) + { + return cards[i]; + } + } + return null; + } + + public void Pick(GameObject pickedCard = null, bool clear = false) + { + if ((bool)pickedCard) + { + pickedCard.GetComponentInChildren().Pick(pickrID, forcePick: false, pickerType); + GetComponent().RPC("RPCA_DoEndPick", RpcTarget.All, CardIDs(), pickedCard.GetComponent().ViewID, pickedCard.GetComponent().theInt, pickrID); + } + else if (PlayerManager.instance.GetPlayerWithID(pickrID).data.view.IsMine) + { + StartCoroutine(ReplaceCards(pickedCard, clear)); + } + } + + private int[] CardIDs() + { + int[] array = new int[spawnedCards.Count]; + for (int i = 0; i < spawnedCards.Count; i++) + { + array[i] = spawnedCards[i].GetComponent().ViewID; + } + return array; + } + + private List CardFromIDs(int[] cardIDs) + { + List list = new List(); + for (int i = 0; i < cardIDs.Length; i++) + { + list.Add(PhotonNetwork.GetPhotonView(cardIDs[i]).gameObject); + } + return list; + } + + [PunRPC] + private void RPCA_DoEndPick(int[] cardIDs, int targetCardID, int theInt = 0, int pickId = -1) + { + GameObject pickedCard = PhotonNetwork.GetPhotonView(targetCardID).gameObject; + spawnedCards = CardFromIDs(cardIDs); + StartCoroutine(IDoEndPick(pickedCard, theInt, pickId)); + } + + public IEnumerator IDoEndPick(GameObject pickedCard = null, int theInt = 0, int pickId = -1) + { + Vector3 startPos = pickedCard.transform.position; + Vector3 endPos = CardChoiceVisuals.instance.transform.position; + float c2 = 0f; + while (c2 < 1f) + { + CardChoiceVisuals.instance.framesToSnap = 1; + Vector3 position = Vector3.LerpUnclamped(startPos, endPos, curve.Evaluate(c2)); + pickedCard.transform.position = position; + base.transform.GetChild(theInt).position = position; + c2 += Time.deltaTime * speed; + yield return null; + } + GamefeelManager.GameFeel((startPos - endPos).normalized * 2f); + for (int i = 0; i < spawnedCards.Count; i++) + { + if ((bool)spawnedCards[i]) + { + if (spawnedCards[i].gameObject != pickedCard) + { + spawnedCards[i].AddComponent().AddForce((spawnedCards[i].transform.position - endPos) * Random.Range(0f, 50f)); + spawnedCards[i].GetComponent().AddTorque(Random.onUnitSphere * Random.Range(0f, 200f)); + spawnedCards[i].AddComponent().seconds = Random.Range(0.5f, 1f); + spawnedCards[i].GetComponent().shrink = true; + } + else + { + spawnedCards[i].GetComponentInChildren().Leave(); + } + } + } + yield return new WaitForSeconds(0.25f); + AnimationCurve softCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + Vector3 startPos2 = base.transform.GetChild(theInt).transform.position; + Vector3 endPos2 = startPos; + c2 = 0f; + while (c2 < 1f) + { + Vector3 position2 = Vector3.LerpUnclamped(startPos2, endPos2, softCurve.Evaluate(c2)); + base.transform.GetChild(theInt).position = position2; + c2 += Time.deltaTime * speed * 1.5f; + yield return null; + } + SoundPlayerStatic.Instance.PlayPlayerBallDisappear(); + base.transform.GetChild(theInt).position = startPos; + spawnedCards.Clear(); + if (PlayerManager.instance.GetPlayerWithID(pickId).data.view.IsMine) + { + StartCoroutine(ReplaceCards(pickedCard)); + } + } + + private GameObject Spawn(GameObject objToSpawn, Vector3 pos, Quaternion rot) + { + return PhotonNetwork.Instantiate(GetCardPath(objToSpawn), pos, rot, 0); + } + + private string GetCardPath(GameObject targetObj) + { + return targetObj.name; + } + + public GameObject AddCard(CardInfo cardToSpawn) + { + GameObject gameObject = Spawn(cardToSpawn.gameObject, new Vector3(30f, -10f, 0f), Quaternion.identity); + spawnedCards.Add(gameObject); + return gameObject; + } + + public GameObject AddCardVisual(CardInfo cardToSpawn, Vector3 pos) + { + GameObject obj = Object.Instantiate(cardToSpawn.gameObject, pos, Quaternion.identity); + obj.GetComponentInChildren().firstValueToSet = true; + return obj; + } + + private IEnumerator ReplaceCards(GameObject pickedCard = null, bool clear = false) + { + if (picks > 0) + { + SoundPlayerStatic.Instance.PlayPlayerBallAppear(); + } + isPlaying = true; + if (clear && spawnedCards != null) + { + for (int j = 0; j < spawnedCards.Count; j++) + { + if (pickedCard != spawnedCards[j]) + { + spawnedCards[j].GetComponentInChildren().Leave(); + yield return new WaitForSecondsRealtime(0.1f); + } + } + yield return new WaitForSecondsRealtime(0.2f); + if ((bool)pickedCard) + { + pickedCard.GetComponentInChildren().Pick(); + } + spawnedCards.Clear(); + } + yield return new WaitForSecondsRealtime(0.2f); + if (picks > 0) + { + for (int j = 0; j < children.Length; j++) + { + spawnedCards.Add(SpawnUniqueCard(children[j].transform.position, children[j].transform.rotation)); + spawnedCards[j].AddComponent().theInt = j; + yield return new WaitForSecondsRealtime(0.1f); + } + } + else + { + GetComponent().RPC("RPCA_DonePicking", RpcTarget.All); + } + picks--; + isPlaying = false; + } + + [PunRPC] + private void RPCA_DonePicking() + { + IsPicking = false; + } + + private GameObject GetRanomCard() + { + GameObject result = null; + float num = 0f; + for (int i = 0; i < cards.Length; i++) + { + if (cards[i].rarity == CardInfo.Rarity.Common) + { + num += 10f; + } + if (cards[i].rarity == CardInfo.Rarity.Uncommon) + { + num += 4f; + } + if (cards[i].rarity == CardInfo.Rarity.Rare) + { + num += 1f; + } + } + float num2 = Random.Range(0f, num); + for (int j = 0; j < cards.Length; j++) + { + if (cards[j].rarity == CardInfo.Rarity.Common) + { + num2 -= 10f; + } + if (cards[j].rarity == CardInfo.Rarity.Uncommon) + { + num2 -= 4f; + } + if (cards[j].rarity == CardInfo.Rarity.Rare) + { + num2 -= 1f; + } + if (num2 <= 0f) + { + result = cards[j].gameObject; + break; + } + } + return result; + } + + private GameObject SpawnUniqueCard(Vector3 pos, Quaternion rot) + { + GameObject ranomCard = GetRanomCard(); + CardInfo component = ranomCard.GetComponent(); + Player player = null; + player = ((pickerType != 0) ? PlayerManager.instance.players[pickrID] : PlayerManager.instance.GetPlayersInTeam(pickrID)[0]); + for (int i = 0; i < spawnedCards.Count; i++) + { + bool flag = spawnedCards[i].GetComponent().cardName == ranomCard.GetComponent().cardName; + if (pickrID != -1) + { + Holdable holdable = player.data.GetComponent().holdable; + if ((bool)holdable) + { + Gun component2 = holdable.GetComponent(); + Gun component3 = ranomCard.GetComponent(); + if ((bool)component3 && (bool)component2 && component3.lockGunToDefault && component2.lockGunToDefault) + { + flag = true; + } + } + for (int j = 0; j < player.data.currentCards.Count; j++) + { + CardInfo component4 = player.data.currentCards[j].GetComponent(); + for (int k = 0; k < component4.blacklistedCategories.Length; k++) + { + for (int l = 0; l < component.categories.Length; l++) + { + if (component.categories[l] == component4.blacklistedCategories[k]) + { + flag = true; + } + } + } + if (!component4.allowMultiple && component.cardName == component4.cardName) + { + flag = true; + } + } + } + if (flag) + { + return SpawnUniqueCard(pos, rot); + } + } + GameObject obj = Spawn(ranomCard.gameObject, pos, rot); + obj.GetComponent().sourceCard = ranomCard.GetComponent(); + obj.GetComponentInChildren().GetComponent().enabled = false; + return obj; + } + + private void Update() + { + counter += Time.deltaTime; + _ = isPlaying; + if (pickrID != -1 && IsPicking) + { + DoPlayerSelect(); + } + if (Application.isEditor && !DevConsole.isTyping && Input.GetKeyDown(KeyCode.N)) + { + picks++; + instance.Pick(null, clear: true); + } + } + + private void DoPlayerSelect() + { + SoundMusicManager.Instance.PlayIngame(isCard: true); + if (spawnedCards.Count == 0 || pickrID == -1) + { + return; + } + PlayerActions[] array = null; + array = ((pickerType != 0) ? PlayerManager.instance.GetActionsFromPlayer(pickrID) : PlayerManager.instance.GetActionsFromTeam(pickrID)); + if (array == null) + { + Pick(spawnedCards[0]); + return; + } + StickDirection stickDirection = StickDirection.None; + for (int i = 0; i < array.Length; i++) + { + if (array[i] == null) + { + continue; + } + if (array[i].Right.Value > 0.7f) + { + stickDirection = StickDirection.Right; + } + if (array[i].Left.Value > 0.7f) + { + stickDirection = StickDirection.Left; + } + currentlySelectedCard = Mathf.Clamp(currentlySelectedCard, 0, spawnedCards.Count - 1); + for (int j = 0; j < spawnedCards.Count; j++) + { + if ((bool)spawnedCards[j] && (spawnedCards[j].GetComponentInChildren().isSelected != (currentlySelectedCard == j) || counter > 0.2f)) + { + counter = 0f; + spawnedCards[j].GetComponent().RPC("RPCA_ChangeSelected", RpcTarget.All, currentlySelectedCard == j); + } + } + if (array[i].Jump.WasPressed && !isPlaying && spawnedCards[currentlySelectedCard] != null) + { + Pick(spawnedCards[currentlySelectedCard]); + pickrID = -1; + break; + } + } + if (stickDirection != lastStickDirection) + { + if (stickDirection == StickDirection.Left) + { + currentlySelectedCard--; + } + if (stickDirection == StickDirection.Right) + { + currentlySelectedCard++; + } + lastStickDirection = stickDirection; + } + if (CardChoiceVisuals.instance.currentCardSelected != currentlySelectedCard) + { + CardChoiceVisuals.instance.SetCurrentSelected(currentlySelectedCard); + } + } + + public IEnumerator DoPick(int picksToSet, int picketIDToSet, PickerType pType = PickerType.Team) + { + pickerType = pType; + StartPick(picksToSet, picketIDToSet); + while (IsPicking) + { + yield return null; + } + UIHandler.instance.StopShowPicker(); + CardChoiceVisuals.instance.Hide(); + } + + public void StartPick(int picksToSet, int pickerIDToSet) + { + pickrID = pickerIDToSet; + IsPicking = true; + picks = picksToSet; + ArtHandler.instance.SetSpecificArt(cardPickArt); + Pick(); + } + + public Color GetCardColor(CardThemeColor.CardThemeColorType colorType) + { + for (int i = 0; i < cardThemes.Length; i++) + { + if (cardThemes[i].themeType == colorType) + { + return cardThemes[i].targetColor; + } + } + return Color.black; + } + + public Color GetCardColor2(CardThemeColor.CardThemeColorType colorType) + { + for (int i = 0; i < cardThemes.Length; i++) + { + if (cardThemes[i].themeType == colorType) + { + return cardThemes[i].bgColor; + } + } + return Color.black; + } +} diff --git a/GameCode/CardChoiceVisuals.cs b/GameCode/CardChoiceVisuals.cs new file mode 100644 index 0000000..bf09e08 --- /dev/null +++ b/GameCode/CardChoiceVisuals.cs @@ -0,0 +1,162 @@ +using System.Collections; +using Photon.Pun; +using Sonigon; +using UnityEngine; + +public class CardChoiceVisuals : MonoBehaviour +{ + [Header("Sounds")] + public SoundEvent soundCardSwitch; + + public static CardChoiceVisuals instance; + + [Header("Settings")] + public int currentCardSelected; + + public GameObject cardParent; + + public Transform leftHandTarget; + + public Transform rightHandTarget; + + public Transform shieldGem; + + private Vector3 leftHandRestPos; + + private Vector3 rightHandRestPos; + + private Vector3 leftHandVel; + + private Vector3 rightHandVel; + + public float spring = 40f; + + public float drag = 10f; + + public float sway = 1f; + + public float swaySpeed = 1f; + + public int framesToSnap; + + private bool isShowinig; + + private GameObject currentSkin; + + private void Awake() + { + instance = this; + leftHandRestPos = leftHandTarget.position; + rightHandRestPos = rightHandTarget.position; + } + + private void Start() + { + } + + private void Update() + { + if (!isShowinig || Time.unscaledDeltaTime > 0.1f || currentCardSelected >= cardParent.transform.childCount || currentCardSelected < 0) + { + return; + } + if (rightHandTarget.position.x == float.NaN || rightHandTarget.position.y == float.NaN || rightHandTarget.position.z == float.NaN) + { + rightHandTarget.position = Vector3.zero; + rightHandVel = Vector3.zero; + } + if (leftHandTarget.position.x == float.NaN || leftHandTarget.position.y == float.NaN || leftHandTarget.position.z == float.NaN) + { + leftHandTarget.position = Vector3.zero; + leftHandVel = Vector3.zero; + } + GameObject obj = cardParent.transform.GetChild(currentCardSelected).gameObject; + Vector3 zero = Vector3.zero; + zero = obj.transform.GetChild(0).position; + if (currentCardSelected < 2) + { + leftHandVel += (zero - leftHandTarget.position) * spring * Time.unscaledDeltaTime; + leftHandVel -= leftHandVel * Time.unscaledDeltaTime * drag; + rightHandVel += (rightHandRestPos - rightHandTarget.position) * spring * Time.unscaledDeltaTime * 0.5f; + rightHandVel -= rightHandVel * Time.unscaledDeltaTime * drag * 0.5f; + rightHandVel += sway * new Vector3(-0.5f + Mathf.PerlinNoise(Time.unscaledTime * swaySpeed, 0f), -0.5f + Mathf.PerlinNoise(Time.unscaledTime * swaySpeed + 100f, 0f), 0f) * Time.unscaledDeltaTime; + shieldGem.transform.position = rightHandTarget.position; + if (framesToSnap > 0) + { + leftHandTarget.position = zero; + } + } + else + { + rightHandVel += (zero - rightHandTarget.position) * spring * Time.unscaledDeltaTime; + rightHandVel -= rightHandVel * Time.unscaledDeltaTime * drag; + leftHandVel += (leftHandRestPos - leftHandTarget.position) * spring * Time.unscaledDeltaTime * 0.5f; + leftHandVel -= leftHandVel * Time.unscaledDeltaTime * drag * 0.5f; + leftHandVel += sway * new Vector3(-0.5f + Mathf.PerlinNoise(Time.unscaledTime * swaySpeed, Time.unscaledTime * swaySpeed), -0.5f + Mathf.PerlinNoise(Time.unscaledTime * swaySpeed + 100f, Time.unscaledTime * swaySpeed + 100f), 0f) * Time.unscaledDeltaTime; + shieldGem.transform.position = leftHandTarget.position; + if (framesToSnap > 0) + { + rightHandTarget.position = zero; + } + } + framesToSnap--; + leftHandTarget.position += leftHandVel * Time.unscaledDeltaTime; + rightHandTarget.position += rightHandVel * Time.unscaledDeltaTime; + } + + public void Show(int pickerID = 0, bool animateIn = false) + { + isShowinig = true; + base.transform.GetChild(0).gameObject.SetActive(value: true); + if (animateIn) + { + GetComponent().PlayIn(); + } + else + { + base.transform.localScale = Vector3.one * 33f; + } + if ((bool)currentSkin) + { + Object.Destroy(currentSkin); + } + if (PlayerManager.instance.players[pickerID].data.view.IsMine) + { + PlayerFace playerFace = null; + playerFace = ((!PhotonNetwork.OfflineMode) ? CharacterCreatorHandler.instance.selectedPlayerFaces[0] : CharacterCreatorHandler.instance.selectedPlayerFaces[pickerID]); + GetComponent().RPC("RPCA_SetFace", RpcTarget.All, playerFace.eyeID, playerFace.eyeOffset, playerFace.mouthID, playerFace.mouthOffset, playerFace.detailID, playerFace.detailOffset, playerFace.detail2ID, playerFace.detail2Offset); + } + currentSkin = Object.Instantiate(PlayerSkinBank.GetPlayerSkinColors(pickerID).gameObject, base.transform.GetChild(0).transform.position, Quaternion.identity, base.transform.GetChild(0).transform); + currentSkin.GetComponentInChildren().Play(); + leftHandTarget.position = base.transform.GetChild(0).position; + rightHandTarget.position = base.transform.GetChild(0).position; + leftHandVel *= 0f; + rightHandVel *= 0f; + StopAllCoroutines(); + } + + public void Hide() + { + GetComponent().PlayOut(); + StartCoroutine(DelayHide()); + } + + private IEnumerator DelayHide() + { + yield return new WaitForSecondsRealtime(0.3f); + base.transform.GetChild(0).gameObject.SetActive(value: false); + isShowinig = false; + } + + internal void SetCurrentSelected(int toSet) + { + GetComponent().RPC("RPCA_SetCurrentSelected", RpcTarget.All, toSet); + } + + [PunRPC] + internal void RPCA_SetCurrentSelected(int toSet) + { + SoundManager.Instance.Play(soundCardSwitch, base.transform); + currentCardSelected = toSet; + } +} diff --git a/GameCode/CardInfo.cs b/GameCode/CardInfo.cs new file mode 100644 index 0000000..e0b39fc --- /dev/null +++ b/GameCode/CardInfo.cs @@ -0,0 +1,68 @@ +using Photon.Pun; +using Sirenix.OdinInspector; +using UnityEngine; + +public class CardInfo : MonoBehaviour +{ + public enum Rarity + { + Common, + Uncommon, + Rare + } + + [Header("Sound Settings")] + public bool soundDisableBlockBasic; + + [Header("Settings")] + public string cardName = ""; + + [TextArea] + public string cardDestription = ""; + + public CardInfoStat[] cardStats; + + public Rarity rarity; + + public GameObject cardArt; + + public Sprite sprite; + + [HideInInspector] + public CardInfo sourceCard; + + public Color cardColor = new Color(0.14509805f, 0.14509805f, 0.14509805f); + + public CardCategory[] categories; + + [FoldoutGroup("Restrictions", 0)] + public bool allowMultiple = true; + + [FoldoutGroup("Restrictions", 0)] + public CardCategory[] blacklistedCategories; + + public GameObject cardBase; + + public CardThemeColor.CardThemeColorType colorTheme; + + private void Awake() + { + sourceCard = CardChoice.instance.GetSourceCard(this); + cardBase = Object.Instantiate(cardBase, base.transform.position, base.transform.rotation); + cardBase.transform.SetParent(base.transform, worldPositionStays: true); + bool charge = false; + Gun component = GetComponent(); + if ((bool)component && component.useCharge) + { + charge = true; + } + cardBase.GetComponent().DrawCard(cardStats, cardName, cardDestription, sprite, charge); + cardBase.GetComponentInChildren().particleSettings.randomColor = cardColor; + } + + [PunRPC] + public void RPCA_ChangeSelected(bool setSelected) + { + GetComponentInChildren().ChangeSelected(setSelected); + } +} diff --git a/GameCode/CardInfoDisplayer.cs b/GameCode/CardInfoDisplayer.cs new file mode 100644 index 0000000..7c19bfe --- /dev/null +++ b/GameCode/CardInfoDisplayer.cs @@ -0,0 +1,61 @@ +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +public class CardInfoDisplayer : MonoBehaviour +{ + public Color negativeColor; + + public Color positiveColor; + + public GameObject statObject; + + public GameObject grid; + + public GameObject chargeObj; + + public TextMeshProUGUI effectText; + + public TextMeshProUGUI nameText; + + public Image icon; + + public void DrawCard(CardInfoStat[] stats, string cardName, string description = "", Sprite image = null, bool charge = false) + { + if (charge) + { + chargeObj.SetActive(value: true); + chargeObj.transform.SetParent(grid.transform, worldPositionStays: true); + } + if (description != "") + { + effectText.text = description; + effectText.gameObject.SetActive(value: true); + effectText.transform.SetParent(grid.transform, worldPositionStays: true); + } + nameText.text = cardName.ToUpper(); + for (int i = 0; i < stats.Length; i++) + { + GameObject obj = Object.Instantiate(statObject, grid.transform.position, grid.transform.rotation, grid.transform); + obj.SetActive(value: true); + obj.transform.localScale = Vector3.one; + TextMeshProUGUI component = obj.transform.GetChild(0).GetComponent(); + TextMeshProUGUI component2 = obj.transform.GetChild(1).GetComponent(); + component.text = stats[i].stat; + if (stats[i].simepleAmount != 0 && !Optionshandler.showCardStatNumbers) + { + component2.text = stats[i].GetSimpleAmount(); + } + else + { + component2.text = stats[i].amount; + } + component2.color = (stats[i].positive ? positiveColor : negativeColor); + } + if ((bool)image) + { + icon.sprite = image; + } + effectText.transform.position += Vector3.up * 0.3f; + } +} diff --git a/GameCode/CardInfoStat.cs b/GameCode/CardInfoStat.cs new file mode 100644 index 0000000..943936c --- /dev/null +++ b/GameCode/CardInfoStat.cs @@ -0,0 +1,69 @@ +using System; + +[Serializable] +public class CardInfoStat +{ + public enum SimpleAmount + { + notAssigned, + aLittleBitOf, + Some, + aLotOf, + aHugeAmountOf, + slightlyLower, + lower, + aLotLower, + slightlySmaller, + smaller + } + + public bool positive; + + public string amount; + + public SimpleAmount simepleAmount; + + public string stat; + + public string GetSimpleAmount() + { + string result = ""; + if (simepleAmount == SimpleAmount.aLittleBitOf) + { + result = "Slightly more "; + } + if (simepleAmount == SimpleAmount.Some) + { + result = "More "; + } + if (simepleAmount == SimpleAmount.aLotOf) + { + result = "A bunch more "; + } + if (simepleAmount == SimpleAmount.aHugeAmountOf) + { + result = "A huge amount of"; + } + if (simepleAmount == SimpleAmount.slightlyLower) + { + result = "Slightly lower "; + } + if (simepleAmount == SimpleAmount.lower) + { + result = "Lower "; + } + if (simepleAmount == SimpleAmount.aLotLower) + { + result = "A lot lower"; + } + if (simepleAmount == SimpleAmount.smaller) + { + result = "Smaller"; + } + if (simepleAmount == SimpleAmount.slightlySmaller) + { + result = "Slightly smaller"; + } + return result; + } +} diff --git a/GameCode/CardRarityColor.cs b/GameCode/CardRarityColor.cs new file mode 100644 index 0000000..3008ae7 --- /dev/null +++ b/GameCode/CardRarityColor.cs @@ -0,0 +1,33 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +public class CardRarityColor : MonoBehaviour +{ + public Color uncommonColor; + + public Color rareColor; + + public Color uncommonColorOff; + + public Color rareColorOff; + + private void Awake() + { + CardVisuals componentInParent = GetComponentInParent(); + componentInParent.toggleSelectionAction = (Action)Delegate.Combine(componentInParent.toggleSelectionAction, new Action(Toggle)); + } + + public void Toggle(bool isOn) + { + CardInfo componentInParent = GetComponentInParent(); + if (componentInParent.rarity == CardInfo.Rarity.Uncommon) + { + GetComponent().color = (isOn ? uncommonColor : uncommonColorOff); + } + if (componentInParent.rarity == CardInfo.Rarity.Rare) + { + GetComponent().color = (isOn ? rareColor : rareColorOff); + } + } +} diff --git a/GameCode/CardThemeColor.cs b/GameCode/CardThemeColor.cs new file mode 100644 index 0000000..780dcd5 --- /dev/null +++ b/GameCode/CardThemeColor.cs @@ -0,0 +1,25 @@ +using System; +using UnityEngine; + +[Serializable] +public class CardThemeColor +{ + public enum CardThemeColorType + { + DestructiveRed, + FirepowerYellow, + DefensiveBlue, + TechWhite, + EvilPurple, + PoisonGreen, + NatureBrown, + ColdBlue, + MagicPink + } + + public CardThemeColorType themeType; + + public Color targetColor; + + public Color bgColor; +} diff --git a/GameCode/CardVisuals.cs b/GameCode/CardVisuals.cs new file mode 100644 index 0000000..483d5d7 --- /dev/null +++ b/GameCode/CardVisuals.cs @@ -0,0 +1,138 @@ +using System; +using Photon.Pun; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +public class CardVisuals : MonoBehaviour +{ + private ScaleShake shake; + + public bool isSelected; + + private GeneralParticleSystem part; + + private Color selectedColor; + + private Color unSelectedColor = new Color(0.1f, 0.1f, 0.1f); + + public Color defaultColor; + + public Color chillColor; + + public Image[] images; + + public TextMeshProUGUI nameText; + + public GameObject statsObj; + + public GameObject[] objectsToToggle; + + private CardAnimation[] cardAnims; + + private CanvasGroup group; + + public bool firstValueToSet; + + public Action toggleSelectionAction; + + private void Start() + { + group = base.transform.Find("Canvas/Front/Grid").GetComponent(); + selectedColor = GetComponentInParent().cardColor; + part = GetComponentInChildren(); + shake = GetComponent(); + Transform transform = base.transform.Find("Canvas/Front/Background/Art"); + CardInfo componentInParent = GetComponentInParent(); + defaultColor = CardChoice.instance.GetCardColor(componentInParent.colorTheme); + selectedColor = CardChoice.instance.GetCardColor2(componentInParent.colorTheme); + if ((bool)componentInParent.cardArt) + { + GameObject obj = UnityEngine.Object.Instantiate(componentInParent.cardArt, transform.transform.position, transform.transform.rotation, transform); + obj.transform.localPosition = Vector3.zero; + obj.transform.SetAsFirstSibling(); + obj.transform.localScale = Vector3.one; + } + cardAnims = GetComponentsInChildren(); + isSelected = !firstValueToSet; + ChangeSelected(firstValueToSet); + } + + public void Leave() + { + UnityEngine.Object.Destroy(base.transform.root.gameObject); + } + + public void Pick() + { + PhotonNetwork.Destroy(base.transform.root.gameObject); + } + + public void ChangeSelected(bool setSelected) + { + if (!part || isSelected == setSelected) + { + return; + } + isSelected = setSelected; + toggleSelectionAction?.Invoke(isSelected); + if (isSelected) + { + part.simulationSpeedMultiplier = 1.25f; + part.particleSettings.randomColor = selectedColor; + shake.targetScale = 1.15f; + group.alpha = 1f; + for (int i = 0; i < images.Length; i++) + { + images[i].color = defaultColor; + } + for (int j = 0; j < objectsToToggle.Length; j++) + { + objectsToToggle[j].SetActive(value: false); + } + for (int k = 0; k < cardAnims.Length; k++) + { + cardAnims[k].enabled = true; + } + nameText.color = defaultColor; + CurveAnimation[] componentsInChildren = GetComponentsInChildren(); + for (int l = 0; l < componentsInChildren.Length; l++) + { + if (componentsInChildren[l].transform.parent != base.transform) + { + componentsInChildren[l].PlayIn(); + } + else if (componentsInChildren[l].currentState != 0) + { + componentsInChildren[l].PlayIn(); + } + } + return; + } + part.simulationSpeedMultiplier = 0.5f; + part.particleSettings.randomColor = unSelectedColor; + shake.targetScale = 0.9f; + group.alpha = 0.15f; + for (int m = 0; m < images.Length; m++) + { + images[m].color = chillColor; + } + for (int n = 0; n < objectsToToggle.Length; n++) + { + objectsToToggle[n].SetActive(value: true); + } + for (int num = 0; num < cardAnims.Length; num++) + { + cardAnims[num].enabled = false; + } + nameText.color = chillColor; + CurveAnimation[] componentsInChildren2 = GetComponentsInChildren(); + for (int num2 = 0; num2 < componentsInChildren2.Length; num2++) + { + if (componentsInChildren2[num2].transform.parent != base.transform) + { + componentsInChildren2[num2].PlayOut(); + } + } + } +} diff --git a/GameCode/ChangeColor.cs b/GameCode/ChangeColor.cs new file mode 100644 index 0000000..a0d61bf --- /dev/null +++ b/GameCode/ChangeColor.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +public class ChangeColor : MonoBehaviour +{ + private void Start() + { + } + + private void Update() + { + } +} diff --git a/GameCode/ChangeDamageMultiplierAfterDistanceTravelled.cs b/GameCode/ChangeDamageMultiplierAfterDistanceTravelled.cs new file mode 100644 index 0000000..7bd1bf8 --- /dev/null +++ b/GameCode/ChangeDamageMultiplierAfterDistanceTravelled.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +public class ChangeDamageMultiplierAfterDistanceTravelled : MonoBehaviour +{ + public float muiltiplier = 2f; + + public float distance = 10f; + + private ProjectileHit hit; + + private MoveTransform move; + + private TrailRenderer trail; + + private void Awake() + { + trail = GetComponentInChildren(); + } + + private void Start() + { + hit = GetComponent(); + move = GetComponent(); + } + + private void Update() + { + if (move.distanceTravelled > distance) + { + hit.damage *= muiltiplier; + hit.shake *= muiltiplier; + if ((bool)trail) + { + trail.widthMultiplier *= 2f; + } + Object.Destroy(this); + } + } +} diff --git a/GameCode/ChannelMessage.cs b/GameCode/ChannelMessage.cs new file mode 100644 index 0000000..2349349 --- /dev/null +++ b/GameCode/ChannelMessage.cs @@ -0,0 +1,3 @@ +using Irc; + +public delegate void ChannelMessage(ChannelMessageEventArgs channelMessageArgs); diff --git a/GameCode/CharacterCreator.cs b/GameCode/CharacterCreator.cs new file mode 100644 index 0000000..55d31ed --- /dev/null +++ b/GameCode/CharacterCreator.cs @@ -0,0 +1,101 @@ +using System; +using UnityEngine; + +public class CharacterCreator : MonoBehaviour +{ + public PlayerFace currentPlayerFace; + + public GameObject objectToEnable; + + public int playerID; + + public int portraitID; + + public bool ready; + + public PlayerActions playerActions; + + public GeneralInput.InputType inputType; + + public MenuControllerHandler.MenuControl currentControl = MenuControllerHandler.MenuControl.Unassigned; + + public MenuControllerHandler.MenuControl lastControl = MenuControllerHandler.MenuControl.Unassigned; + + public Action SwitchAction; + + public CharacterCreatorNavigation nav; + + private void Start() + { + nav = GetComponentInChildren(); + } + + private void Update() + { + if (currentControl != lastControl) + { + SwitchAction?.Invoke(currentControl); + } + lastControl = currentControl; + } + + public void Close() + { + CharacterCreatorHandler.instance.ReleasePortrait(portraitID); + if (playerActions == null) + { + base.gameObject.SetActive(value: false); + MainMenuHandler.instance.Open(); + } + else + { + objectToEnable.SetActive(value: true); + base.gameObject.SetActive(value: false); + } + } + + public void Finish() + { + CharacterCreatorHandler.instance.ReleasePortrait(portraitID); + CharacterCreatorHandler.instance.SetFacePreset(portraitID, currentPlayerFace); + CharacterCreatorHandler.instance.SelectFace(0, currentPlayerFace, portraitID); + if (playerActions == null) + { + base.gameObject.SetActive(value: false); + MainMenuHandler.instance.Open(); + } + else + { + objectToEnable.SetActive(value: true); + base.gameObject.SetActive(value: false); + } + } + + internal void SetOffset(Vector2 offset, CharacterItemType itemType, int slotID) + { + if (itemType == CharacterItemType.Eyes) + { + currentPlayerFace.eyeOffset = offset; + } + if (itemType == CharacterItemType.Mouth) + { + currentPlayerFace.mouthOffset = offset; + } + if (itemType == CharacterItemType.Detail) + { + if (slotID == 0) + { + currentPlayerFace.detailOffset = offset; + } + if (slotID == 1) + { + currentPlayerFace.detail2Offset = offset; + } + } + } + + internal void SpawnFace(PlayerFace currentFace) + { + GetComponentInChildren().SpawnPlayerFace(currentFace); + } +} diff --git a/GameCode/CharacterCreatorButtonSpawner.cs b/GameCode/CharacterCreatorButtonSpawner.cs new file mode 100644 index 0000000..9e0fffb --- /dev/null +++ b/GameCode/CharacterCreatorButtonSpawner.cs @@ -0,0 +1,146 @@ +using UnityEngine; + +public class CharacterCreatorButtonSpawner : MonoBehaviour +{ + public GameObject sourceButton; + + private CharacterCreatorItemLoader loader; + + private CharacterCreator creator; + + private void Start() + { + creator = GetComponent(); + loader = CharacterCreatorItemLoader.instance; + OpenMenu(CharacterItemType.Eyes, 0); + } + + public void OpenMenu(int id) + { + if (id == 0) + { + OpenMenu(CharacterItemType.Eyes, 0); + } + if (id == 1) + { + OpenMenu(CharacterItemType.Mouth, 0); + } + if (id == 2) + { + OpenMenu(CharacterItemType.Detail, 0); + } + if (id == 3) + { + OpenMenu(CharacterItemType.Detail, 1); + } + } + + public void OpenMenu(CharacterItemType target, int slotNr) + { + CharacterItem[] array = null; + if (target == CharacterItemType.Eyes) + { + array = loader.eyes; + } + if (target == CharacterItemType.Mouth) + { + array = loader.mouths; + } + if (target == CharacterItemType.Detail) + { + array = loader.accessories; + } + for (int i = 0; i < sourceButton.transform.parent.childCount; i++) + { + if (sourceButton.transform.parent.GetChild(i).gameObject.activeSelf) + { + Object.Destroy(sourceButton.transform.parent.GetChild(i).gameObject); + } + } + for (int j = 0; j < array.Length; j++) + { + GameObject gameObject = Object.Instantiate(sourceButton, sourceButton.transform.parent); + gameObject.SetActive(value: true); + Transform parent = gameObject.transform.Find("ItemParent"); + GameObject gameObject2 = Object.Instantiate(array[j].gameObject, parent); + gameObject.GetComponent().itemType = target; + gameObject.GetComponent().slotNr = slotNr; + gameObject.GetComponentInChildren().sprite = array[j].gameObject.GetComponent().sprite; + gameObject2.GetComponentInChildren().GetComponent().sortingOrder = array[j].gameObject.GetComponent().sortingOrder; + gameObject2.GetComponentInChildren().scale = array[j].scale; + gameObject2.GetComponentInChildren().itemType = target; + gameObject2.GetComponentInChildren().offset = array[j].offset; + gameObject2.GetComponentInChildren().slotNr = slotNr; + gameObject2.GetComponentInChildren().transform.localPosition = array[j].offset; + gameObject2.GetComponentInChildren().transform.localScale = array[j].scale * Vector2.one; + if (target == CharacterItemType.Eyes && j == creator.currentPlayerFace.eyeID) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + if (target == CharacterItemType.Mouth && j == creator.currentPlayerFace.mouthID) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + if (target == CharacterItemType.Detail && j == creator.currentPlayerFace.detailID && slotNr == 0) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + if (target == CharacterItemType.Detail && slotNr == 1 && j == creator.currentPlayerFace.detail2ID) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + } + } + + public void SelectButton(CharacterItemType itemType, int slotNr) + { + for (int i = 0; i < sourceButton.transform.parent.childCount; i++) + { + GameObject gameObject = sourceButton.transform.parent.GetChild(i).gameObject; + if (itemType == CharacterItemType.Eyes) + { + if (i - 1 == creator.currentPlayerFace.eyeID) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + else + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: false); + } + } + if (itemType == CharacterItemType.Mouth) + { + if (i - 1 == creator.currentPlayerFace.mouthID) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + else + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: false); + } + } + if (itemType == CharacterItemType.Detail) + { + if (i - 1 == creator.currentPlayerFace.detailID && slotNr == 0) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + else + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: false); + } + } + if (itemType == CharacterItemType.Detail && slotNr == 1) + { + if (i - 1 == creator.currentPlayerFace.detail2ID) + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: true); + } + else + { + gameObject.transform.Find("SelectedDot").gameObject.SetActive(value: false); + } + } + } + } +} diff --git a/GameCode/CharacterCreatorDragging.cs b/GameCode/CharacterCreatorDragging.cs new file mode 100644 index 0000000..21ec9f1 --- /dev/null +++ b/GameCode/CharacterCreatorDragging.cs @@ -0,0 +1,116 @@ +using InControl; +using UnityEngine; + +public class CharacterCreatorDragging : MonoBehaviour +{ + public Vector2 rightStick; + + private CharacterCreator creator; + + private Transform draggedObject; + + private Vector2 lastMouse = Vector3.zero; + + private void Start() + { + creator = GetComponentInParent(); + } + + private void Update() + { + if (creator.inputType == GeneralInput.InputType.Keyboard || creator.inputType == GeneralInput.InputType.Either) + { + DoMouse(); + } + if (creator.inputType == GeneralInput.InputType.Controller || creator.inputType == GeneralInput.InputType.Either) + { + DoController(); + } + } + + private void DoController() + { + int num = -1; + int barPos = creator.nav.barPos; + for (int i = 0; i < base.transform.childCount; i++) + { + CharacterItem component = base.transform.GetChild(i).GetComponent(); + if (barPos == 0 && component.itemType == CharacterItemType.Eyes) + { + num = i; + } + if (barPos == 1 && component.itemType == CharacterItemType.Mouth) + { + num = i; + } + if (barPos == 2 && component.itemType == CharacterItemType.Detail && component.slotNr == 0) + { + num = i; + } + if (barPos == 3 && component.itemType == CharacterItemType.Detail && component.slotNr == 1) + { + num = i; + } + } + if (num >= base.transform.childCount) + { + return; + } + Vector2 vector = Vector2.zero; + if (creator.playerActions != null) + { + vector = creator.playerActions.Aim.Value; + } + else + { + for (int j = 0; j < InputManager.ActiveDevices.Count; j++) + { + vector = InputManager.ActiveDevices[j].RightStick.Value; + } + } + base.transform.GetChild(num).transform.position += (Vector3)vector * Time.deltaTime * 3f; + if (vector != Vector2.zero) + { + CharacterItem component2 = base.transform.GetChild(num).GetComponent(); + Vector2 offset = (Vector2)base.transform.GetChild(num).localPosition - component2.offset; + creator.SetOffset(offset, component2.itemType, component2.slotNr); + } + } + + private void DoMouse() + { + Vector2 vector = MainCam.instance.cam.ScreenToWorldPoint(Input.mousePosition); + if (Input.GetKeyDown(KeyCode.Mouse0)) + { + float num = 2f; + int num2 = -1; + for (int i = 0; i < base.transform.childCount; i++) + { + float num3 = Vector2.Distance(vector, base.transform.GetChild(i).transform.position); + Debug.DrawLine(vector, base.transform.GetChild(i).GetComponent().bounds.center, Color.red, 2f); + if (num3 < num) + { + num = num3; + num2 = i; + } + } + if (num2 != -1) + { + draggedObject = base.transform.GetChild(num2); + } + } + if (Input.GetKeyUp(KeyCode.Mouse0) && (bool)draggedObject) + { + CharacterItem component = draggedObject.GetComponent(); + Vector2 offset = (Vector2)draggedObject.transform.localPosition - component.offset; + creator.SetOffset(offset, component.itemType, component.slotNr); + draggedObject = null; + } + if ((bool)draggedObject) + { + draggedObject.transform.position += (Vector3)(vector - lastMouse); + draggedObject.transform.localPosition = Vector2.ClampMagnitude(draggedObject.transform.localPosition, 4.5f); + } + lastMouse = vector; + } +} diff --git a/GameCode/CharacterCreatorHandler.cs b/GameCode/CharacterCreatorHandler.cs new file mode 100644 index 0000000..1dd23c7 --- /dev/null +++ b/GameCode/CharacterCreatorHandler.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +public class CharacterCreatorHandler : MonoBehaviour +{ + public static CharacterCreatorHandler instance; + + public PlayerFace[] playerFaces = new PlayerFace[10]; + + public PlayerFace[] selectedPlayerFaces = new PlayerFace[4]; + + public int[] selectedFaceID = new int[4]; + + public List lockedPortraits; + + public Action lockedPortraitAction; + + public Action faceWasUpdatedAction; + + public void LockPortrait(int portrait) + { + lockedPortraits.Add(portrait); + lockedPortraitAction?.Invoke(); + } + + public void ReleasePortrait(int porttrait) + { + for (int i = 0; i < lockedPortraits.Count; i++) + { + if (porttrait == lockedPortraits[i]) + { + lockedPortraits.RemoveAt(i); + break; + } + } + lockedPortraitAction?.Invoke(); + } + + private void ReleaseAllPortraits() + { + lockedPortraits.Clear(); + lockedPortraitAction?.Invoke(); + } + + private void Awake() + { + instance = this; + for (int i = 0; i < playerFaces.Length; i++) + { + playerFaces[i].LoadFace(i.ToString()); + } + for (int j = 0; j < selectedFaceID.Length; j++) + { + selectedFaceID[j] = PlayerPrefs.GetInt("SelectedFace" + j); + SelectFace(j, playerFaces[selectedFaceID[j]], selectedFaceID[j]); + } + } + + internal void SelectFace(int faceID, PlayerFace selectedFace, int faceSlot) + { + selectedFaceID[faceID] = faceSlot; + PlayerPrefs.SetInt("SelectedFace" + faceID, selectedFaceID[faceID]); + selectedPlayerFaces[faceID] = selectedFace; + } + + public PlayerFace GetFacePreset(int faceID) + { + return playerFaces[faceID]; + } + + public bool SomeoneIsEditing() + { + for (int i = 0; i < base.transform.childCount; i++) + { + if (base.transform.GetChild(i).gameObject.activeSelf) + { + return true; + } + } + return false; + } + + internal void SetFacePreset(int faceID, PlayerFace currentPlayerFace) + { + playerFaces[faceID] = PlayerFace.CopyFace(currentPlayerFace); + playerFaces[faceID].SaveFace(faceID.ToString()); + faceWasUpdatedAction?.Invoke(faceID); + } + + public void EditCharacterLocalMultiplayer(int playerId, int portraitID, GameObject objectToEnable, PlayerFace currentFace) + { + LockPortrait(portraitID); + CharacterCreator component = base.transform.GetChild(playerId + 1).GetComponent(); + component.playerActions = PlayerManager.instance.players[playerId].data.playerActions; + component.inputType = PlayerManager.instance.players[playerId].data.input.inputType; + component.gameObject.SetActive(value: true); + component.playerID = playerId; + component.objectToEnable = objectToEnable; + component.currentPlayerFace = currentFace; + component.portraitID = portraitID; + component.SpawnFace(currentFace); + } + + public void EditCharacterPortrait(int portraitID, PlayerFace currentFace) + { + LockPortrait(portraitID); + MainMenuHandler.instance.Close(); + CharacterCreator component = base.transform.GetChild(0).GetComponent(); + component.inputType = GeneralInput.InputType.Either; + component.currentPlayerFace = currentFace; + component.gameObject.SetActive(value: true); + component.playerID = 0; + component.portraitID = portraitID; + component.SpawnFace(currentFace); + } + + public void CloseMenus() + { + for (int i = 0; i < base.transform.childCount; i++) + { + base.transform.GetChild(i).GetComponent().Close(); + } + ReleaseAllPortraits(); + } + + public void EndCustomization(int playerId = -1) + { + if (playerId == -1) + { + GetComponentInChildren(includeInactive: true).Finish(); + base.transform.GetChild(0).gameObject.SetActive(value: false); + } + } +} diff --git a/GameCode/CharacterCreatorItemEquipper.cs b/GameCode/CharacterCreatorItemEquipper.cs new file mode 100644 index 0000000..ba03491 --- /dev/null +++ b/GameCode/CharacterCreatorItemEquipper.cs @@ -0,0 +1,130 @@ +using Photon.Pun; +using UnityEngine; + +public class CharacterCreatorItemEquipper : MonoBehaviour +{ + public GameObject itemParent; + + public GameObject defaultEyes; + + public GameObject defaultMouth; + + private CharacterCreatorItemLoader itemLoader; + + private CharacterCreator creator; + + public float scaleM = 1f; + + private bool spawnedSpecific; + + private bool inited; + + private void Start() + { + Init(); + if ((bool)creator && !spawnedSpecific) + { + Equip(defaultEyes.GetComponent(), CharacterItemType.Eyes); + Equip(defaultMouth.GetComponent(), CharacterItemType.Mouth); + } + } + + public void SpawnPlayerFace(PlayerFace newFace) + { + spawnedSpecific = true; + EquipFace(newFace); + } + + private void Init() + { + if (!inited) + { + inited = true; + creator = GetComponent(); + itemLoader = CharacterCreatorItemLoader.instance; + } + } + + [PunRPC] + public void RPCA_SetFace(int eyeID, Vector2 eyeOffset, int mouthID, Vector2 mouthOffset, int detailID, Vector2 detailOffset, int detail2ID, Vector2 detail2Offset) + { + PlayerFace face = PlayerFace.CreateFace(eyeID, eyeOffset, mouthID, mouthOffset, detailID, detailOffset, detail2ID, detail2Offset); + EquipFace(face); + } + + public void EquipFace(PlayerFace face) + { + Init(); + Equip(itemLoader.GetItem(face.eyeID, CharacterItemType.Eyes), CharacterItemType.Eyes, face.eyeOffset); + Equip(itemLoader.GetItem(face.mouthID, CharacterItemType.Mouth), CharacterItemType.Mouth, face.mouthOffset); + Equip(itemLoader.GetItem(face.detailID, CharacterItemType.Detail), CharacterItemType.Detail, face.detailOffset); + Equip(itemLoader.GetItem(face.detail2ID, CharacterItemType.Detail), CharacterItemType.Detail, face.detail2Offset, 1); + } + + public void Equip(CharacterItem newSprite, CharacterItemType itemType, Vector2 offset = default(Vector2), int slotNr = 0) + { + if (newSprite == null) + { + return; + } + Init(); + if ((bool)creator) + { + if (itemType == CharacterItemType.Eyes) + { + creator.currentPlayerFace.eyeID = itemLoader.GetItemID(newSprite, itemType); + } + if (itemType == CharacterItemType.Mouth) + { + creator.currentPlayerFace.mouthID = itemLoader.GetItemID(newSprite, itemType); + } + if (itemType == CharacterItemType.Detail) + { + if (slotNr == 0) + { + creator.currentPlayerFace.detailID = itemLoader.GetItemID(newSprite, itemType); + } + if (slotNr == 1) + { + creator.currentPlayerFace.detail2ID = itemLoader.GetItemID(newSprite, itemType); + } + } + } + Clear(itemType, slotNr); + SpawnItem(newSprite, itemType, offset, slotNr); + CopyChildren[] componentsInChildren = GetComponentsInChildren(); + for (int i = 0; i < componentsInChildren.Length; i++) + { + componentsInChildren[i].DoUpdate(); + } + } + + private void SpawnItem(CharacterItem newSprite, CharacterItemType itemType, Vector2 offset = default(Vector2), int slotNr = 0) + { + GameObject obj = Object.Instantiate(newSprite.gameObject); + obj.gameObject.SetActive(value: true); + obj.transform.SetParent(itemParent.transform); + obj.GetComponent().sprite = newSprite.GetComponent().sprite; + obj.GetComponent().sortingOrder = newSprite.GetComponent().GetComponent().sortingOrder; + obj.GetComponent().itemType = itemType; + obj.GetComponent().color = newSprite.GetComponent().color; + obj.GetComponentInChildren().offset = newSprite.GetComponent().offset; + obj.GetComponentInChildren().sprite = newSprite.GetComponent().sprite; + obj.GetComponentInChildren().slotNr = slotNr; + obj.transform.localScale = newSprite.GetComponent().scale * Vector3.one * scaleM; + obj.transform.localPosition = (newSprite.GetComponent().offset + offset) * scaleM; + creator?.SetOffset(offset, itemType, slotNr); + } + + private void Clear(CharacterItemType itemType, int slotNr = 0) + { + for (int i = 0; i < itemParent.transform.childCount; i++) + { + CharacterItem component = itemParent.transform.GetChild(i).GetComponent(); + if (component.itemType == itemType && component.slotNr == slotNr) + { + Object.DestroyImmediate(itemParent.transform.GetChild(i).gameObject); + } + } + } +} diff --git a/GameCode/CharacterCreatorItemLoader.cs b/GameCode/CharacterCreatorItemLoader.cs new file mode 100644 index 0000000..2a79940 --- /dev/null +++ b/GameCode/CharacterCreatorItemLoader.cs @@ -0,0 +1,77 @@ +using UnityEngine; + +public class CharacterCreatorItemLoader : MonoBehaviour +{ + public CharacterItem[] eyes; + + public CharacterItem[] mouths; + + public CharacterItem[] accessories; + + public static CharacterCreatorItemLoader instance; + + private void Awake() + { + instance = this; + } + + private void Update() + { + } + + internal CharacterItem GetItem(int itemID, CharacterItemType itemType) + { + try + { + return itemType switch + { + CharacterItemType.Eyes => eyes[itemID], + CharacterItemType.Mouth => mouths[itemID], + _ => accessories[itemID], + }; + } + catch + { + return null; + } + } + + internal int GetItemID(CharacterItem newSprite, CharacterItemType itemType) + { + CharacterItem[] array = null; + array = itemType switch + { + CharacterItemType.Eyes => eyes, + CharacterItemType.Mouth => mouths, + _ => accessories, + }; + for (int i = 0; i < array.Length; i++) + { + if (array[i].sprite == newSprite.sprite) + { + return i; + } + } + return -1; + } + + public void UpdateItems(CharacterItemType target, CharacterItem[] items) + { + for (int i = 0; i < items.Length; i++) + { + items[i].sprite = items[i].GetComponent().sprite; + } + if (target == CharacterItemType.Eyes) + { + eyes = items; + } + if (target == CharacterItemType.Mouth) + { + mouths = items; + } + if (target == CharacterItemType.Detail) + { + accessories = items; + } + } +} diff --git a/GameCode/CharacterCreatorNavigation.cs b/GameCode/CharacterCreatorNavigation.cs new file mode 100644 index 0000000..46292e4 --- /dev/null +++ b/GameCode/CharacterCreatorNavigation.cs @@ -0,0 +1,162 @@ +using InControl; +using UnityEngine; +using UnityEngine.UI; + +public class CharacterCreatorNavigation : MonoBehaviour +{ + private int itemsInRow = 7; + + private CharacterCreator creator; + + private Transform grid; + + private Transform bar; + + private GameObject currentObject; + + private GameObject currentBarObject; + + private CharacterCreatorDragging dragging; + + public int x; + + public int y; + + public int barPos; + + private float cd; + + private void Awake() + { + creator = GetComponent(); + dragging = GetComponentInChildren(); + grid = base.transform.GetChild(0).GetChild(0); + bar = base.transform.GetChild(0).GetChild(1); + } + + private void Update() + { + if (creator.playerActions != null) + { + PlayerActionUpdate(creator.playerActions.Device); + } + else if (creator.playerActions == null) + { + creator.currentControl = MenuControllerHandler.menuControl; + for (int i = 0; i < InputManager.ActiveDevices.Count; i++) + { + InputDevice device = InputManager.ActiveDevices[i]; + PlayerActionUpdate(device); + } + } + } + + private void PlayerActionUpdate(InputDevice device) + { + cd += Time.unscaledDeltaTime; + if (device != null) + { + if (device.CommandWasPressed) + { + creator.Finish(); + } + dragging.rightStick = device.RightStick.Value; + GridMovement(device); + BarMovement(device); + } + } + + private void BarMovement(InputDevice device) + { + if (!currentBarObject) + { + MoveNav(0); + } + if (device.LeftTrigger.WasPressed) + { + MoveNav(-1); + } + if (device.RightTrigger.WasPressed) + { + MoveNav(1); + } + } + + private void MoveNav(int delta) + { + cd = 0f; + if (delta > 0) + { + barPos++; + } + if (delta < 0) + { + barPos--; + } + VerifyBarPos(); + } + + private void VerifyBarPos() + { + if ((bool)currentBarObject) + { + currentBarObject.GetComponent().exitEvent.Invoke(); + } + barPos = Mathf.Clamp(barPos, 0, 3); + currentBarObject = bar.GetChild(barPos).gameObject; + currentBarObject.GetComponent().enterEvent.Invoke(); + currentBarObject.GetComponent