コード例 #1
0
        //float now;

        float GetDistToTarget(AutoTile targetTile)
        {
            Vector3 target = RpgMapHelper.GetTileCenterPosition(targetTile.TileX, targetTile.TileY);

            target.z = transform.position.z;
            return((transform.position - target).magnitude);
        }
コード例 #2
0
        void FixedUpdate()
        {
            Vector3 vTarget = m_pathFindingBehaviour.TargetPos;

            //vTarget = RpgMapHelper.GetTileCenterPosition(vTarget);
            vTarget.z = transform.position.z;

            // stop when target position has been reached
            Vector3 vDist = (vTarget - transform.position);

            Debug.DrawLine(vTarget, transform.position); //TODO: the target is the touch position, not the target tile center. Fix this to go to target position once in the target tile

            if (m_pathFindingBehaviour.IsComputingPath)
            {
                ;// do nothing
            }
            else
            {
                bool isInTargetTile = RpgMapHelper.GetTileIdxByPosition(vTarget) == RpgMapHelper.GetTileIdxByPosition(transform.position);
                if (isInTargetTile || m_pathFindingBehaviour.CurrentPathNode != null && m_pathFindingBehaviour.CurrentPathNode.Next == null)
                {
                    m_pathFindingBehaviour.enabled = false;
                    if (vDist.magnitude > MinDistToReachTarget)
                    {
                        m_moving.Arrive(vTarget);
                    }
                    else
                    {
                        m_moving.Veloc = Vector3.zero;
                    }
                }
            }

            UpdateAnimDir();
        }
コード例 #3
0
        public void ActivateTrigger(eTrigger trigger)
        {
            if (m_CurTile == null) return;

            Vector2 targetMapPos = new Vector2(m_CurTile.TileX, m_CurTile.TileY);

            switch (trigger)
            {
                case eTrigger.MoveDown:
                    targetMapPos.y += 1;
                    break;
                case eTrigger.MoveLeft:
                    targetMapPos.x -= 1;
                    break;
                case eTrigger.MoveRight:
                    targetMapPos.x += 1;
                    break;
                case eTrigger.MoveUp:
                    targetMapPos.y -= 1;
                    break;
            }

            if (PlayerState == eState.Idle && (targetMapPos.x != m_CurTile.TileX || targetMapPos.y != m_CurTile.TileY))
            {
                if (AutoTileMap.Instance.GetCellAutotileCollision((int)targetMapPos.x, (int)targetMapPos.y) == eTileCollisionType.PASSABLE)
                {
                    Vector3 vTargetPos = RpgMapHelper.GetTileCenterPosition((int)targetMapPos.x, (int)targetMapPos.y);
                    TargetTile = RpgMapHelper.GetAutoTileByPosition(vTargetPos, 0);
                    m_fAxisX = TargetTile.TileX - m_CurTile.TileX; m_fAxisX = m_fAxisX != 0 ? Mathf.Sign(m_fAxisX) : 0;
                    m_fAxisY = TargetTile.TileY - m_CurTile.TileY; m_fAxisY = m_fAxisY != 0 ? Mathf.Sign(m_fAxisY) : 0;

                    SetState(eState.Moving);
                }
            }
        }
コード例 #4
0
 void Start()
 {
     m_animCtrl = GetComponents <DirectionalAnimation>()[0];
     m_phyChar  = GetComponent <PhysicCharBehaviour>();
     TargetTile = RpgMapHelper.GetAutoTileByPosition(transform.position, 0);
     ableToMove = true;
 }
コード例 #5
0
        void Update()
        {               
            m_CurTile = RpgMapHelper.GetAutoTileByPosition(transform.position, 0);
            if (TargetTile == null) TargetTile = m_CurTile;

            _DoStateLogic();
        }
