Ejemplo n.º 1
0
        public void Initialize()
        {
            if (isInitialized)
            {
                return;
            }
            if (Parent != null && !Parent.IsInitialized)
            {
                return;
            }
            if (gameObject == null)
            {
                return;
            }
            if (SpriteData == null)
            {
                return;
            }

            Type = SpriteData.Type;

            var parent = gameObject.transform.parent;

            if (parent == null)
            {
                //var bb = gameObject.AddComponent<Billboard>();
            }
            else
            {
                Parent = parent.gameObject.GetComponent <RoSpriteAnimator>();
                if (Parent != null)
                {
                    Controllable = Parent.Controllable;
                }
            }

            MeshFilter   = gameObject.AddComponent <MeshFilter>();
            MeshRenderer = gameObject.AddComponent <MeshRenderer>();

            MeshRenderer.sortingOrder = SpriteOrder;
            MeshCollider = gameObject.AddComponent <MeshCollider>();

            SortingGroup = gameObject.GetOrAddComponent <SortingGroup>();

            MeshRenderer.receiveShadows    = false;
            MeshRenderer.lightProbeUsage   = LightProbeUsage.Off;
            MeshRenderer.shadowCastingMode = ShadowCastingMode.Off;

            if (shader == null)
            {
                shader = Shader.Find("Unlit/TestSpriteShader");
            }

            if (shader == null)
            {
                Debug.LogError("Could not find shader Unlit/TestSpriteShader");
            }

            mat             = new Material(shader);
            mat.mainTexture = SpriteData.Atlas;

            SpriteData.Atlas.filterMode = !nextUseSmoothRender ? FilterMode.Bilinear : FilterMode.Point;

            if (Mathf.Approximately(0, SpriteOffset))
            {
                mat.SetFloat("_Offset", SpriteData.Size / 125f);
            }
            else
            {
                mat.SetFloat("_Offset", SpriteOffset);
            }

            MeshRenderer.material = mat;

            if (Parent != null)
            {
                mat.SetFloat("_Offset", Parent.SpriteData.Size / 125f);
            }

            if (AudioSource == null && Parent == null)
            {
                var channel = AudioManager.Instance.Mixer.FindMatchingGroups("Sounds")[0];
                AudioSource = gameObject.AddComponent <AudioSource>();
                AudioSource.spatialBlend          = 0.7f;
                AudioSource.priority              = 60;
                AudioSource.maxDistance           = 40;
                AudioSource.rolloffMode           = AudioRolloffMode.Linear;
                AudioSource.volume                = 1f;
                AudioSource.dopplerLevel          = 0;
                AudioSource.outputAudioMixerGroup = channel;
            }

            if (Type == SpriteType.Player && State == SpriteState.Idle)
            {
                isPaused = true;
            }

            if (ChildrenSprites.Count > 0)
            {
                foreach (var child in ChildrenSprites)
                {
                    child.Initialize();
                }
            }

            meshCache     = SpriteMeshCache.GetMeshCacheForSprite(SpriteData.Name);
            colliderCache = SpriteMeshCache.GetColliderCacheForSprite(SpriteData.Name);
            spriteName    = SpriteData.Name;

            Color = Color.white;
            Alpha = 1;

            isInitialized = true;

            ChangeMotion(CurrentMotion, true);

            if (parent == null)
            {
                UpdateShade();
                CurrentShade = TargetShade;                 //skip fade in at first spawn
            }

            isDirty = true;
        }
