예제 #1
0
        // Create a Text Popup in the World
        public static void CreateWorldTextPopup(Transform parent, string text, Vector3 localPosition, int fontSize, Color color, Vector3 finalPopupPosition, float popupTime)
        {
            TextMesh  textMesh   = CreateWorldText(parent, text, localPosition, fontSize, color, TextAnchor.LowerLeft, TextAlignment.Left, ordenacaoPadrao);
            Transform transform  = textMesh.transform;
            Vector3   moveAmount = (finalPopupPosition - localPosition) / popupTime;

            FunctionUpdater.Create(delegate() {
                transform.position += moveAmount * Time.deltaTime;
                popupTime          -= Time.deltaTime;
                if (popupTime <= 0f)
                {
                    UnityEngine.Object.Destroy(transform.gameObject);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }, "WorldTextPopup");
        }
예제 #2
0
    private void Start()
    {
        Window_QuestPointer.QuestPointer questPointer_1 = windowQuestPointer.CreatePointer(new Vector3(200, 45), UtilsClass.GetColorFromString("FF0000"), UtilsClass.GetColorFromString("FFFFFF"));
        FunctionUpdater.Create(() => {
            if (Vector3.Distance(Camera.main.transform.position, new Vector3(200, 45)) < 40f)
            {
                windowQuestPointer.DestroyPointer(questPointer_1);
                return(true);
            }
            else
            {
                return(false);
            }
        });

        Window_QuestPointer.QuestPointer questPointer_2 = windowQuestPointer.CreatePointer(new Vector3(190, -32), UtilsClass.GetColorFromString("00FF00"), UtilsClass.GetColorFromString("00FF00"), customArrowSprite, customCrossSprite);
        FunctionUpdater.Create(() => {
            if (Vector3.Distance(Camera.main.transform.position, new Vector3(190, -32)) < 40f)
            {
                windowQuestPointer.DestroyPointer(questPointer_2);
                return(true);
            }
            else
            {
                return(false);
            }
        });

        Window_QuestPointer.QuestPointer questPointer_3 = windowQuestPointer.CreatePointer(new Vector3(-70, 200), UtilsClass.GetColorFromString("FFFFFF"), UtilsClass.GetColorFromString("FFFF00"), customArrowSprite, exclamationPointSprite);
        FunctionUpdater.Create(() => {
            if (Vector3.Distance(Camera.main.transform.position, new Vector3(-70, 200)) < 40f)
            {
                windowQuestPointer.DestroyPointer(questPointer_3);
                return(true);
            }
            else
            {
                return(false);
            }
        });
    }
예제 #3
0
    public void CreateTask()
    {
        GameObject     go             = CreateSprite(UtilityClass.GetMouseWorldPos());
        SpriteRenderer spriteRenderer = go.GetComponent <SpriteRenderer>();
        float          cleanUpTime    = Time.time + 5f;

        taskSystem.EnqueueTask(() =>
        {
            if (Time.time >= cleanUpTime)
            {
                Task task = new Task.ShellFloorCleanUp
                {
                    targetPosition = go.transform.position,
                    cleanUpAction  = () =>
                    {
                        float alpha = 1f;
                        FunctionUpdater.Create(() =>
                        {
                            alpha -= Time.deltaTime;
                            spriteRenderer.color = new Color(1, 1, 1, alpha);
                            if (alpha <= 0f)
                            {
                                Destroy(go);
                                return(true);
                            }
                            else
                            {
                                return(false);
                            }
                        });
                    }
                };
                //taskSystem.AddTask(task);
                return(task);
            }
            else
            {
                return(null);
            }
        });
    }
예제 #4
0
        public static FunctionUpdater CreateMouseDraggingAction(int mouseButton, Action <Vector3> onMouseDragging)
        {
            bool dragging = false;

            return(FunctionUpdater.Create(() =>
            {
                if (Input.GetMouseButtonDown(mouseButton))
                {
                    dragging = true;
                }
                if (Input.GetMouseButtonUp(mouseButton))
                {
                    dragging = false;
                }
                if (dragging)
                {
                    onMouseDragging(UtilsClass.GetMouseWorldPosition());
                }
                return false;
            }));
        }
예제 #5
0
파일: UtilsClass.cs 프로젝트: RoscaS/YAARTS
    // Screen Shake
    public static void ShakeCamera(float intensity, float timer)
    {
        Vector3 lastCameraMovement = Vector3.zero;

        FunctionUpdater.Create(
            delegate() {
            timer -= Time.unscaledDeltaTime;

            Vector3 randomMovement = new Vector3(
                UnityEngine.Random.Range(-1f, 1f),
                UnityEngine.Random.Range(-1f, 1f)
                ).normalized *intensity;

            Camera.main.transform.position = Camera.main.transform.position -
                                             lastCameraMovement + randomMovement;
            lastCameraMovement = randomMovement;
            return(timer <= 0f);
        },
            "CAMERA_SHAKE"
            );
    }
예제 #6
0
    private void CreateWeaponTracer(Vector3 fromPosition, Vector3 targetPosition)
    {
        Vector3 dir = (targetPosition - fromPosition).normalized;

        float eulerZ   = UtilsClass.GetAngleFromVectorFloat(dir) - 90;
        float distance = Vector3.Distance(fromPosition, targetPosition);

        Vector3  tracerSpawnPosition     = fromPosition + dir * distance * .5f;
        Material tmpWeaponTracerMaterial = new Material(WeaponTracerMaterial);

        tmpWeaponTracerMaterial.SetTextureScale("_MainTex", new Vector2(1f, distance / 256f));
        World_Mesh worldMesh = World_Mesh.Create(tracerSpawnPosition, eulerZ, 6f, distance, tmpWeaponTracerMaterial, null, 10000);


        int   frame     = 0;
        float frameRate = 0.016f;
        float timer     = .1f;

        worldMesh.SetUVCoords(new  World_Mesh.UVCoords(0, 0, 16, 256));
        FunctionUpdater.Create(() =>
        {
            timer -= Time.deltaTime;
            if (timer <= 0)
            {
                frame++;
                timer += frameRate;
                if (frame >= 4)
                {
                    worldMesh.DestroySelf();
                    return(true);
                }
                else
                {
                    worldMesh.SetUVCoords(new World_Mesh.UVCoords(16 * frame, 0, 16, 256));
                }
            }

            return(false);
        });
    }
예제 #7
0
    private void CreateWeaponTracer(Vector3 fromPosition, Vector3 targetPosition)
    {//If we want to restrict the angle of fire we can add a check for it here
        float    distance            = Vector3.Distance(fromPosition, targetPosition);
        Vector3  dir                 = (targetPosition - fromPosition).normalized;
        Vector3  tracerSpawnPosition = fromPosition + dir * distance * .5f;
        float    zRot                = GetAngleFromVectorFloat(dir) - 90;
        Material tmp                 = new Material(projectile);

        tmp.SetTextureScale("_MainTex", new Vector2(1f, distance / 600f));
        World_Mesh   worldMesh = World_Mesh.Create(tracerSpawnPosition, zRot, .5f, distance, projectile, null, 10000);
        float        timer     = .1f;
        LayerMask    mask      = LayerMask.GetMask("Default");
        RaycastHit2D hit       = Physics2D.Raycast(tracerSpawnPosition, dir, 10f, mask);

        Debug.DrawRay(tracerSpawnPosition, targetPosition, Color.red);
        if (hit.collider != null)
        {
            Debug.Log("hit" + hit.transform.position);
            GameObject hitObject = hit.transform.gameObject;
            if (hitObject.GetComponent <ReactiveTarget>())
            {
                Debug.Log("saw enemy");
                hitObject.GetComponent <ReactiveTarget>().ReactToHit();
                _scoreController.AddScore(3);
            }
        }
        FunctionUpdater.Create(() =>
        {
            timer -= Time.deltaTime;
            if (timer <= 0)
            {
                worldMesh.DestroySelf();
                return(true);
            }

            return(false);
        });
    }
예제 #8
0
    public static void Create3D(Vector3 fromPosition, Vector3 targetPosition)
    {
        Vector3  shootDir            = (targetPosition - fromPosition).normalized;
        float    distance            = Vector3.Distance(fromPosition, targetPosition);
        float    shootAngle          = UtilsClass.GetAngleFromVectorFloat3D(shootDir);
        Vector3  spawnTracerPosition = fromPosition + shootDir * distance * .5f;
        Material tracerMaterial      = new Material(GameAssets.i.m_WeaponTracer);

        //tracerMaterial.SetTextureScale("_MainTex", new Vector2(1f, distance / 256f));
        tracerMaterial.mainTextureScale = new Vector2(1f, distance / 256f);
        World_Mesh worldMesh = new World_Mesh(null, spawnTracerPosition, new Vector3(1, 1, 1), shootAngle - 90, 1f, distance, tracerMaterial, null, 10000);

        worldMesh.gameObject.transform.eulerAngles = new Vector3(90, 0, shootAngle - 90);

        int frame     = 0;
        int frameBase = 0;

        worldMesh.SetUVCoords(new World_Mesh.UVCoords(16 * frame + 64 * frameBase, 0, 16, 256));
        float framerate = .016f;
        float timer     = framerate;

        FunctionUpdater.Create(delegate {
            timer -= Time.deltaTime;
            if (timer < 0)
            {
                timer += framerate;
                frame++;
                if (frame >= 4)
                {
                    worldMesh.DestroySelf();
                    return(true);
                }
                worldMesh.AddPosition(shootDir * .5f);
                worldMesh.SetUVCoords(new World_Mesh.UVCoords(16 * frame + 64 * frameBase, 0, 16, 256));
            }
            return(false);
        });
    }
예제 #9
0
            // Create a Text Popup in the World
            public static void CreateWorldTextPopup(Transform parent, string text, Vector3 localPosition, int fontSize, Color color, Vector3 finalPopupPosition, float popupTime)
            {
                TextMesh  textMesh   = CreateWorldText(parent, text, localPosition, fontSize, color, TextAnchor.LowerLeft, TextAlignment.Left, LC_Utils.sortingOrderDefault);
                Transform transform  = textMesh.transform;
                Vector3   moveAmount = (finalPopupPosition - localPosition) / popupTime;

                textMesh.gameObject.AddComponent <LookToCamera>();
                FunctionUpdater.Create(delegate() {
                    transform.position += moveAmount * Time.deltaTime;
                    popupTime          -= Time.deltaTime;

                    if (popupTime <= 0f)
                    {
                        UnityEngine.Object.Destroy(transform.gameObject);
                        LC_Debug.RuntimeDebugObjectsManager.debugObjects.Remove(transform.gameObject);
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }, "WorldTextPopup");
            }
예제 #10
0
 public void StartPointerCreation(Transform targets, int day)
 {
     Window_QuestPointer.QuestPointer questPointers = windowQuestPointer.CreatePointer(new Vector3(targets.position.x, targets.position.y, targets.position.z));
     FunctionUpdater.Create(() =>
     {
         #region
         float xDistancia = Camera.main.transform.position.x - targets.position.x;
         float yDistancia = Camera.main.transform.position.y - targets.position.y;
         #endregion
         float distancia = Mathf.Sqrt(xDistancia * xDistancia + yDistancia * yDistancia);
         if (clock.tday == day || (Input.GetKeyDown(KeyCode.E) && (distancia < distance)))
         {
             windowQuestPointer.DestroyPointer(questPointers);
             return(true);
         }
         //Debug.Log("Non E pressed " + (Vector3.Distance(Camera.main.transform.position, new Vector3(targets.position.x, targets.position.y, targets.position.z)) < distance));
         //Debug.Log("Pressing E too " + (Input.GetKeyDown(KeyCode.E) && (Vector3.Distance(Camera.main.transform.position, new Vector3(targets.position.x, targets.position.y, targets.position.z)) < distance)));
         else
         {
             return(false);
         }
     });
 }
예제 #11
0
        private void SpawnFloorShellsWithTask(Vector3 position)
        {
            GameObject     floorShellsGameObject     = SpawnFloorShells(position);
            SpriteRenderer floorShellsSpriteRenderer = floorShellsGameObject.GetComponent <SpriteRenderer>();

            float cleanUpTime = Time.time + 5f;

            taskSystem.EnqueueTask(() => {
                if (Time.time >= cleanUpTime)
                {
                    Task task = new Task.ShellFloorCleanUp {
                        targetPosition = floorShellsGameObject.transform.position,
                        cleanUpAction  = () => {
                            // Clean Up Action, reduce alpha every frame until zero
                            float alpha = 1f;
                            FunctionUpdater.Create(() => {
                                alpha -= Time.deltaTime;
                                floorShellsSpriteRenderer.color = new Color(1, 1, 1, alpha);
                                if (alpha <= 0f)
                                {
                                    return(true);
                                }
                                else
                                {
                                    return(false);
                                }
                            });
                        }
                    };
                    return(task);
                }
                else
                {
                    return(null);
                }
            });
        }
        public TouchWrapper()
        {
            FunctionUpdater.CreateUpdater(() =>
            {
                Update();
            }, "TouchWrapper_U", true, UpdateCycle.NORMAL, int.MinValue);
            FunctionUpdater.CreateUpdater(() =>
            {
                LateUpdate();
            }, "TouchWrapper_LU", true, UpdateCycle.LATE, int.MinValue);

            if (IsMobile == false)
            {
                return;
            }

            OnTouchBegan += (Touch touch) =>
            {
                if (PrevTouchCount == 0)
                {
                    SetMainTouch(touch);
                    OnFirstGroupTouch?.Invoke(touch);
                }
                if (IsFirstTouch())
                {
                    OnFirstFrameTouch?.Invoke(touch);
                }

                TouchPressed = true;
            };

            OnTouchEnded += (Touch touch) => { if (MainTouch.fingerId == touch.fingerId)
                                               {
                                                   ResetMainTouch();
                                               }
            };
        }
예제 #13
0
    // Use this for initialization
    private void Start()
    {
        V_Object           vObject         = CreateBasicUnit(transform, new Vector3(500, 680), 30f, GameAssets.i.m_MarineSpriteSheet);
        V_UnitAnimation    unitAnimation   = vObject.GetLogic <V_UnitAnimation>();
        V_UnitSkeleton     unitSkeleton    = vObject.GetLogic <V_UnitSkeleton>();
        V_IObjectTransform objectTransform = vObject.GetLogic <V_IObjectTransform>();

        bool canShoot = true;

        V_UnitSkeleton_Composite_Weapon unitSkeletonCompositeWeapon = new V_UnitSkeleton_Composite_Weapon(vObject, unitSkeleton, GameAssets.UnitAnimEnum.dMarine_AimWeaponRight, GameAssets.UnitAnimEnum.dMarine_AimWeaponRightInvertV, GameAssets.UnitAnimEnum.dMarine_ShootWeaponRight, GameAssets.UnitAnimEnum.dMarine_ShootWeaponRightInvertV);

        vObject.AddRelatedObject(unitSkeletonCompositeWeapon);
        unitSkeletonCompositeWeapon.SetActive();

        V_UnitSkeleton_Composite_Walker unitSkeletonCompositeWalker_BodyHead = new V_UnitSkeleton_Composite_Walker(vObject, unitSkeleton, GameAssets.UnitAnimTypeEnum.dMarine_Walk, GameAssets.UnitAnimTypeEnum.dMarine_Idle, new[] { "Body", "Head" });

        vObject.AddRelatedObject(unitSkeletonCompositeWalker_BodyHead);

        V_UnitSkeleton_Composite_Walker unitSkeletonCompositeWalker_Feet = new V_UnitSkeleton_Composite_Walker(vObject, unitSkeleton, GameAssets.UnitAnimTypeEnum.dMarine_Walk, GameAssets.UnitAnimTypeEnum.dMarine_Idle, new[] { "FootL", "FootR" });

        vObject.AddRelatedObject(unitSkeletonCompositeWalker_Feet);

        // Update Code
        bool isAimDownSights = false;

        FunctionUpdater.Create(() => {
            Vector3 targetPosition   = UtilsClass.GetMouseWorldPosition();
            Vector3 aimDir           = (targetPosition - vObject.GetPosition()).normalized;
            fieldOfView.transform.up = (aimDir);

            // Check for hits
            Vector3 gunEndPointPosition = vObject.GetLogic <V_UnitSkeleton>().GetBodyPartPosition("MuzzleFlash");
            RaycastHit2D raycastHit     = Physics2D.Raycast(gunEndPointPosition, (targetPosition - gunEndPointPosition).normalized, Vector3.Distance(gunEndPointPosition, targetPosition));
            if (raycastHit.collider != null)
            {
                // Hit something
                targetPosition = raycastHit.point;
            }

            unitSkeletonCompositeWeapon.SetAimTarget(targetPosition);

            if (canShoot && Input.GetMouseButton(0))
            {
                // Shoot
                canShoot = false;
                // Replace Body and Head with Attack
                unitSkeleton.ReplaceBodyPartSkeletonAnim(GameAssets.UnitAnimTypeEnum.dMarine_Attack.GetUnitAnim(aimDir), "Body", "Head");
                // Shoot Composite Skeleton
                unitSkeletonCompositeWeapon.Shoot(targetPosition, () => {
                    canShoot = true;
                });

                // Add Effects
                Vector3 shootFlashPosition = vObject.GetLogic <V_UnitSkeleton>().GetBodyPartPosition("MuzzleFlash");
                if (OnShoot != null)
                {
                    OnShoot(this, new OnShootEventArgs {
                        gunEndPointPosition = shootFlashPosition, shootPosition = targetPosition
                    });
                }

                //Shoot_Flash.AddFlash(shootFlashPosition);
                //WeaponTracer.Create(shootFlashPosition, targetPosition);
            }


            // Manual Movement
            bool isMoving   = false;
            Vector3 moveDir = new Vector3(0, 0);
            if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
            {
                moveDir.y = +1; isMoving = true;
            }
            if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
            {
                moveDir.y = -1; isMoving = true;
            }
            if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
            {
                moveDir.x = -1; isMoving = true;
            }
            if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
            {
                moveDir.x = +1; isMoving = true;
            }
            moveDir.Normalize();

            float moveSpeed = 50f;
            Vector3 targetMoveToPosition = objectTransform.GetPosition() + moveDir * moveSpeed * Time.deltaTime;
            // Test if can move there
            raycastHit = Physics2D.Raycast(GetPosition() + moveDir * .1f, moveDir, Vector3.Distance(GetPosition(), targetMoveToPosition));
            if (raycastHit.collider != null)
            {
                // Hit something
            }
            else
            {
                // Can move, no wall
                objectTransform.SetPosition(targetMoveToPosition);
            }

            if (isMoving)
            {
                Dirt_Handler.SpawnInterval(GetPosition(), moveDir * -1f);
            }


            // Update Feet
            unitSkeletonCompositeWalker_Feet.UpdateBodyParts(isMoving, moveDir);

            if (canShoot)
            {
                // Update Head and Body parts only when Not Shooting
                unitSkeletonCompositeWalker_BodyHead.UpdateBodyParts(isMoving, aimDir);
            }
        });
    }
예제 #14
0
 public LevelSystemAnimator(PlayerStats stats)
 {
     SetPlayerStats(stats);
     FunctionUpdater.Create(() => Update());
 }
예제 #15
0
    public void SetStats(Stats stats)
    {
        this.stats = stats;

        transform.Find("attack").Find("incBtn").GetComponent <Button_UI>().ClickFunc = () => stats.IncreaseStatAmount(Stats.Type.Attack);
        transform.Find("attack").Find("decBtn").GetComponent <Button_UI>().ClickFunc = () => stats.DecreaseStatAmount(Stats.Type.Attack);

        transform.Find("defence").Find("incBtn").GetComponent <Button_UI>().ClickFunc = () => stats.IncreaseStatAmount(Stats.Type.Defence);
        transform.Find("defence").Find("decBtn").GetComponent <Button_UI>().ClickFunc = () => stats.DecreaseStatAmount(Stats.Type.Defence);

        transform.Find("speed").Find("incBtn").GetComponent <Button_UI>().ClickFunc = () => stats.IncreaseStatAmount(Stats.Type.Speed);
        transform.Find("speed").Find("decBtn").GetComponent <Button_UI>().ClickFunc = () => stats.DecreaseStatAmount(Stats.Type.Speed);

        transform.Find("mana").Find("incBtn").GetComponent <Button_UI>().ClickFunc = () => stats.IncreaseStatAmount(Stats.Type.Mana);
        transform.Find("mana").Find("decBtn").GetComponent <Button_UI>().ClickFunc = () => stats.DecreaseStatAmount(Stats.Type.Mana);

        transform.Find("health").Find("incBtn").GetComponent <Button_UI>().ClickFunc = () => stats.IncreaseStatAmount(Stats.Type.Health);
        transform.Find("health").Find("decBtn").GetComponent <Button_UI>().ClickFunc = () => stats.DecreaseStatAmount(Stats.Type.Health);

        // Randomize all Stats
        transform.Find("randomBtn").GetComponent <Button_UI>().ClickFunc = () => {
            stats.SetStatAmount(Stats.Type.Attack, Random.Range(Stats.STAT_MIN, Stats.STAT_MAX));
            stats.SetStatAmount(Stats.Type.Defence, Random.Range(Stats.STAT_MIN, Stats.STAT_MAX));
            stats.SetStatAmount(Stats.Type.Speed, Random.Range(Stats.STAT_MIN, Stats.STAT_MAX));
            stats.SetStatAmount(Stats.Type.Mana, Random.Range(Stats.STAT_MIN, Stats.STAT_MAX));
            stats.SetStatAmount(Stats.Type.Health, Random.Range(Stats.STAT_MIN, Stats.STAT_MAX));
        };

        // Animate Stats
        bool anim = false;

        FunctionPeriodic.Create(() => {
            if (anim)
            {
                if (Random.Range(0, 100) < 50)
                {
                    stats.IncreaseStatAmount(Stats.Type.Attack);
                }
                else
                {
                    stats.DecreaseStatAmount(Stats.Type.Attack);
                }
                if (Random.Range(0, 100) < 50)
                {
                    stats.IncreaseStatAmount(Stats.Type.Defence);
                }
                else
                {
                    stats.DecreaseStatAmount(Stats.Type.Defence);
                }
                if (Random.Range(0, 100) < 50)
                {
                    stats.IncreaseStatAmount(Stats.Type.Speed);
                }
                else
                {
                    stats.DecreaseStatAmount(Stats.Type.Speed);
                }
                if (Random.Range(0, 100) < 50)
                {
                    stats.IncreaseStatAmount(Stats.Type.Mana);
                }
                else
                {
                    stats.DecreaseStatAmount(Stats.Type.Mana);
                }
                if (Random.Range(0, 100) < 50)
                {
                    stats.IncreaseStatAmount(Stats.Type.Health);
                }
                else
                {
                    stats.DecreaseStatAmount(Stats.Type.Health);
                }
            }
        }, .1f);

        transform.Find("animBtn").GetComponent <Button_UI>().ClickFunc = () => {
            anim = !anim;
            transform.Find("animBtn").Find("text").GetComponent <Text>().text = "ANIM: " + anim.ToString().ToUpper();
        };

        // Flashing Color
        //baseMaterialColor = radarMaterial.color;
        //baseMaterialColor.g = .8f;
        Color color    = radarMaterial.color;
        bool  increase = true;

        FunctionUpdater.Create(() => {
            color.g            += .3f * Time.deltaTime * ((increase) ? 1f : -1f);
            radarMaterial.color = color;

            if (color.g >= 1f)
            {
                increase = false;
                //color.g = baseMaterialColor.g;
            }

            if (color.g <= .9f)
            {
                increase = true;
            }
        });

        stats.OnStatsChanged += Stats_OnStatsChanged;
        UpdateStatsText();
    }
예제 #16
0
 private static void RemoveUpdater(FunctionUpdater funcUpdater)
 {
     InitIfNeeded();
     updaterList.Remove(funcUpdater);
 }
예제 #17
0
    // Use this for initialization
    private void Start()
    {
        V_Object        vObject       = CreateBasicUnit(transform, new Vector3(500, 680), 30f, GameAssets.i.m_MarineSpriteSheet);
        V_UnitAnimation unitAnimation = vObject.GetLogic <V_UnitAnimation>();
        V_UnitSkeleton  unitSkeleton  = vObject.GetLogic <V_UnitSkeleton>();
        //V_IObjectWalker walker = vObject.GetLogic<V_IObjectWalker>();
        V_IObjectTransform objectTransform = vObject.GetLogic <V_IObjectTransform>();

        bool canShoot = true;

        V_UnitSkeleton_Composite_Weapon unitSkeletonCompositeWeapon = new V_UnitSkeleton_Composite_Weapon(vObject, unitSkeleton, GameAssets.UnitAnimEnum.dMarine_AimWeaponRight, GameAssets.UnitAnimEnum.dMarine_AimWeaponRightInvertV, GameAssets.UnitAnimEnum.dMarine_ShootWeaponRight, GameAssets.UnitAnimEnum.dMarine_ShootWeaponRightInvertV);

        vObject.AddRelatedObject(unitSkeletonCompositeWeapon);
        unitSkeletonCompositeWeapon.SetActive();

        V_UnitSkeleton_Composite_Walker unitSkeletonCompositeWalker_BodyHead = new V_UnitSkeleton_Composite_Walker(vObject, unitSkeleton, GameAssets.UnitAnimTypeEnum.dMarine_Walk, GameAssets.UnitAnimTypeEnum.dMarine_Idle, new[] { "Body", "Head" });

        vObject.AddRelatedObject(unitSkeletonCompositeWalker_BodyHead);

        V_UnitSkeleton_Composite_Walker unitSkeletonCompositeWalker_Feet = new V_UnitSkeleton_Composite_Walker(vObject, unitSkeleton, GameAssets.UnitAnimTypeEnum.dMarine_Walk, GameAssets.UnitAnimTypeEnum.dMarine_Idle, new[] { "FootL", "FootR" });

        vObject.AddRelatedObject(unitSkeletonCompositeWalker_Feet);

        FunctionUpdater.Create(() => {
            Vector3 targetPosition = UtilsClass.GetMouseWorldPosition();
            Vector3 aimDir         = (targetPosition - vObject.GetPosition()).normalized;

            unitSkeletonCompositeWeapon.SetAimTarget(targetPosition);

            if (canShoot && Input.GetMouseButton(0))
            {
                // Shoot
                canShoot = false;
                // Replace Body and Head with Attack
                unitSkeleton.ReplaceBodyPartSkeletonAnim(GameAssets.UnitAnimTypeEnum.dMarine_Attack.GetUnitAnim(aimDir), "Body", "Head");
                // Shoot Composite Skeleton
                unitSkeletonCompositeWeapon.Shoot(targetPosition, () => {
                    canShoot = true;
                });

                // Add Effects
                Vector3 shootFlashPosition = vObject.GetLogic <V_UnitSkeleton>().GetBodyPartPosition("MuzzleFlash");
                if (OnShoot != null)
                {
                    OnShoot(this, new OnShootEventArgs {
                        gunEndPointPosition = shootFlashPosition, shootPosition = targetPosition
                    });
                }

                //Shoot_Flash.AddFlash(shootFlashPosition);
                //WeaponTracer.Create(shootFlashPosition, targetPosition);
            }


            // Manual Movement
            bool isMoving   = false;
            Vector3 moveDir = new Vector3(0, 0);
            if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
            {
                moveDir.y = +1; isMoving = true;
            }
            if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
            {
                moveDir.y = -1; isMoving = true;
            }
            if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
            {
                moveDir.x = -1; isMoving = true;
            }
            if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
            {
                moveDir.x = +1; isMoving = true;
            }
            moveDir.Normalize();
            objectTransform.SetPosition(objectTransform.GetPosition() + moveDir * 50f * Time.deltaTime);

            /*
             * if (isMoving) {
             *  unitSkeleton.ReplaceBodyPartSkeletonAnim(GameAssets.UnitAnimTypeEnum.dBareHands_Walk.GetUnitAnim(moveDir), "FootL", "FootR");
             *  if (canShoot) {
             *      unitSkeleton.ReplaceBodyPartSkeletonAnim(GameAssets.UnitAnimTypeEnum.dBareHands_Walk.GetUnitAnim(aimDir), "Body", "Head");
             *  }
             * } else {
             *  unitSkeleton.ReplaceBodyPartSkeletonAnim(GameAssets.UnitAnimTypeEnum.dBareHands_Idle.GetUnitAnim(moveDir), "FootL", "FootR");
             *  if (canShoot) {
             *      unitSkeleton.ReplaceBodyPartSkeletonAnim(GameAssets.UnitAnimTypeEnum.dBareHands_Idle.GetUnitAnim(aimDir), "Body", "Head");
             *  }
             * }*/

            if (isMoving)
            {
                Dirt_Handler.SpawnInterval(GetPosition(), moveDir * -1f);
            }


            // Update Feet
            //unitSkeletonCompositeWalker_Feet.UpdateBodyParts(walker.GetLastMoveDir());
            unitSkeletonCompositeWalker_Feet.UpdateBodyParts(isMoving, moveDir);

            if (canShoot)
            {
                // Update Head and Body parts only when Not Shooting
                unitSkeletonCompositeWalker_BodyHead.UpdateBodyParts(isMoving, aimDir);
            }
        });
    }
예제 #18
0
 // Start is called before the first frame update
 void Start()
 {
     CameraSwitcher.SetupCurrentCamera(LC_Utils.GetCurrentCamera());
     FunctionUpdater.Create(LC_Debug.RuntimeDebugObjectsManager.HandleDebugObjectsFarFromCamera);
 }