コード例 #6
0
        protected override void Update()
        {
            eAnimDir savedAnimDir = m_animCtrl.AnimDirection;

            base.Update();

            /*
             * if(m_keepAttackDirTimer > 0f)
             * {
             *  m_keepAttackDirTimer -= Time.deltaTime;
             *  m_animCtrl.AnimDirection = savedAnimDir;
             * }
             */
            m_phyChar.enabled = (Vehicle == null);
            if (Vehicle != null)
            {
                m_animCtrl.IsPlaying = false;
            }

            else
            {
                // character mouse direction
                Vector3 dir = Input.mousePosition - Camera.main.WorldToScreenPoint(transform.position);
                if (dir.x > 0)
                {
                    m_animCtrl.AnimDirection = eAnimDir.Right;
                }
                else if (dir.x < 0)
                {
                    m_animCtrl.AnimDirection = eAnimDir.Left;
                }

                if (Input.GetKeyDown("r"))   // mousebuttondown(0)
                {
                    weaponH.Shoot();
                }

                bool isMoving = (m_phyChar.Dir.sqrMagnitude >= 0.01);
                if (isMoving)
                {
                    //m_phyChar.Dir.Normalize();
                    m_camera2DFollowBehaviour.Target = transform;
                }
                else
                {
                    m_phyChar.Dir = Vector3.zero;
                }
            }

            int tileIdx = RpgMapHelper.GetTileIdxByPosition(transform.position);

            if (tileIdx != m_lastTileIdx || m_lastFogSightLength != FogSightLength)
            {
                RpgMapHelper.RemoveFogOfWarWithFade(transform.position, FogSightLength);
            }

            m_lastFogSightLength = FogSightLength;
            m_lastTileIdx        = tileIdx;
        }
コード例 #7
0
        float GetDistToTarget(AutoTile targetTile)
        {
            Vector3 target = m_curNode.Next != null?RpgMapHelper.GetTileCenterPosition(targetTile.TileX, targetTile.TileY) : (Vector3)TargetPos;

            target.z = transform.position.z;
            float dist = (transform.position - target).magnitude;

            return(dist);
        }
コード例 #8
0
ファイル: NewAI.cs プロジェクト: hillmb1/WayOfKings
//		public bool IsPassable()
//		{
//			AutoTileMap autoTileMap = AutoTileMap.Instance;
//
//			if (autoTileMap.IsValidAutoTilePos(TileX, TileY))
//			{
//				for( int iLayer = autoTileMap.GetLayerCount() - 1; iLayer >= 0; --iLayer )
//				{
//					if( autoTileMap.MapLayers[iLayer].LayerType == eLayerType.Ground )
//					{
//						AutoTile autoTile = autoTileMap.GetAutoTile(TileX, TileY, iLayer);
//						eTileCollisionType collType = autoTile.Id >= 0 ? autoTileMap.Tileset.AutotileCollType[autoTile.Id] : eTileCollisionType.EMPTY;
//						if( collType == eTileCollisionType.PASSABLE || collType == eTileCollisionType.WALL )
//						{
//							return true;
//						}
//						else if( collType == eTileCollisionType.BLOCK || collType == eTileCollisionType.FENCE )
//						{
//							return false;
//						}
//					}
//				}
//			}
//			return false;
//		}

        //A* Style pathfinding
        public Vector3 findPath()
        {
            AutoTile m_CurTile;
            AutoTile m_CurTile2;
            AutoTile m_CurTile3;
            Vector3  targetMapPos;

            float[,] map = new float[3, 3]; //Represents the 8 surrounding the object
            float idx    = -(1f * .32f);    //far left tile Column
            float idy    = (1f * .32f);     //Top most Row of tiles
            float lowest = 100f;

            low = new Vector3(0f, 0f, 0f);
            //Loops through each row
            for (int i = 0; i < 3; i++)
            {
                //Loops through each tile in this row
                for (int j = 0; j < 3; j++)
                {
                    float temp = Vector3.Distance(this.transform.position + new Vector3(idx, idy, 0f), targetTile);


                    map [i, j] = temp;
                    m_CurTile  = RpgMapHelper.GetAutoTileByPosition(this.transform.position + new Vector3(idx, idy, 0f), 0);
                    m_CurTile2 = RpgMapHelper.GetAutoTileByPosition(this.transform.position + new Vector3(idx, idy, 0f), 1);
                    m_CurTile3 = RpgMapHelper.GetAutoTileByPosition(this.transform.position + new Vector3(idx, idy, 0f), 2);
                    //targetMapPos = new Vector2(m_CurTile.TileX, m_CurTile.TileY);
                    targetMapPos = RpgMapHelper.GetTileCenterPosition(m_CurTile.TileX, m_CurTile.TileY);
                    eTileCollisionType collType  = AutoTileMap.Instance.GetAutotileCollisionAtPosition(targetMapPos);
                    eTileCollisionType collType2 = AutoTileMap.Instance.GetAutotileCollisionAtPosition(targetMapPos);
                    eTileCollisionType collType3 = AutoTileMap.Instance.GetAutotileCollisionAtPosition(targetMapPos);
                    if ((i == 0 && j == 0) || (i == 2 && j == 0) || (i == 0 && j == 2) || (i == 2 && j == 2) || (i == 1 && j == 1) ||
                        collType != eTileCollisionType.PASSABLE
                        )
                    {
                        temp = 100f;
                    }

                    if (temp < lowest)
                    {
                        lowest = temp;

                        low = new Vector3(idx, idy, 0f);
                    }

                    idx += .32f;
                }

                idy -= .32f;

                idx = -.32f;
            }

            Vector3 decision = low;

            return(decision);
        }