Ejemplo n.º 2
0
        public void Update()
        {
            if (Target == null)
            {
                return;
            }

            if (controllable == null)
            {
                controllable = Target.GetComponent <ServerControllable>();
            }

            if (ListenerProbe != null)
            {
                var forward = Camera.main.transform.forward;
                var dist    = Vector3.Distance(Camera.main.transform.position, Target.transform.position);
                ListenerProbe.transform.localPosition = new Vector3(0f, 0f, dist - 10f);
            }

            if (WalkProvider == null)
            {
                WalkProvider = GameObject.FindObjectOfType <RoWalkDataProvider>();
            }

            if (Screen.height != lastHeight)
            {
                UpdateCameraSize();
            }

            if (Input.GetKeyDown(KeyCode.Insert))
            {
                if (controllable.SpriteAnimator.State == SpriteState.Idle || controllable.SpriteAnimator.State == SpriteState.Standby)
                {
                    NetworkManager.Instance.ChangePlayerSitStand(true);
                }
                if (controllable.SpriteAnimator.State == SpriteState.Sit)
                {
                    NetworkManager.Instance.ChangePlayerSitStand(false);
                }
            }

            if (Input.GetKeyDown(KeyCode.S))
            {
                controllable.SpriteAnimator.Standby = true;
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                //Debug.Log(controllable.IsWalking);
                //if(controllable.IsWalking)
                NetworkManager.Instance.StopPlayer();
            }

            if (Input.GetKeyDown(KeyCode.F4))
            {
                NetworkManager.Instance.SkillAttack();
            }

            if (Input.GetMouseButtonDown(1))
            {
                if (Time.timeSinceLevelLoad - LastRightClick < 0.3f)
                {
                    if (Input.GetKey(KeyCode.LeftShift))
                    {
                        Height = 50;
                    }
                    else
                    {
                        TargetRotation = 0f;
                    }
                }

                LastRightClick = Time.timeSinceLevelLoad;
            }

            if (Input.GetMouseButton(1))
            {
                if (Input.GetMouseButton(1) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)))
                {
                    Height -= Input.GetAxis("Mouse Y") / 4;

                    Height = Mathf.Clamp(Height, 0f, 90f);
                }
                else
                {
                    var turnSpeed = 200;
                    TargetRotation += Input.GetAxis("Mouse X") * turnSpeed * Time.deltaTime;
                }
            }

#if !DEBUG
            if (Height > 80)
            {
                Height = 80;
            }
            if (Height < 35)
            {
                Height = 35;
            }
#endif

            DoScreenCast();

            //Rotation += Time.deltaTime * 360;

            if (TargetRotation > 360)
            {
                TargetRotation -= 360;
            }
            if (TargetRotation < 0)
            {
                TargetRotation += 360;
            }

            if (Rotation > 360)
            {
                Rotation -= 360;
            }
            if (Rotation < 0)
            {
                Rotation += 360;
            }

            Rotation = Mathf.LerpAngle(Rotation, TargetRotation, 7.5f * Time.deltaTime);

            var ctrlKey = Input.GetKey(KeyCode.LeftControl) ? 10 : 1;

            Distance += Input.GetAxis("Mouse ScrollWheel") * 20 * ctrlKey;

#if !DEBUG
            if (Distance > 90)
            {
                Distance = 90;
            }
            if (Distance < 30)
            {
                Distance = 30;
            }
#endif

            TargetFollow = Vector3.Lerp(TargetFollow, Target.transform.position, Time.deltaTime * 5f);
            CurLookAt    = TargetFollow;

            var targetHeight = Mathf.Lerp(Target.transform.position.y, WalkProvider.GetHeightForPosition(Target.transform.position), Time.deltaTime * 20f);

            Target.transform.position = new Vector3(Target.transform.position.x, targetHeight, Target.transform.position.z);

            var pos = Quaternion.Euler(Height, Rotation, 0) * Vector3.back * Distance;

            transform.position = CurLookAt + pos;
            transform.LookAt(CurLookAt, Vector3.up);

            if (Input.GetKeyDown(KeyCode.F5))
            {
                NetworkManager.Instance.RandomTeleport();
            }

            if (Input.GetKeyDown(KeyCode.F3))
            {
                UseTTFDamage = !UseTTFDamage;
            }

            if (Input.GetKeyDown(KeyCode.Tab))
            {
                var chunks = GameObject.FindObjectsOfType <RoMapChunk>();
                foreach (var c in chunks)
                {
                    if (c.gameObject.layer == LayerMask.NameToLayer("WalkMap"))
                    {
                        var r = c.gameObject.GetComponent <MeshRenderer>();
                        r.enabled = !r.enabled;
                    }
                }
            }
        }