Ignore:
Timestamp:
2013-07-24 23:56:47 (6 years ago)
Author:
dezhidki
Message:

Muokattu sotilaita viimeiseen muotoon.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/World/Level.cs

    r4635 r4646  
    3232            if (br1.ZFar >= br2.ZNear) 
    3333            { 
    34                 if ((e1.Z + e1.X - e1.RenderOffset.Y) - e1.RenderOffset.Y < (e2.Z + e2.X - e2.RenderOffset.Y) - e2.RenderOffset.Y) return -1; 
     34                //if ((e1.Z + e1.X - e1.RenderOffset.Y) - e1.RenderOffset.Y < (e2.Z + e2.X - e2.RenderOffset.Y) - e2.RenderOffset.Y) return -1; 
    3535                return +1; 
    3636            } 
     
    291291        } 
    292292 
    293         public TileEntity GetTileEntity(int xTile, int zTile) 
    294         { 
     293        public TileEntity GetTileEntity(Entity ent, int xTile, int zTile) 
     294        { 
     295            TileEntity te = null; 
    295296            List<Entity> ents = entitiesInTiles[xTile + zTile * width]; 
    296297            if (ents.Count > 0) 
    297                 return ents[0] as TileEntity; 
     298                te = ents[0] as TileEntity; 
     299            if (te == null) return null; 
     300 
     301            for (int z = zTile - 1; z <= zTile + 1; z++) 
     302            { 
     303                if (z < 0 || z >= height) continue; 
     304                for (int x = xTile - 1; x <= xTile + 1; x++) 
     305                { 
     306                    if (x < 0 || x >= width) continue; 
     307 
     308                    ents = entitiesInTiles[x + z * width]; 
     309 
     310                    if (ents.Count > 0) 
     311                    { 
     312                        Entity e = ents[0]; 
     313                        if (e != te && !e.Blocks(te)) return te; 
     314                    } 
     315                    else return te; 
     316                } 
     317            } 
    298318 
    299319            return null; 
     
    401421 
    402422            return result; 
     423        } 
     424 
     425        public int GetClosestDiagonalOpenPos(Entity ent) 
     426        { 
     427            int xTile = (int)(ent.X / Viewport.TILESIZE); 
     428            int zTile = (int)(ent.Z / Viewport.TILESIZE); 
     429 
     430            bool blocks = false; 
     431            int tp; 
     432 
     433            for (int z = zTile - 1; z <= zTile + 1; z++) 
     434            { 
     435                if (z < 0 || z >= height) continue; 
     436                if (z == zTile) continue; 
     437 
     438                tp = xTile + z * width; 
     439                Tile t = registeredTiles[tiles[tp]]; 
     440                if (t.ID == TILE_VOID || t.IsSolidTo(ent)) blocks |= true; 
     441 
     442                List<Entity> ents = entitiesInTiles[tp]; 
     443 
     444                foreach (Entity e in ents) 
     445                { 
     446                    if (e != ent) 
     447                        blocks |= e.Blocks(ent); 
     448                } 
     449                if (!blocks) return tp; 
     450            } 
     451 
     452            blocks = false; 
     453            for (int x = xTile - 1; x <= xTile + 1; x++) 
     454            { 
     455                if (x < 0 || x >= width) continue; 
     456                if (x == xTile) continue; 
     457 
     458                tp = x + zTile * width; 
     459                Tile t = registeredTiles[tiles[tp]]; 
     460                if (t.ID == TILE_VOID || t.IsSolidTo(ent)) blocks |= true; 
     461 
     462                List<Entity> ents = entitiesInTiles[tp]; 
     463 
     464                foreach (Entity e in ents) 
     465                { 
     466                    if (e != ent) 
     467                        blocks |= e.Blocks(ent); 
     468                } 
     469                if (!blocks) return tp; 
     470            } 
     471 
     472 
     473            //for (int z = zTile - 1; z <= zTile + 1; z++) 
     474            //{ 
     475            //    if (z < 0 || z >= height) continue; 
     476            //    for (int x = xTile - 1; x <= xTile + 1; x++) 
     477            //    { 
     478            //        if (x < 0 || x >= width) continue; 
     479            //        if (x == xTile && z == zTile) continue; 
     480 
     481            //        tp = x + z * width; 
     482            //        Tile t = registeredTiles[tiles[tp]]; 
     483            //        if (t.ID == TILE_VOID || t.IsSolidTo(ent)) blocks |= true; 
     484 
     485            //        List<Entity> ents = entitiesInTiles[tp]; 
     486 
     487            //        foreach (Entity e in ents) 
     488            //        { 
     489            //            if (e != ent) 
     490            //                blocks |= e.Blocks(ent); 
     491            //        } 
     492            //        if (!blocks) return tp; 
     493            //    } 
     494            //} 
     495 
     496            return -1; 
    403497        } 
    404498 
     
    426520            } 
    427521 
    428  
    429522            return result; 
    430523        } 
Note: See TracChangeset for help on using the changeset viewer.