コード例 #9
0
        void Update()
        {
//			if (!ableToMove) {
//				TargetTile = null;
//			}
            m_CurTile = RpgMapHelper.GetAutoTileByPosition(transform.position, 0);
            if (TargetTile == null)
            {
                TargetTile = m_CurTile;
            }

            _DoStateLogic();
        }
コード例 #10
0
ファイル: PlayerController.cs プロジェクト: ColacX/Gai
        protected override void Update()
        {
            eAnimDir savedAnimDir = m_animCtrl.AnimDirection;

            base.Update();
            if (m_keepAttackDirTimer > 0f)
            {
                m_keepAttackDirTimer    -= Time.deltaTime;
                m_animCtrl.AnimDirection = savedAnimDir;
            }
            m_phyChar.enabled = (Vehicle == null);
            if (Vehicle != null)
            {
                m_animCtrl.IsPlaying = false;
            }
            else
            {
                DoInputs();

                bool isMoving = (m_phyChar.Dir.sqrMagnitude >= 0.01);
                if (isMoving)
                {
                    //m_phyChar.Dir.Normalize();
                    m_camera2DFollowBehaviour.Target = transform;
                }
                else
                {
                    m_phyChar.Dir = Vector3.zero;
                }
            }

            int tileIdx = RpgMapHelper.GetTileIdxByPosition(transform.position);

            if (tileIdx != m_lastTileIdx || m_lastFogSightLength != FogSightLength)
            {
                RpgMapHelper.RemoveFogOfWarWithFade(transform.position, FogSightLength);
            }

            m_lastFogSightLength = FogSightLength;
            m_lastTileIdx        = tileIdx;
        }
コード例 #11
0
        private void _DoStateLogic()
        {
            switch (PlayerState)
            {
            case eState.Idle:
                UpdateMovement(0, 0);
                transform.position = RpgMapHelper.GetTileCenterPosition(m_CurTile.TileX, m_CurTile.TileY) + new Vector3(0, 0, transform.position.z);
                break;

            case eState.Moving:
                UpdateMovement(m_fAxisX, -m_fAxisY);
                Vector3  vCheckPos = transform.position - new Vector3((AutoTileMap.Instance.CellSize.x / 2) * m_fAxisX, -(AutoTileMap.Instance.CellSize.y / 2) * m_fAxisY);
                AutoTile checkTile = RpgMapHelper.GetAutoTileByPosition(vCheckPos, 0);
                if (checkTile == TargetTile)
                {
                    transform.position = RpgMapHelper.GetTileCenterPosition(TargetTile.TileX, TargetTile.TileY) + new Vector3(0, 0, transform.position.z);
                    SetState(eState.Idle);
                }
                break;
            }
        }
コード例 #12
0
        internal MapTileNode(int idx, MapPathFinding owner) 
        {
            m_owner = owner;
            TileIdx = idx;
            TileX = idx % AutoTileMap.Instance.MapTileWidth;
            TileY = idx / AutoTileMap.Instance.MapTileWidth;
            Position = RpgMapHelper.GetTileCenterPosition(TileX, TileY);

            // get all neighbors row by row, neighIdx will be the idx of left most tile per each row
            int neighIdx = (idx-1)-AutoTileMap.Instance.MapTileWidth;
            for (int i = 0; i < 3; ++i, neighIdx += AutoTileMap.Instance.MapTileWidth)
            {
                for (int j = 0; j < 3; ++j)
                {
                    if (i != 1 || j != 1) // skip this node
                    {
                        m_neighborIdxList.Add(neighIdx + j);
                    }
                }
            }
        }
コード例 #13
0
        protected void FixedUpdate()
        {
            if (m_curNode != null)
            {
                MapTileNode curTileNode = m_curNode.Value as MapTileNode;
                AutoTile    autoTile    = RpgMapHelper.GetAutoTileByPosition(transform.position, 0);
                if (
                    (autoTile.TileX != curTileNode.TileX || autoTile.TileY != curTileNode.TileY) ||
                    GetDistToTarget(autoTile) > MinDistToMoveNextTarget // wait until min dist is reached
                    )
                {
                    Vector3 vSeek = curTileNode.Position; vSeek.z = transform.position.z; // put at this object level
                    if (m_movingBehavior)
                    {
                        if (m_curNode.Next != null)
                        {
                            m_movingBehavior.Seek(vSeek);
                        }
                        else
                        {
                            m_movingBehavior.Arrive(vSeek);
                        }
                    }
                }
                else
                {
                    m_curNode = m_curNode.Next;
                }
            }

            //if (TargetPos != null) //TODO: TargetPos can't be null
            {
                int prevTileidx = m_startTileIdx;
                m_startTileIdx  = RpgMapHelper.GetTileIdxByPosition(TargetPos);
                m_isUpdatePath |= prevTileidx != m_startTileIdx;
                if (m_isUpdatePath)//|| !m_isComputing) //Removed to keep actor moving until reach the center of the node
                {
                    m_isUpdatePath = false;
                    m_endTileIdx   = RpgMapHelper.GetTileIdxByPosition(transform.position);
                    //now = Time.realtimeSinceStartup;
                    StopCoroutine("ComputePath");
                    StartCoroutine("ComputePath");
                }
            }

            //+++ Debug
            for (LinkedListNode <IPathNode> it = Path.First; it != null; it = it.Next)
            {
                MapTileNode mapTileNode0 = it.Value as MapTileNode;
                if (it.Next != null)
                {
                    MapTileNode mapTileNode1 = it.Next.Value as MapTileNode;
                    Vector3     v0           = mapTileNode0.Position;
                    Vector3     v1           = mapTileNode1.Position;
                    v0.z = transform.position.z;
                    v1.z = transform.position.z;
                    Debug.DrawLine(v0, v1, Color.red);
                }
            }
            //---
        }
コード例 #14
0
        protected override void Update()
        {
            if (m_playerCtrl == null)
            {
                return;
            }

            Color textColor = HelpText.GetComponent <Renderer>().material.color;

            textColor.a = Mathf.Clamp(0.2f + Mathf.Abs(Mathf.Sin(0.05f * Time.frameCount)), 0f, 1f);
            HelpText.GetComponent <Renderer>().material.color = textColor;

            if (m_isLanding)
            {
                if (VehicleType == eVehicleType.Aircraft)
                {
                    m_altitude = Mathf.Lerp(MaxAltitude, 0f, LandingTime * (1 - m_altitude / MaxAltitude) + Time.deltaTime);
                    //m_altitude -= m_altitude / 20;

                    if (m_altitude <= 0.01)
                    {
                        m_altitude = 0;
                        m_playerCtrl.SetVisible(true);
                    }
                }
            }
            else
            {
                // Empty vehicle logic
                if (m_playerCtrl.Vehicle == null)
                {
                    Vector3 vPos = transform.position;
                    bool    isPlayerCloseEnough = false;
                    if (VehicleType == eVehicleType.Boat)
                    {
                        m_animCtrl.IsPlaying = true; //Force to always animate
                        Rect rVert = new Rect(vPos.x + phyChar.CollRect.x, vPos.y + phyChar.CollRect.y - phyChar.CollRect.height, phyChar.CollRect.width, 3 * phyChar.CollRect.height);
                        Rect rHor  = new Rect(vPos.x + phyChar.CollRect.x - phyChar.CollRect.width, vPos.y + phyChar.CollRect.y, 3 * phyChar.CollRect.width, phyChar.CollRect.height);
                        RpgMapHelper.DebugDrawRect(Vector3.zero, rVert, Color.blue);
                        RpgMapHelper.DebugDrawRect(Vector3.zero, rHor, Color.green);
                        isPlayerCloseEnough = rVert.Contains(m_playerCtrl.transform.position) || rHor.Contains(m_playerCtrl.transform.position);
                    }
                    else //if (VehicleType == eVehicleType.Aircraft)
                    {
                        m_animCtrl.IsPlaying = false; //Force to don't animate
                        Rect rect = new Rect(vPos.x + phyChar.CollRect.x, vPos.y + phyChar.CollRect.y - phyChar.CollRect.height / 3, phyChar.CollRect.width, phyChar.CollRect.height);
                        RpgMapHelper.DebugDrawRect(Vector3.zero, rect, Color.blue);
                        isPlayerCloseEnough = rect.Contains(m_playerCtrl.transform.position);
                    }

                    HelpText.GetComponent <Renderer>().enabled = isPlayerCloseEnough;
                    if (isPlayerCloseEnough)
                    {
                        if (Input.GetKeyDown(KeyCode.Return))
                        {
                            m_playerCtrl.Vehicle = this;
                            HelpText.GetComponent <Renderer>().enabled = false;
                            m_playerCtrl.SetVisible(VehicleType == eVehicleType.Boat);
                            if (VehicleType == eVehicleType.Aircraft)
                            {
                                m_phyChar.IsCollEnabled = false;
                            }
                        }
                    }
                }
                // Occupied vehicle logic
                else if (m_playerCtrl.Vehicle == this)
                {
                    base.Update();
                    m_animCtrl.IsPlaying = true; //Force to always animate

                    if (VehicleType == eVehicleType.Aircraft)
                    {
                        m_altitude = Mathf.Lerp(0f, MaxAltitude, LandingTime * (m_altitude / MaxAltitude) + Time.deltaTime);
                        int sightLength = (int)(MaxAltitudeSightLength * (m_altitude / MaxAltitude));

                        int tileIdx = RpgMapHelper.GetTileIdxByPosition(transform.position);

                        if (tileIdx != m_lastTileIdx || m_lastFogSightLength != sightLength)
                        {
                            RpgMapHelper.RemoveFogOfWarWithFade(transform.position, sightLength);
                        }

                        m_lastFogSightLength = sightLength;
                        m_lastTileIdx        = tileIdx;
                    }

                    if (Input.GetKeyDown(KeyCode.Return))
                    {
                        int     dir         = VehicleType == eVehicleType.Boat ? (int)m_playerCtrl.AnimCtrl.AnimDirection : (int)eAnimDir.Down;
                        Vector3 vDir        = VehicleType == eVehicleType.Boat ? m_playerCtrl.AnimCtrl.GetAnimDirection() : new Vector2(0, -0.5f);
                        float   fMult       = _landingMult[dir >> 1]; // divide dir by two, because eAnimDir have 8 directions and this way it is translated to a 4 direction index
                        Vector3 vLandingPos = transform.position + fMult * vDir * AutoTileMap.Instance.CellSize.x;
                        vLandingPos.z = m_playerCtrl.transform.position.z;
                        bool isColliding = m_playerCtrl.PhyCtrl.IsColliding(vLandingPos);
                        RpgMapHelper.DebugDrawRect(vLandingPos, m_playerCtrl.PhyCtrl.CollRect, isColliding ? Color.red : Color.blue, 0.5f);

                        if (VehicleType == eVehicleType.Aircraft)
                        {
                            isColliding |= PhyCtrl.IsColliding(transform.position);
                            RpgMapHelper.DebugDrawRect(transform.position, PhyCtrl.CollRect, isColliding ? Color.red : Color.blue, 0.5f);
                        }

                        isColliding |= RpgMapHelper.GetAutoTileByPosition(vLandingPos, 0).IsWaterTile();

                        if (!isColliding)
                        {
                            m_vLandingPos = vLandingPos;
                            m_isLanding   = true;
                            PhyCtrl.Dir   = Vector3.zero;
                        }
                    }
                }
            }

            Vector3 vAnimSprPos = AnimCtrl.TargetSpriteRenderer.transform.localPosition;

            vAnimSprPos.y = m_altitude;
            AnimCtrl.TargetSpriteRenderer.transform.localPosition = vAnimSprPos;
            if (ShadowSprite != null)
            {
                float scale = (MaxAltitude - m_altitude / 3);
                ShadowSprite.transform.localScale = new Vector3(scale, scale, scale);
            }

            //+++fix overlay layer problem while landing
            if (VehicleType == eVehicleType.Aircraft)
            {
                Vector3 vCheckPos = m_animCtrl.TargetSpriteRenderer.transform.position;
                //Debug.DrawRay( vCheckPos, Vector3.right, Color.red );
                int bottomTile = RpgMapHelper.GetAutoTileByPosition(vCheckPos, 2).Id;
                vCheckPos.y += AutoTileMap.Instance.CellSize.y;
                //Debug.DrawRay(vCheckPos, Vector3.right, Color.green);
                int topTile = RpgMapHelper.GetAutoTileByPosition(vCheckPos, 2).Id;
                if (
                    (bottomTile < 0 && topTile >= 0 && m_altitude > 0.30f) || // bottom tile is not overlay and top tile is overlay
                    (m_altitude > 0.02f && bottomTile < 0)    // taking off set Z over overlay layer only after bottom tile is not overlay
                    )
                {
                    GetComponent <IsoSpriteController>().enabled = false;
                    Vector3 vSprPos = m_animCtrl.TargetSpriteRenderer.transform.position;
                    vSprPos.z = AutoTileMap.Instance.FindLastLayer(eLayerType.Overlay).Depth - 0.1f;
                    m_animCtrl.TargetSpriteRenderer.transform.position = vSprPos;
                }
                else if (m_altitude <= 0.8)
                { // found an overlay tile? enable IsoSpriteController to adjust Z under overlay layer
                    GetComponent <IsoSpriteController>().enabled = true;
                }
            }
            //---
        }
コード例 #15
0
        /// <summary>
        /// Reveal an area using as center, the tile over worldPosition and a sight length in tiles (sightLength)
        /// Uses a coroutine to make a fade transition
        /// </summary>
        /// <param name="worldPosition">The center tile</param>
        /// <param name="sightLength">The sight length in tiles</param>
        public static void RemoveFogOfWarWithFade(Vector3 worldPosition, int sightLength)
        {
            float sqrMaxDist = sightLength * sightLength * 4;
            int   iFogLayer  = AutoTileMap.Instance.MapLayers.FindIndex(x => x.LayerType == AutoTileMap.eLayerType.FogOfWar);

            if (iFogLayer >= 0)
            {
                AutoTileMap.AutoTile centerTile = RpgMapHelper.GetAutoTileByPosition(worldPosition, iFogLayer);
                for (int yf = -sightLength; yf <= sightLength; ++yf)
                {
                    for (int xf = -sightLength; xf <= sightLength; ++xf)
                    {
                        int tx = centerTile.TileX + xf;
                        int ty = centerTile.TileY + yf;
                        if (AutoTileMap.Instance.IsValidAutoTilePos(tx, ty)) // This extra check is needed with fog of war layer
                        {
                            byte[] aFogAlpha = new byte[4];
                            for (int i = 0; i < aFogAlpha.Length; ++i)
                            {
                                //NOTE: for the fog level, each tile is divided in 4 tileparts.
                                // The index i of each tile part is:
                                // 0|2
                                // 1|3

                                int xf2 = 0;
                                if (xf < 0)
                                {
                                    xf2 = (i == 0 || i == 1) ? 2 * -xf : 2 * -xf - 1; //NOTE: 0, 1 are the left tile parts
                                }
                                else if (xf > 0)
                                {
                                    xf2 = (i == 2 || i == 3) ? 2 * xf : 2 * xf - 1;
                                }
                                else //if( xf == 0 )
                                {
                                    xf2 = 0;
                                }

                                int yf2 = 0;
                                if (yf < 0)
                                {
                                    yf2 = (i == 0 || i == 2) ? 2 * -yf : 2 * -yf - 1;
                                }
                                else if (yf > 0)
                                {
                                    yf2 = (i == 1 || i == 3) ? 2 * yf : 2 * yf - 1;
                                }
                                else //if( xf == 0 )
                                {
                                    yf2 = 0;
                                }

                                float sqrDist = xf2 * xf2 + yf2 * yf2;

                                //NOTE: sqrDist = [0..(sightAreaSize*2)^2]

                                float fAlphaFactor = Mathf.Clamp01(sqrDist / sqrMaxDist);
                                fAlphaFactor *= fAlphaFactor;
                                byte fogAlpha = (byte)(0xff * fAlphaFactor);
                                aFogAlpha[i] = fogAlpha;
                            }
                            AutoTileMap.Instance.AddFogOfWarSetToQueue(tx + ty * AutoTileMap.Instance.MapTileWidth, aFogAlpha);
                        }
                    }
                }

                AutoTileMap.Instance.RefreshMinimapTexture(centerTile.TileX - sightLength, centerTile.TileY - sightLength, 2 * sightLength, 2 * sightLength);
            }
        }
コード例 #16
0
        protected override void Update()
        {
            int tileIdx = RpgMapHelper.GetTileIdxByPosition(transform.position);

            if (tileIdx != m_lastTileIdx || m_lastFogSightLength != FogSightLength)
            {
                RpgMapHelper.RemoveFogOfWarWithFade(transform.position, FogSightLength);
            }

            m_lastFogSightLength = FogSightLength;
            m_lastTileIdx        = tileIdx;


            if (teleporting == true && UnityEngine.SceneManagement.SceneManager.GetActiveScene().name == newScene)
            {
                teleporting = false;
                teleport();
            }
            Vector3 savedDir = m_phyChar.Dir;

            m_phyChar.Dir = savedDir;

            m_tileMovementBehaviour.enabled = (Vehicle == null);

            //DirectionalAnimation[] anims = GetComponentsInChildren<DirectionalAnimation> ();

            if (m_tileMovementBehaviour.enabled)
            {
                if (Input.GetKey(KeyCode.Space) && canMove)
                {
                    attack.enabled = true;
                    attack.SetAnimDirection(currDir);
                    attack.IsPlaying = true;
                    attacking();
                    attack.OnAnimationLoopOver += reset;
                    canMove = false;
                }
                else if (canMove)
                {
                    if (Input.GetKey(KeyCode.RightArrow))
                    {
                        if (Input.GetAxis("Horizontal") < .2)
                        {
                            m_animCtrl.SetAnimDirection(Vector3.right);
                            currDir = Vector3.right;
//						for (int i = 0; i < anims.Length; i++) {
//
//							anims[i].SetAnimDirection(Vector3.right);
//						}
                        }
                        else
                        {
                            m_animCtrl.SetAnimDirection(Vector3.right);
                            currDir = Vector3.right;
                            m_tileMovementBehaviour.ActivateTrigger(TileMovementBehaviour.eTrigger.MoveRight);
                        }
                    }
                    else if (Input.GetKey(KeyCode.LeftArrow))
                    {
                        if (Mathf.Abs(Input.GetAxis("Horizontal")) < .2)
                        {
                            m_animCtrl.SetAnimDirection(Vector3.left);
                            currDir = Vector3.left;

//						for (int i = 0; i < anims.Length; i++) {
//
//							anims[i].SetAnimDirection(Vector3.left);
//						}
                        }
                        else
                        {
                            m_animCtrl.SetAnimDirection(Vector3.left);
                            currDir = Vector3.left;
                            m_tileMovementBehaviour.ActivateTrigger(TileMovementBehaviour.eTrigger.MoveLeft);
                        }
                    }
                    else if (Input.GetKey(KeyCode.UpArrow))
                    {
                        if (Input.GetAxis("Vertical") < .2)
                        {
                            m_animCtrl.SetAnimDirection(Vector3.up);
                            currDir = Vector3.up;
//						for (int i = 0; i < anims.Length; i++) {
//
//							anims[i].SetAnimDirection(Vector3.up);
//						}
                        }
                        else
                        {
                            m_animCtrl.SetAnimDirection(Vector3.up);
                            currDir = Vector3.up;
                            m_tileMovementBehaviour.ActivateTrigger(TileMovementBehaviour.eTrigger.MoveUp);
                        }
                    }
                    else if (Input.GetKey(KeyCode.DownArrow))
                    {
                        if (Mathf.Abs(Input.GetAxis("Vertical")) < .2)
                        {
                            m_animCtrl.SetAnimDirection(Vector3.down);
                            currDir = Vector3.down;

//						for (int i = 0; i < anims.Length; i++) {
//
//							anims[i].SetAnimDirection(Vector3.down);
//						}
                        }
                        else
                        {
                            m_animCtrl.SetAnimDirection(Vector3.down);
                            currDir = Vector3.down;
                            m_tileMovementBehaviour.ActivateTrigger(TileMovementBehaviour.eTrigger.MoveDown);
                        }
                    }
                }
            }
        }
コード例 #17
0
        // Update is called once per frame
        void Update()
        {
            Vector3 vPlayerPos        = m_player.transform.position; vPlayerPos.z = transform.position.z;
            Ray2D   sightRay          = new Ray2D(transform.position, vPlayerPos - transform.position);
            float   distToTarget      = Vector2.Distance(vPlayerPos, transform.position);
            float   fSightBlockedDist = IsSightBlockedByBlockedTiles? RpgMapHelper.Raycast(sightRay, distToTarget) : -1f;
            // NOTE: fSightBlockedDist will be -1f if sight line is not blocked by blocked collision tile
            bool isPlayerSeen = distToTarget < SightDistance && fSightBlockedDist == -1f;

            if (isPlayerSeen)
            {
                m_pathFindingBehaviour.TargetPos = vPlayerPos;
            }

            bool isTargetReached = Vector2.Distance(m_pathFindingBehaviour.TargetPos, transform.position) <= MinDistToReachTarget;

            if (!isPlayerSeen && isTargetReached)
            {
                // Move around
                m_pathFindingBehaviour.enabled = false;
                vPlayerPos = transform.position;
                m_fAngOff += Random.Range(-AngRandOff, AngRandOff);
                Vector3 vOffset = Quaternion.AngleAxis(m_fAngOff, Vector3.forward) * (AngRandRadious * Vector3.right);
                vPlayerPos += vOffset;
                m_moving.Arrive(vPlayerPos);
            }
            else // Follow the player
            {
                // stop following the path when closed enough to target
                m_pathFindingBehaviour.enabled = !isTargetReached;
                if (!m_pathFindingBehaviour.enabled)
                {
                    m_fAngOff += Random.Range(-AngRandOff, AngRandOff);
                    Vector3 vOffset = Quaternion.AngleAxis(m_fAngOff, Vector3.forward) * (AngRandRadious * Vector3.right);
                    vPlayerPos += vOffset;
                    Debug.DrawLine(transform.position, m_player.transform.position, Color.blue);
                    Debug.DrawRay(m_player.transform.position, vOffset, Color.blue);

                    m_moving.Arrive(vPlayerPos);
                }
            }

            //+++avoid obstacles
            Vector3 vTurnVel = Vector3.zero;

            if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.RIGHT))
            {
                vTurnVel.x = -m_moving.MaxSpeed;
            }
            else if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.LEFT))
            {
                vTurnVel.x = m_moving.MaxSpeed;
            }
            if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.DOWN))
            {
                vTurnVel.y = m_moving.MaxSpeed;
            }
            else if (0 != (m_phyChar.CollFlags & PhysicCharBehaviour.eCollFlags.UP))
            {
                vTurnVel.y = -m_moving.MaxSpeed;
            }
            if (vTurnVel != Vector3.zero)
            {
                m_moving.ApplyForce(vTurnVel - m_moving.Veloc);
            }
            //---

            //fix to avoid flickering of the creature when collides with wall
            if (Time.frameCount % 16 == 0)
            //---
            {
                if (!LockAnimDir)
                {
                    UpdateAnimDir();
                }
            }
        }
コード例 #18
0
        protected override void Update()
        {
            eAnimDir savedAnimDir = m_animCtrl.AnimDirection;

            if (!PhotonView.isMine)
            {
                return;
            }

            base.Update();

            /*
             * if(m_keepAttackDirTimer > 0f)
             * {
             *  m_keepAttackDirTimer -= Time.deltaTime;
             *  m_animCtrl.AnimDirection = savedAnimDir;
             * }
             */
            m_phyChar.enabled = (Vehicle == null);
            if (Vehicle != null)
            {
                m_animCtrl.IsPlaying = false;
            }

            else
            {
                if (Input.GetAxis("Mouse ScrollWheel") != 0f)
                {
                    weaponH.Change();
                }

                // character mouse direction
                Vector3 dir = Input.mousePosition - Camera.main.WorldToScreenPoint(transform.position);
                if (!isForce)
                {
                    if (dir.x > 0)
                    {
                        m_animCtrl.AnimDirection = eAnimDir.Right;
                        if (currentDir == 0)
                        {
                            // right
                            weaponH.reverseDirection(1);
                            currentDir = 1;
                        }
                    }
                    else if (dir.x < 0)
                    {
                        m_animCtrl.AnimDirection = eAnimDir.Left;
                        if (currentDir == 1)
                        {
                            // left
                            weaponH.reverseDirection(0);
                            currentDir = 0;
                        }
                    }
                }

                // 재장전
                if (Input.GetKey("r"))
                {
                    weaponH.Reload();
                }

                // 무기 버리기
                if (Input.GetKey("g"))
                {
                    weaponH.DropGun();
                }

                if (Input.GetMouseButtonDown(0))   // mousebuttondown(0)
                {
                    weaponH.Shoot();
                }

                bool isMoving = (m_phyChar.Dir.sqrMagnitude >= 0.01);
                if (isMoving)
                {
                    //m_phyChar.Dir.Normalize();
                    m_camera2DFollowBehaviour.Target = transform;
                }
                else
                {
                    m_phyChar.Dir = Vector3.zero;
                }
            }

            int tileIdx = RpgMapHelper.GetTileIdxByPosition(transform.position);

            if (tileIdx != m_lastTileIdx || m_lastFogSightLength != FogSightLength)
            {
                RpgMapHelper.RemoveFogOfWarWithFade(transform.position, FogSightLength);
            }

            m_lastFogSightLength = FogSightLength;
            m_lastTileIdx        = tileIdx;
        }